docker compose는 여러개의 도커 이미지를 실행하고 관리할 때 사용한다.
즉, 연결된 다수의 컨테이너를 통합적으로 관리하도록 할 수 있다.
"docker-compose.ymal" 파일에 설정을 작성한다.
컨테이너의 실행 옵션을 미리 정의해둔 문서이다.
docker compose는 docker-compose.yaml에 정의된 대로 실행을 한다.
#버전 정의
#버전에 따라서 지원하는 형식이 다름
version: '3.0'
# service 정의
# docker-compose로 생성 할 container의 옵션을 정의
# service안의 container들은 하나의 project로서 docker-compose로 관리
services:
#생성 할 container 이름을 지정
#정의된 각 container들을 service하는 것이라고 생각하면 됨
container-이름:
#container 생성시 사용 할 이미지 지정
image: node-server:v1
#build 옵션
# docker-compose build 옵션에서 사용
# dockerfile에 명시된 FROM의 image를 사용하여 명시된 image 이름과 tag로 새로운 image를 생성
build:
#dockerfile의 위치를 지정
context: .
dockerfile: ./docker/Dockerfile
# image: dockerfile로 이미지를 바로 만들지 않고 만들어진 이미지를 사용할 수도 있음
#container port mapping 정보
#"local port:docker port"
ports:
- "80:80"
#EXPOSE
# 도커 컨테이너가 실행되었을 때 요청을 기다리고 있는(Listen) 포트를 지정, 여러개의 포트 지정 가능
expose:
- "80"
#외부 저장소 설정
#docker가 종료되어도 저장소는 남아 있기 때문에 재시작해도 정보를 유지할 수 있음
volumes:
- "./:/apps"
#환경 변수 리스트를 정의
environment:
UPDATE_URL: "https://www.doitnow-man.com"
보통의 yaml 파일은 환경 변수 읽어오기가 안되지만 docker-compose.yaml은 환경 변수를 읽어오는 것이 가능하기 때문에 $환경변수이름으로 값을 대신 작성할 수 있다.
$> docker-compose up
$> docker-compose down
docker compose를 종료할 때에 volume이 같이 삭제되지 않으나, 원한다면 docker compose 종료 시에 volume을 같이 삭제하도록 하는 옵션도 존재한다.