- Docker Compose는 여러 컨테이너를 모아서 관리하기 위한 툴
- 서비스 규모가 커지면, 복수의 컨테이너를 유지하고 관리해야 하며, 이를 위해 쿠버네티스 등의 관리 툴이 사용됨
- docker compose에 대한 탄탄한 이해 => 쿠버네티스도 원할하게 익히고 활용 가능
- yaml 문법으로 작성
docker-compose.yml
version: "3"
# 컨테이너들 설정
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=alpha
- MYSQL_DATABASE=alphadb
# 시간으로 해석하지 않게 쌍따옴표 붙여야
ports:
- "3306:3306"restart- 서버는 24시간 동작해야 하므로, 언제든 다운될 수 있다.
- 위 옵션으로 웬만한 케이스에서는 계속 동작할 수 있다.
volume- docker run 옵션 중, -v 옵션과 동일한 역할
- 여러 volume을 지정할 수 있기 때문에, 리스트처럼 작성
v옵션과 달리 상대경로로 작성 가능
environment- Dockerfile의 ENV 옵션과 동일한 역할
- 보통
d옵션을 사용하며,d옵션은 백그라운드 실행을 의미함
docker-compose up -d- 이미지 재빌드가 필요하다면,
build옵션을 추가해야함- 그렇지 않으면, 이미 작성된 이미지를 사용하게 됨
docker-compose up -build -d- Docker Compose 중지 명령 => 모든 컨테이너 중지됨
docker-compose stop- Docker Compose 에서 사용하는 컨테이너 삭제 명령
docker-compose downversion: "3"
# 주석 가능?
services:
app:
build:
context: ./01_FLASK_DOCKER
dockerfile: Dockerfile
links:
- "db:mysqldb"
ports:
- "80:8080"
container_name: appcontainer
depends_on:
- db
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=alpha
- MYSQL_DATABASE=alphadb
ports:
- "3306:3306"
container_name: dbcontainerbuild- 이미지를 Dockerfile 기반으로 작성시 사용
context- Dockerfile이 있는 디렉토리
dockerfile- 도커파일 파일명
- 이미지를 Dockerfile 기반으로 작성시 사용
links- 컨테이너 내부에서, 다른 컨테이너를 접속하고 싶을 때 사용
- 다음 YAML 코드에서, db 컨테이너를 app 컨테이너에서 사용하고 싶을 때
.dockerignore.gitignore비슷
depends_on- 여러 컨테이너를 Docker Compose로 실행할 경우, 각 컨테이너가 실행을 시작하는 시점이 다를 수 있다.
depends_on은 컨테이너의 실행 순서를 제어할 수 있다.- 그러나, 컨테이너가 ready 상태가 될 때까지를 명확히 제어하는 거슨 아니므로, 기대한대로 동작하지 않을 수는 있음
- docker-compose exec [컨테이너이름]
- 실행중인 컨테이너에 명령어를 실행할 수 있음.