docker-compose.yaml or .yml
파일을 생성도커 컴포즈를 사용하면 도커가 이 컴포즈 파일에 특정된 모든 서비스에 대해 새 환경을 자동으로 생성하고 모든 서비스를 즉시 그 네트워크에 추가한다.
하나의 동일한 컴포즈 파일에 정의된 모든 서비스는 이미 도커에 의해 생성된 동일한 네트워크의 일부가 된다.
docker-compose up
docker-compose up -d
docker-compose down
docker-compose down -v
-> 볼륨도 삭제-컨테이너의 이름?을 입력
depends_on:
- ...
stdin_open: true
tty: true
docker-compose --build up
-> 이미지 리빌드를 강제docker-compose build
-> 만약 빌드만 하려는 경우docker exec 컨테이너이름 명령어
CMD는 명령어를 입력하면 덮어쓰는 형태이지만 ENTRYPOINT는 뒤에 붙는다.
CMD ["python"]
-> 명령어를 -V 라고 하면 CMD는 python이 -V 로 덮어써짐
반면에
ENTRYPOINT ["python"]
-> 명령어가 뒤에 붙는다. python -V
명령이 종료되면 항상 컨테이너가 종료된다
docker-compose run 서비스이름 명령어
--rm
-> 종료되면 컨테이너 삭제그냥 실행하면 전체가 빌드 되지만 각각의 컨테이너 이름을 넣으면 해당 컨테이너만 가능
docker-compose up 이름1 이름2...
docker-compose up -d --build 컨테이너이름
-> 수정하게 되면 docker build .
과 같이 사용자가 직접 재빌드를 하지 않아도 컴포즈가 알아서 인식하고 빌드를 진행한다.
# 도커 컴포즈 사양의 버전을 지정
version: '3.3'
# 서비스의 자식 -> 컨테이너
services:
# 컨테이너 입력
mongodb:
# 이미지 이름, 로컬이나 도커 허브에서 조회된다.
# 서비스를 중단하면 서비스가 제거(rm 기본)
# detached 모드가 기본
image: 'mongo'
# 볼륨
volumes:
- data:/data/db
#environment:
# 방법이 두개
# 환경 변수 파일 지정도 가능
#
# MONGO_INITDB_ROOT_USERNAME: max
# - MONGO_INITDB_ROOT_USERNAME=max
# - MONGO_INITDB_ROOT_PASSWORD=secret
env_file:
- ./env/mongo.env
# 도커 컴포즈를 사용하면 네트워크 따로 추가 안해도 된다.
# networks:
# - goals-net
backend:
# 빌드 해야하는 Dockerfile의 위치
build: ./backend
# build:
# context: ./backend
# dockerfile: Dockerfile
# 도커 파일이 arg를 사용하는 경우
# args:
# some-arg: 1
ports:
- '80:80'
volumes:
- logs:/app/logs
# 바인드 마운트를 사용할 때 절대 경로를 사용하지 않아도 된다.
- ./backend:/app
- /app/node_modules
env_file:
- ./env/backend.env
# 하나의 컨테이너가 다른 컨테이너에 의존할 수 있다.
# 먼저 실행되어야 하는 컨테이너를 설정
depends_on:
- mongodb
frontend:
build: ./frontend
ports:
- '3000:3000'
volumes:
- ./frontend/src:/app/src
# 인터렉티브 모드
stdin_open: true
tty: true
depends_on:
- backend
# services에서 사용 중인 명명된 볼륨이 나열되어야 한다.
# 다른 서비스에서 동일한 볼륨 이름을 사용하면 그 볼륨이 공유된다.
# 따라서 다른 컨테이너가 호스팅 머신 상의 동일한 볼륨 동일한 폴더를 사용할 수도 있다.
# 익명 볼륨과 바인드 마운트는 지정할 필요가 없다.
volumes:
data:
logs: