DevOps

[Docker] Docker-Compose

UnoCode 2020. 8. 27. 11:59

혹시 docker build를 통해 이미지를 만드신 경험이 있으신가요 .. ㅎㅎ

 

이번 시간에는 Docker Compose를 이용해서 여러개의 컨테이너로 구성된 app을 하나의 파일에 정의해 놓고 한 번에 올리거나 내릴 수 있습니다.

 

이러한 편리함 때문에 자동화에 많이 쓰인다. 이러한 방법을 docker-compose.yml을 작성 하는 방법에 대해 알아 보겠습니다.

 

docker-compose.yml 파일 구조

 

version: "3.8"
services:
  app:
    # 앱 설정
  db:
    # DB 설정
networks:
  # 네트워크 설정
volumes:
  # 볼륨 설정

가장 대표적인 몇가지 구문만 적어보도록 하겠습니다.

Build 

build 항목은 해당 서비스의 이미지를 빌드하기 위한 Dockerfile이 위치하는 경로를 지정하기 위해 사용됩니다. 예를 들어, docker-compose.yml 파일과 동일한 디렉토리에 위치한 Dockerfile을 사용해서 app 서비스의 이미지를 빌드하려면 다음과 같이 설정합니다.

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        env: "development"

 

Dockerfile이 아닌 다른 이름의 파일로 빌드를 하고 싶거나, 빌드 인자를 넘겨야 하는 경우에는 다음과 같이 하위 항목을 사용해서 좀 더 구체적으로 설정을 해줄 수 있습니다.

 

Image

이미지 저장소(repository)로 부터 이미지를 내려받습니다.

services:
  app:
    image: gitlab/gitlab-ce

Ports

항목은 외부로 노출시킬 포트의 맵핑을 명시합니다. 바인드(bind)가 필요한 호스트 외부 포트와 컨테이너 내부 포트를 지정해주면 됩니다.

services:
  app:
    ports:
      - "8000:8000"
  db:
    ports:
      - "30018:30018"

volumes

volumes 항목은 마운트가 필요한 호스트의 경로와 컨테이너의 경로를 적어주면 됩니다.

  registry:
    image: registry:latest
    container_name: registry
    restart: always
    volumes: 
      - ./data/registry:/var/lib/registry/docker/registry/v2
    ports:
     - 5000:5000

command

command 항목은 해당 서비스가 올라갈 때 Dokcerfile의 CMD 명령문을 무시하고 실행할 명령어를 설정 합니다(무시무시)

services:
  app:
    command: python manage.py runserver 0:8000

environment

environment 항목은 환경 변수를 설정하기 위해서 사용됩니다.

environment:
  - POSTGRES_USER=postgres
  - POSTGRES_PASSWORD=postgres

 

Dokcer 공식 문서를 보면 추가로 설정이 필요한 부분을 찾아서 사용하시면 됩니다.

docs.docker.com/compose/compose-file/

 

Compose file version 3 reference

Reference and guidelines These topics describe version 3 of the Compose file format. This is the newest version. Compose and Docker compatibility matrix There are several versions of the Compose...

docs.docker.com