: 하나의 호스트에서 여러개의 컨테이너를 사용하는 경우 여러개의 컨테이너를 하나의 컨테이너 묶음으로 관리하게 해주는 도구
: docker-compose를 정의하는 명령어 (dockerfile과 비슷하다 생각해도 됨)
version: "3" # docker-compose 버전
services: # 컨테이너의 집합체 정의
app: # 서비스 내부 컨테이너 이름
build: . # 해당 컨테이너의 DockerFile의 위치
ports:
- "8000:8000"
restart: unless-stopped
command:
- sh
- -c
- |
cd ./src
python manage.py migrate
celery -A kepco worker -l info &
python manage.py runserver --insecure 0.0.0.0:8000
volumes:
- .:/app/src
environment: # 환경변수 설정
- REDIS_HOST=redis
env_file: # .env를 통한 환경변수 설정
- ./src/.env.prod
networks:
- test_net
depends_on: # 의존성 설정(컨테이너에 대한 의존성)
- redis
redis:
image: redis:7.2.4
container_name: redis_boot
command: redis-server --port 6379
hostname: redis
networks:
- test_net
ports:
- 6379:6379
networks: # 네트워크 설정
test_net:
driver: bridge
docker-compose는 기본적으로 하나의 디폴트 네트워크에 모든 컨테이너를 연결한다. 따라서 하나의 docker-compose에 존재하는 컨테이너들은 별도로 네트워크를 연결하지 않아도 서비스 내부의 컨테이너 이름을 통해 통신 가능하다.
ex)redis://redis:6379
실행
docker-compose.yml이 존재하는 위치에서 실행해야 한다.
docker-compose up -d
-d
: 백그라운드 실행—build
: 강제로 빌드 진행—force-recreate
: yml의 변경이 없어도 컨테이너 재생성가동된 서비스 조회
docker-compose ps
로그 확인
docker-compose logs
중지
docker-compose down