도커 컴포즈는 컨테이너 여럿을 띄우는 도커 애플리케이션을 정의하고 실행하는 도구(Tool for defining and running multi-container Docker applications) 이다.
컨테이너 실행에 필요한 옵션을 docker-compose.yml이라는 파일에 적어둘 수 있고, 컨테이너 간 의존성도 관리할 수 있어서 좋다.
웹 서비스는 일반적으로 프론트엔드 서버, 벡엔드 서버, 데이터베이스 서버로 구성되기 때문에 각 서버를 docker container로 연결하여 동작시키고 docker compose를 사용하여 해당 컨테이너들을 관리하는 것이다.
docker compose는 docker-compose.yml 파일을 작성하여 실행할 수 있다.
docker-compose.yml 파일은 YAML(야멜) 형식으로 작성해야 한다.
- version
docker compose의 파일 포맷 버전을 지정한다.
기본적으로 버전 3을 사용하는 것이 일반적이다.- services
서비스의 이름- image
docker container의 이름을 정의한다.
Docker Hub에 있는 이미지를 사용하여 docker container를 작성할 경우 image를 설정할 수 있다.- restart
docker container가 다운되었을 경우, 항상 재시작하라는 설정이다.- volumnes
docker run 명령의 -v 옵션과 동일한 역할을 한다.
여러 개의 volume을 지정할 수 있으며 리스트처럼 작성하면 된다.- environment
dockerfile의 ENV 옵션과 동일한 역할을 한다.
참고로, env_file 옵션으로 환경변수 값이 들어있는 파일을 읽을 수도 있다. (패스워드 등의 보안을 위한 방법)- ports
docker run 명령의 -p 옵션과 동일한 역할을 한다.- build
docker image를 Dockerfile 기반으로 작성 시 사용한다.- build
docker image를 Dockerfile 기반으로 작성 시 사용한다.- depends_on
컨테이너가 실행되는 순서를 제어
app 안에 " depend_on : - db " 설정이 있는 경우, 우선적으로 db 컨테이너가 먼저 실행되고 그 후에 app컨테이너가 실행되어 app 컨테이너가 db 컨테이너로 접속을 시도하도록 컨테이너 실행 순서를 제어하는 것이다.
# 컨테이너 실행
docker-compose up -d // 도커 백그라운드 실행
docker-compose up --force-recreate // 도커 컨테이너 새로 만들기
docker-compose up --build // 도커 이미지 빌드 후 compose up
# 컨테이너 내리기
docker-compose down // 컨테이너 stop & 삭제
docker-compose stop
저는 앞서 db, front, back 모두 Dockefile을 만들었고 Docker-compose로 한번에 실행하면 다음처럼 하나의 컨테이너 안에 3개의 컨테이너가 구동되는 것을 볼 수 있습니다.