Docker Compose
업데이트:
개요
문제 상황
mongo 컨테이너와 app 컨테이너 간 통신이 안됐다.
app에서는 mongo://localhost:27017/...
로 mongo를 호출하는데,
컨테이너는 localhost를 컨테이너 본인으로 지정하기 때문이었다.
host.docker.internal 으로 컨테이너 밖 호스트를 지정할 수 있다고 한다지만, 좋은 방법이 아닌 것 같았다.
따라서 docker network를 생성하고, 실행 시 mongo의 endpoint를 env로 지정하려고 했다.
이 때, env를 계속해서 명령어로 지정하려니 너무 불편할 것 같아, docker-compose를 공부하려고 한다.
해결
Docker Compose란?
컨테이너 여럿을 띄우는 도커 애플리케이션을 정의하고 실행하는 도구
docker compose를 활용하는 방법
yaml로 컨테이너 여럿을 띄우는 방법을 미리 정의하고, ‘docker-compose up’ 명령어를 통해 정의한대로 컨테이너를 동작시킨다.
docker-compose.yaml 작성하기
yaml을 작성해보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: '3'
services:
wic-mongo:
image: wic-mongo:latest
ports:
- 27017:27017
wic-redis:
image: wic-redis:latest
ports:
- 6379:6379
wic-api:
image: wic-api:latest
ports:
- 3311:3311
environment:
- PORT=3311
- MONGO_URI=mongodb://wic-mongo:27017/wic
wic-app:
image: wic-app:latest
ports:
- 8080:8080
environment:
- PORT=8080
- MONGO_URI=mongodb://wic-mongo:27017/wic
docker-compose는 yaml에서 지정한 서비스들을 별다른 설정이 없다면 기본 네트워크에 등록시킨다.
그러므로 기존 localhost로 참조하던 ip 대신, serviceName으로 참조할 수 있다.
yaml을 보면 environment로 wic-mongo:27017
을 참조하고 있는데 그것이다.
명령어
1
2
3
4
5
6
7
8
# 컨테이너 실행
docker-compose up -d // 도커 백그라운드 실행
docker-compose up --force-recreate // 도커 컨테이너 새로 만들기
docker-compose up --build // 도커 이미지 빌드 후 compose up
# 컨테이너 내리기
docker-compose down // 컨테이너 stop & 삭제
docker-compose stop
생각해보자
개발 환경에서 minikube를 사용할지, docker-compose를 사용할지 고민이 된다.
댓글남기기