[Docker] docker compose란(+ yaml은? )

Hello! ·2023년 2월 21일
0

Docker

목록 보기
2/3
post-thumbnail

1. Docker Compose란?


  • 도커 컴포즈는 여러 컨테이너를 실행하고 정의하기위한 툴
  • 어플리케이션 서비스를 구성하기 위한 YAML파일을 사용함
  • 컴포즈는 모든 환경에서 작동한다
    • 제작
    • 스테이징
    • 개발
    • 검증
    • CI workflow
  • 모든 앱의 생명주기를 관리하기위해서 명령어를 가지고 있음
    • start, stop, rebuild 서비스
      • 서비스 = 컨테이너의 애플리케이션
    • 실행하고 있는 서비스의 상태를 봄
    • 실행하고 있는 서비스들의 로그 결과를 스트리밍함
      • 로그를 이용하여 컨테이너별 로그를 확인하는 명령어를 수행할 필요가 없음
    • 하나의 서비스의 일회성(one-off) 명령어를 실행함
      • 여러 컨테이너로 묶어서 실행된다 하더라도 경우에 따라서는 단일 컨테이너에 명령을 내려야 하는 경우도 있는데, 이를 가능하게 함
  • 도커 컴포즈의 주요한 특징(장점)
    • 단일 호스트에서 여러 격리된 환경을 가짐
    • 컨테이너 생성시 볼륨 데이터를 보존함
    • 변화한 컨테이너만 재생성할 수 있음
    • 환경 간에서 구성이 변화하는 것을 지원하고 변수를 지원함
  • 기본적으로 Docker for mac or window를 설치하면 기본적으로 docker compose가 설치됨

  • Linux의 경우는 docker-compose를 따로 설치해줘야 함

    sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)"
    sudo chmod +x /usr/local/bin/docker-compose
    
    # or
    sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)"
    sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-Linux-x86_64"
  • 설치 확인하는 방법
    docker-compose version



2. Yaml이란?


  • 구성 파일 작성에 자주 사용되는 데이터 직렬화 언어
    • 직렬화란?(or Serialization)
      • Data Science의 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정
      • 즉, 객체에 저장된 데이터를 스트림(데이터의 흐름)에 쓰기 위해 연속적인 데이터를 변환하는 것
        • 데이터 스트림이란 로드된 데이터를 의미함
        • 데이터 스트림은 외부(서버)에서 받아 온(로드된 또는 스트리밍 된) 데이터(이미지, 동영상 등의 멀티미디어)를 의미
      • 한 번의 읽기 또는 쓰기 동작으로 전송되는 정보
      • 진짜 데이터가 열을 지어 차례대로 입력되는 것을 의미
  • .yml 또는 .yaml 이라는 확장자를 가짐

  • 띄어쓰기를 가지고 데이터를 표현(탭 문자는 허용되지 않음)

  • YAML은 Yet Another Markup Language 혹은 YAML ain’t markup language(재귀 약어)

    • 후자의 경우 YAML은 문서가 아닌 데이터용임을 강조
    • 사람이 읽을 수 있고 이해하기도 쉬어 프로그래밍 언어 중에 인기가 높음
    • 다른 프로그래밍 언어와 함께 사용할 수 있음



3. 도커 컴포즈로 이미지 생성 및 실행하기


  • 실무에서는 대부분 YAML파일로 작업해서 하는 편임
  • 클라이언트를 기반으로 한땀한땀 명령어를 입력하고 다시 입력하고 이런 반복적인 작업을 표현하는 방식이 깔끔하지 못함 → Yaml파일 작성하여 docker-compose로 실행함

* 아래 예시는 인프런 강의 예제를 참고함

[ 예시 ]

1. Yaml파일 생성
    - Client로 한땀한땀 입력한 코드를 한번에 key value형태로 작성

    ```bash
    version: '2'
    services:
      db: # name 
        image: mariadb:10.9 # docker 명령어 제일 마지막에 썼던 이미지와 태그
        volumes: # -v 옵션으로 주었던 데이터 유실을 방지하기 위한 옵션 
          - ./mysql:/var/lib/mysql
        restart: always # 컨테이너가 만약 죽게되면 도커가 자동으로 띄어주는 역할(항상 재시작) 
        environment: # -e 로 지정했던 환경변수를 지정해줌 
          MYSQL_ROOT_PASSWORD: wordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
      wordpress:
        image: wordpress:latest
        volumes:
          - ./wp:/var/www/html
        ports:
          - "8000:80"
        restart: always
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
    ```

2. `docker-compose`로 실행
    - 자동으로 docker-compose.yml 파일을 읽어서 실행함

[ 참고 자료 ]

profile
Let's study

0개의 댓글