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를 사용할지 고민이 된다.

댓글남기기