
DockerCompose란 여러개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성하여 하나의 묶음으로 관리할 수 있게 도와주는 툴이다.
여러개의 컨테이너를 관리하는데 용이하다.
여러개의 컨테이너로 이루어진 복잡한 애플리케이션을 한번에 관리할 수 있게 해준다.
여러 컨테이너들을 하나의 환경에서 실행하고 관리하는 데 도움이 된다.
복잡한 명령어로 실행시키던걸 간소화 시킬 수 있다.
이전에 MySQL 이미지를 컨테이너로 실행시킬 때는 아래와 같은 명령어로 실행시켰다.
$ docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /Users/lee/Desktop/Study/Develop/docker-mysql/mysql_data:/var/lib/mysql mysql
DockerCompose를 사용하면 위와 같이 컨테이너를 실행시킬때마다 이렇게 안하고
단순히 docker compose up 명령어로 실행시킬 수 있다.
docker compose up -d : compose.yml 파일을 기반으로 백그라운드에서 실행
docker compose ps : compose.yml로 정의된 컨테이너 중 실행 중인 컨테이너만 보여줌
docker compose ps -a : compose.yml로 정의된 컨테이너를 전부 보여줌
docker compose logs : compose.yml로 정의된 컨테이너들의 로그들을 보여줌
docker compose up --build : 이미지를 다시 빌드해서 컨테이너를 실행시켜야 할 때 사용
docker compose pull : compose.yml에서 정의된 image를 다운받거나 업데이트 할 경우 사용
그냥 docker 명령어로 실행을 시킨다면 아래처럼 실행을 시킬것이다.
$ docker run --name webserver -d -p 80:80 nginx
이거를 DockerCompose로 띄우기 위해서는 compose.yml 파일이 필요한데 작성법은 아래와 같다.
services:
my-web-server:
container_name: web-server
image: nginx
ports:
- 80:80
위의 yml 파일을 설명해보겠다.
DockerCompose에서는 하나의 컨테이너를 Service 라고 부른다.그 후 아래의 image나 port는 생각하는대로 어떤 베이스 이미지를 사용할거고 어떤 포트로 매핑할건지를 뜻한다.
이렇게 생성된 compose.yml 이 있는 디렉토리에서 docker compose up 을 하면 아래 그림과 같이 실행된다.


만약 백그라운드로 실행시키고 싶다면 docker compose up -d 라고 입력하면 된다.
DockerCompose로 실행된 이미지들을 내리고 싶다면 docker compose down을 하면 된다.
이번엔 MySQL을 실행시켜본다고 하자. 기존에 우리는 아래와 같이 실행시켰다.
$ docker run -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 -v /Users/lee/Desktop/Study/Develop/docker-mysql/mysql_data:/var/lib/mysql mysql
이 긴 명령어를 compose.yml로 바꾸면 다음과 같다.
services:
my-db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: 1234
volumes:
- ./mysql_data:/var/lib/mysql
ports:
- 3306:3306
여기서 바뀐 점은 DockerVolume을 설정할 때 절대 경로가 아닌 상대 경로로 작성하는 것만 잘 기억해두면 될 것 같다.
이번엔 Spring Boot 이다. 아래와 같이 yml 파일을 작성하면 된다.
services:
my-server:
build: .
ports:
- 8080:8080
여기서 build의 . 은 현재 경로의 Dockerfile로 생성된 이미지를 기반으로 컨테이너를 띄운다는 뜻이다.