ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 도커 컴포즈(Docker Compose)
    BackEnd/docker 2022. 3. 24. 22:04
    반응형

      도커 컴포즈(Docker Compose)는 컨테이너를 이용한 서비스의 개발과 CI를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공합니다. 즉, 매번 run 명령어에 옵션을 설정해 CLI(Command Line Interface)로 컨테이너를 생성하는 것은 어렵기에 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하는 것입니다.

     

      도커 컴포즈는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작합니다. 도커 컴포즈의 설정 파일은 run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의할 수 있습니다. 또한 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조절할 수 있으며 컨테이너의 서비스 디스커버리도 자동으로 이뤄집니다.

     

    도커 컴포즈 설치

      아래 명령어나 도커 컴포즈 깃허브 저장소에서 직접 내려받아 설치할 수 있습니다.

    # curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s `-uname -m` > /usr/local/bin/docker-compose
    # chmod +x /usr/local/bin/docker-compose

      윈도우와 Mac OS X에서는 도커 툴박스나 Docker for Windows, Docker for Mac을 설치하면 도커 엔진과 함께 도커 컴포즈도 설치됩니다. 설치가 정상적으로 완료됐는지 확인하기 위해 도커 컴포즈의 버전을 확인합니다.

    $ docker-compose -v
    docker-compose version 1.29.2, build 5becea4c

     

    도커 컴포즈 사용

      도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너를 생성합니다.

     

    docker-compose.yml 작성

      어떠한 설정도 하지 않으면 도커 컴포즈는 현재 디렉터리의 docker-compose.yml 파일을 읽어 로컬의 도커 엔진에게 컨테이너 생성을 요청합니다. 도커 컴포즈는 컨테이너를 프로젝트 및 서비스 단위로 구분하므로 컨테이너의 이름은 일반적으로 다음과 같은 형식으로 정해집니다. 도커 컴포즈는 기본적으로 docker-compose.yml 파일이 위치한 디렉터리의 이름을 프로젝트 이름으로 사용합니다.

    [프로젝트 이름]_[서비스 이름]_[서비스 내에서 컨테이너의 번호]

     

      YAML 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의의 4가지 항목으로 구성됩니다. 이 가운데 많이 사용하는 것은 서비스 정의이며, 볼륨 정의와 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로 사용됩니다. YAML 파일에서 들여쓰기할 때 탭(Tab)은 도커 컴포즈가 인식하지 못하므로 2개의 공백(Space)을 사용해 하위 항목을 구분해야 합니다.

    version: '3.0'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        volumes:
          - .:/code
        links:
          - mysql:db
          - redis
        environment:
          - MYSQL_ROOT_PASSWORD=mypassword
          - MYSQL_DATABASE_NAME=mydb
          또는
        environment:
          MYSQL_ROOT_PASSWORD:mypassword
          MYSQL_DATABASE_NAME:mydb
        depends_on:
          - mysql
      mysql:
        image: mysql
        command: mysqld
      redis:
        image: redis

     

    버전 정의(version)

      YAML 파일 포맷의 버전을 나타냅니다. 버전은 1, 2, 2.1, 3.0 등이 있습니다. 도커 컴포즈 버전은 도커 엔진 버전에 의존성이 있으므로 가능하다면 최신 버전을 사용하는 것이 좋습니다. 도커 엔진과 도커 컴포즈의 호환성에 대한 목록은 도커 컴포즈의 릴리스 페이지를 참고합니다.

     

    서비스 정의(services)

      생성될 컨테이너들을 묶어놓은 단위입니다. 이 항목에 쓰인 각 서비스는 컨테이너로 구현되며, 하나의 프로젝트로서 도커 컴포즈에 의해 관리됩니다. 서비스의 이름은 services의 하위 항목으로 정의하고, 컨테이너의 옵션은 서비스 이름의 하위 항목에 정의합니다.

     

    컨테이너 옵션

    • image: 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정합니다.
    • links: docker run 명령어의 --link와 같으며, 다른 서비스에 서비스명만으로 접근할 수 있도록 설정합니다. [SERVICE:ALIAS]의 형식을 사용하면 서비스에 별칭으로도 접근할 수 있습니다.
    • environment: docker run 명령어의 --env, -e 옵션과 동일합니다. 서비스의 컨테이너 내부에서 사용할 환경변수를 지정하며, 딕셔너리(Dictionary)나 배열 형태로 사용할 수 있습니다.
    • command: 컨테이너가 실행될 때 수행할 명령어를 설정하며, docker run 명령어의 마지막에 붙는 커맨드와 같습니다.
    • depends_on: 특정 컨테이너에 대한 의존 관계를 나타내며, 이 항목에 명시된 컨테이너가 먼저 생성되고 실행됩니다. 위 예제에서는 web 컨테이너보다 mysql 컨테이너가 먼저 생성됩니다. links도 depends_on과 같이 컨테이너의 생성 순서와 실행 순서를 정의하지만 depends_on은 서비스 이름으로만 접근할 수 있다는 점이 다릅니다.
    • ports: docker run 명령어의 -p와 같으며 서비스의 컨테이너를 개방할 포트를 설정합니다. 
    • build: build 항목에 정의된 도커파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정합니다. build 항목에서는 도커파일에 사용될 컨텍스트나 도커파일의 이름, 도커파일에서 사용될 인자 값을 설정할 수 있습니다.
    services:
      web:
        build: ./composetest
        image: project/composetest:web
        context: ./composetest
        dockerfile: myDockerfile
        args:
          HOST_NAME: web
          HOST_CONFIG: self_config

    Note. build 항목을 YAML 파일에 정의해 프로젝트를 생성하고 난 뒤 도커파일을 변경하고 다시 프로젝트를 생성해도 이미지를 새로 빌드하지 않습니다. docker-compose up -d에 --build 옵션을 추가하거나 docker-compose build 명령어를 사용해 도커파일이 변경돼도 컨테이너를 생성할 때마다 빌드하도록 설정할 수 있습니다.

    # docker-compose up -d --build
    # docker-compose build [yml 파일에서 빌드할 서비스 이름]

     

    네트워크 정의(networks)

      도커 컴포즈는 생성된 컨테이너를 위해 기본적으로 브리지 타입의 네트워크를 생성합니다. 그러나 YAML 파일에서 driver 항목을 정의해 서비스의 컨테이너가 브리지 네트워크가 아닌 다른 네트워크를 사용하도록 설정할 수 있습니다. 특정 드라이버에 필요한 옵션은 하위 항목인 driver_opts로 전달할 수 있습니다.

    version: '3.0'
    services:
      myservice:
        image: nginx
        networks:
          - mynetwork
    networks:
      mynetwork:
        driver: ...
        deriver_opts:
          ...

     

    도커 컴포즈 명령어

    docker-compose up -d 명령어

      컨테이너를 생성합니다.

    # docker-compose up -d

     

      도커 컴포즈는 기본적으로 현재 디렉터리의 이름으로 된 프로젝트를 제어합니다. docker-compose -f 옵션을 사용하면 yml 파일의 위치와 이름을 지정할 수 있고, docker-compose의 -p 옵션을 사용하면 하나의 docker-compose.yml 파일로 서로 이름이 다른 여러 개의 프로젝트를 생성하고 제어할 수 있습니다. 즉, -f 옵션을 통해 YAML 파일을 먼저 지정해 파일을 읽은 뒤 -p 옵션으로 프로젝트의 이름을 명시하는 것입니다.

    # docker-compose \
    -f /home/work/my_compose_file.yml \
    -p myproject \
    up -d

     

    docker-compose scale 명령어

      서비스의 컨테이너 수를 늘리거나 줄여서 같은 컨테이너의 수를 일정하게 유지할 수 있습니다.

    # docker-compose scale mysql=2

     

    docker-compose down

      프로젝트를 삭제하면 서비스의 컨테이너 또한 전부 정지된 뒤 삭제됩니다.

    # docker-compose down

     

    Note. docker-compose up 명령어의 끝에 서비스의 이름을 입력해 docker-compose.yml 파일에 명시된 특정 서비스의 컨테이너만 생성할 수 있습니다.

    # docker-compose up -d mysql

     


      도커를 마치며... 귀여운 인카토스의 도커 컨테이너 각티슈 휴지 케이스 제품 구경하세요. 사무실에서 사용하면 매우 개발자스러운 느낌이 들 것 같네요. ^^

    도커 컨테이너 각티슈 휴지 케이스 구매 링크

     

    도커 컨테이너 각티슈 휴지 케이스 티슈커버 사각 아크릴 각티슈 커버 - 푸르가즘

    교환 및 반품 주소  -   교환 및 반품이 가능한 경우  - 계약내용에 관한 서면을 받은 날부터 7일. 단, 그 서면을 받은 때보다 재화등의 공급이 늦게 이루어진 경우에는 재화등을 공급받거나

    incatos.shop

     

      도커 컨테이너 각티슈 휴지 케이스 외부 모습은 다음과 같습니다. 휴지 사이즈는 가로 205mm x 세로 180mm 입니다.

    반응형

    'BackEnd > docker' 카테고리의 다른 글

    도커 데몬(Docker Daemon)  (0) 2022.03.19
    Dockerfile 명령어  (0) 2022.03.18
    Dockerfile  (0) 2022.03.16
    이미지 배포(Image Deploy)  (0) 2022.03.15
    도커 이미지(Docker Image)  (0) 2022.03.15

    댓글

Designed by Tistory.