[Docker] Docker-Compose
혹시 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