Docker Compose란?
Docker Compose는 여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있게 도와주는 툴이다.
왜 Docker Compose를 사용하는 걸까? 여기에는 아래와 같은 장점들이 있다.
- 여러 개의 컨테이너를 관리하는 데 용이
- 여러 개의 컨테이너로 이루어진 복잡한 애플리케이션을 한 번에 관리 가능
- 보통 프로젝트에서 단순히 Spring Boot 서버만 띄우는 게 아니라 MySQL도 띄우고, Redis도 띄우고 그럴 수 있다!
- 복잡한 명령어로 실행시키던 걸 간소화시킬 수 있음
- 전에는 긴 명령어로 실행했지만 Docker Compose를 사용하면
docker compose up
만 있으면 된다!
- 전에는 긴 명령어로 실행했지만 Docker Compose를 사용하면
Docker Compose 전체 흐름(Nginx)
전에 Docker CLI에서는 아래와 같이 컨테이너를 실행시켰다
$ docker run --name webserver -d -p 80:80 nginx
이제 Docker Compose로 컨테이너를 실행해 보자!
1. compose.yml 파일 작성하기
services:
my-web-server:
container_name: webserver
image: nginx
ports:
- 80:80
services: my-web-server
: Docker Compose에서는 하나의 컨테이너를 서비스라고 한다container_name: webserver
:--name
역할image: nginx
: 이미지 이름ports
: 포트 매핑,-p
역할
2. compose 파일 실행시키기
$ docker compose up -d
3. compose 실행 현황 보기
$ docker compose ps
$ docker ps
4. localhost:80 들어가보기
5. compose로 실행된 컨테이너 삭제
$ docker compose down
자주 쓰는 Docker Compose CLI 명령어
compose.yml에서 정의한 컨테이너 실행
$ docker compose up # 포그라운드에서 실행
$ docker compose up -d # 백그라운드에서 실행
Docker Compose로 실행시킨 컨테이너 확인하기
# compose.yml에 정의된 컨테이너 중 실행 중인 컨테이너만 조회
$ docker compose ps
# compose.yml에 정의된 모든 컨테이너 조회
$ docker compose ps -a
Docker Compose 로그 확인하기
# compose.yml에 정의된 모든 컨테이너의 로그를 모아서 출력
$ docker compose logs
컨테이너를 실행하기 전에 이미지 재빌드하기
$ docker compose up --build # 포그라운드에서 실행
$ docker compose up --build -d # 백그라운드에서 실행
compose.yml
에서 정의한 이미지 파일에서 코드가 변경되었을 경우 사용--build
를 사용하지 않으면 이미지가 없을 때만 빌드하는 것
이미지 다운받기 / 업데이트하기
$ docker compose pull
- 로컬 환경에 이미지가 없다면 다운
- 로컬 환경에 이미지가 있는데, Dockerhub의 이미지와 다른 이미지일 경우 업데이트
Docker Compose에서 이용한 컨테이너 종료하기
$ docker compose down
Docker CLI ↔ Docker Compose
Docker CLI → compose.yml로 변환
Composerize 사이트를 활용하면 Docker CLI 명령어를 compose.yml 형식으로 쉽게 변환할 수 있다.
compose.yml → Docker CLI로 변환
Decomposerize 사이트를 활용하면 compose.yml을 Docker CLI 명령어로 변환할 수 있다.
Docker CLI vs Dockerfile vs compose.yml
지금까지는 전부 한 개의 컨테이너를 Docker Compose를 사용해 실행해 보았다. 그런데 결국 docker run
으로 바로 컨테이너를 실행시키든, Dockerfile
을 정의하고 하든, compose.yml
을 작성하고 실행시키든 결과는 동일한 거 아닐까?
세 가지를 확실히 나누어 정리해보자!
Docker CLI
docker run
과 같은 명령어를 통해 이미지를 즉시 실행할 수 있다.- 주로 간단한 테스트나 빠른 실행에 유용하다.
- 예 :
docker run -d -p 80:80 nginx
- 단점 : 명령어가 길어지고 복잡해질 수 있고, 설정을 반복해서 입력해야 한다.
Dockerfile
- 이미지를 정의하는 파일이다.
FROM
,COPY
,RUN
등의 명령어를 통해 이미지를 커스터마이징할 수 있다.- 예를 들어, nginx 이미지에 커스텀 설정파일을 넣고 싶을 때 유용하다.
docker build
명령어로 이미지를 빌드한 후, 그 이미지를docker run
으로 실행해야 한다.- 장점 : 앱의 실행 환경을 코드로 저장할 수 있어 재현성과 이식성이 뛰어나다.
- 단점 : 실행 자체는 별도로 해야 하므로 빌드와 실행이 분리되어 있다.
Docker Compose
- 여러 개의 컨테이너(서비스)를 하나로 묶어 한 번에 실행, 관리할 수 있게 도와주는 도구다.
- 예: 웹 서버, DB, 캐시 서버 등을 동시에 실행하고 연결할 수 있다.
- 설정은
compose.yml
파일에 정의하고,docker compose up
으로 실행한다. - 단일 컨테이너도 실행 가능하지만, 여러 개의 컨테이너가 있을 때 특히 강력하다.
- 실행 환경을 하나의 파일로 정의하므로 공유와 유지보수가 편하다.
따라서 같은 개념이라 하기는 어렵다. 사실 Docker Compose가 Dockerfile 보다 좋은, 확장된 기능인 줄 알았는데 이미지 커스텀 + 다중 서비스를 위해서는 둘 다 사용한다고 한다. 대체 개념이 아니다!
Dockerfile
은 커스텀 단일 이미지를 빌드하기 위해, compose.yml
은 앱이 실행되는 동안 다중 컨테이너를 관리하기 위해 사용한다고 생각하면 될 것 같다. 다음 포스팅에서 2개 이상의 컨테이너를 관리하는 방법에 대해 알아볼 것이다.
'INFRA > Docker' 카테고리의 다른 글
[Docker] Docker Compose - 2 (2) | 2025.06.17 |
---|---|
[Docker] Dockerfile (8) | 2025.06.09 |
[Docker] Docker Volume(도커 볼륨) (7) | 2025.06.04 |
[Docker] 자주 쓰는 Docker CLI (2) | 2025.06.04 |
[Docker] Docker 기본 개념 (2) | 2025.06.01 |