Intro
공식 문서 < 여기
여러 컨테이너를 결합하여 하나의 애플리케이션을 빌드하려면 매우 긴 명령어를 수행해야 한다.
여기서 Docker Compose라는 도구를 통해 다중 컨테이너 설정을 더 쉽게 관리할 수 있다.
설정 프로세스를 자동화 해주고, 단 하나의 명령과 하나의 구성 파일로 모든 컨테이너를 시작하고 제어할 수 있다.
Docker Compose란?
- docker build와 docker run 명령을 대체할 수 있는 도구
- 다수의 docker build, docker run을 단 하나의 구성 파일로 가짐
- 오케스트레이션 명령 셋(set)
- 하나의 명령을 사용하여 다중 컨테이너 애플리케이션을 시작 및 중단 가능
- 다른 사람과 공유 가능
Docker Compose는 Dockerfile을 대체하지 않는다. 오히려 Dockerfile과 함께 작동한다.
또한 이미지나 컨테이너를 대체하지 않는다.
💢 다수의 호스트에서 다중 컨테이너를 관리하는 데는 적합하지 않다.
✅ 하나의 동일한 호스트에서 다중 컨테이너를 관리하는 데 적합하다.
Docker Compose 시작
도커 컴포즈를 작성하는 것 부터 시작해보자.
도커 컴포즈 파일에는 멀티컨테이너 애플리케이션을 구성하는 핵심 구성 요소를 정의하면 된다.
- Service (다중 컨테이너 애플리케이션을 구성하는 컨테이너)
- 게시해야 하는 포트
- 컨테이너에 필요한 환경 변수
- 컨테이너에 할당해야 하는 볼륨
- 네트워크
기본적으로 터미널에서 도커 명령으로 할 수 있는 모든 것을 도커 컴포즈에서 할 수 있다.
터미널에서 도커 명령을 실행하는 것을 대체하는 것이 핵심 아이디어이기 때문이다.
Docker Compose 작성
docker-compose.yml
➡ Docker Hub에 존재하는 공식 mongo 이미지
➡ -d, --rm: 기본 값으로 적용됨
- data:/data/db # 볼륨 이름:/컨테이너 내부 경로
➡ -v 플래그와 함께 사용한 것과 동일하게 작동한다.
➡ 환경 변수 지정
➡ 환경 변수를 파일에서 읽어오도록 한다.
- goals-net
➡ 컨테이너가 속해야 하는 모든 네트워크 특정
➡ 그러나 여기선 사용하지 않아도 됨
➡ 도커가 이 컴포즈 파일에 특정된 모든 서비스에 대해 새 환경을 자동으로 생성하고, 모든 서비스를 즉시 네트워크에 추가하기 때문
➡ services와 동등한 들여쓰기 수준의 볼륨
➡ services에서 사용 중인 명명된 볼륨
➡ 도커가 services를 위해 생성해야 하는 명명된 볼륨을 인식하기 위한 구문
➡ 다른 서비스에서 동일한 볼륨 이름을 사용해서 공유할 수 있다.
➡ 절대 경로가 아닌 상대 경로로 바인드 마운트 지정 가능
((소스코드 잘못됨.. 오늘 안에 수정 예정 !!))
Docker Compose Up & Down
🛠 docker-compose up
- 위 명령어를 실행하면 도커 컴포즈로 서비스를 시작할 수 있다.
- 필요한 이미지를 가져와서 빌드하는 과정을 거친다.
- 생성한 네트워크명: "프로젝트명_default"
- 생성한 볼륨명: "프로젝트명_볼륨이름"
- 기본적으로 attached 모드로 시작한다.
- ➡ docer-compose up -d: detached 모드에서 시작
🛠 docker-compose down
➡ 서비스 중지 및 컨테이너 일괄 제거
➡ 볼륨도 삭제하려면 -v 플래그 추가
다중 컨테이너 작업
Backend
- 완성된 이미지를 지정하는 대신, 도커 컴포즈에 이미지를 빌드하는 데 필요한 정보를 제공할 수 있다.
- build 옵션: 빌드해야 하는 Dockerfile 경로 지정
- 중첩 키가 있는 형태
- context: Dockerfile을 보유하는 폴더의 경로 특정, Dockerfile이 빌드되는 경로
➡ 복사할 폴더를 포함하는 폴더로 설정해야 한다.
➡ 만약 Dockerfile이 다른 중첩 폴더에 있고 중첩 폴더 외부의 폴더에 액세스해야 되는 경우 더 높은 수준의 폴더로 설정해야 한다. - dockerfile: 파일 이름 지정
➡ 기본값: dockerfile
- ports: 게시된 포트 지정
- ex. 노드 API가 사용하는 내부 포트:80, 호스트 머신의 포트: 80
컨테이너 실행
- docker compose up -d
결과 (docker ps)

mongodb와 backend 컨테이너 두 개가 생성된 걸 확인할 수 있다.
frontend
backend의 경우와 맥락은 동일하다.

frontend 컨테이너도 생성되어 결과적으로 세 개의 컨테이너가 실행되었다.
Docker-Compose 명령어의 변형
- --build
➡ up 명령에 추가하면 강제로 이미지 리빌드를 진행한다. - build
➡ docker-compose 파일에서 찾을 수 있는 커스텀 이미지를 빌드한다.
➡ 컨테이너를 시작하지 않고 빌드만 한다. - container_name (docker-compose.yml에 추가)
➡ 컨테이너 이름 지정
✅ 정리
- docker-compose를 통해 서로 상호 작용하는 여러 컨테이너로 구성된 복잡한 프로젝트를 쉽게 구축할 수 있다.
- 단일 컨테이너 설정에도 자주 사용된다.
- 구성 파일에서 구성을 지정할 수 있어 유지 및 관리가 용이하다.
- dockerfile을 대체하지는 않는다.
'log.info' 카테고리의 다른 글
[Kafka] 이론 (0) | 2024.06.30 |
---|---|
[Spring Security] JWT Refresh Token (리프레시 토큰) (0) | 2024.06.20 |
[Docker] 볼륨 vs 바인드 마운트 (1) | 2024.06.17 |
[Redis] 데이터 추가 및 관리 명령어 (0) | 2024.06.17 |
[Redis] Redis에 대해 알아보자 ! (0) | 2024.06.16 |