여러개의 docker-compose 등록하기

여러개의 docker-compose 등록하기
Photo by Rubaitul Azad / Unsplash

지난번 구축한 홈서버에 점점 서비스들이 많아지면서 어떻게 서비스를 관리하면 좋을지 고민이 되기 시작했다. 기본적으로 docker-compose로 컨테이너를 관리하고 있었는데 서비스가 많아지면서 docker-compose.yml 파일이 점점 무거워지고 하나의 서비스만 종료를 하고 싶어도 전체 시스템을 다운해야했다.

/app
├─ docker-compose.yml
├─ nginx
├─ gitlab
├─ ghost
└─ docker-registry
$ docker-compose up -d # 모든 시스템 온라인
$ docker-compose down # 모든 시스템 오프라인

따라서 각 서비스 별로 docker-compose.yml를 분할하여 관리하기로 하였다.

/app
├─ docker-compose
│  ├─ docker-compose-blog.yml
│  ├─ docker-compose-registry.yml
│  ├─ docker-compose-gitlab.yml
│  └─ docker-compose-proxy.yml
├─ nginx
├─ gitlab
├─ ghost
└─ docker-registry

위와 같이 각 시스템 별로 docker-compose 파일을 만들어주었다. 그리고 각 파일은 -f 옵션을 주어 실행시킬 수 있다.

$ docker-compose -f docker-compose/docker-compose-blog up -d # up
$ docker-compose -f docker-compose/docker-compose-blog down # down

-p 옵션을 활용하면 docker-compose를 관리하기 편해진다.

$ docker-compose -f docker-compose/docker-compose-blog -p blog up -d # up
$ docker-compose -p blog down # down

그리고 각 컨테이너간 호스트네임을 참조할 수 있게끔 각 yml에 Bridge Network를 추가하였다.

$ docker network create -d bridge backbone
networks:
  backbone:
    name: backbone
    driver: bridge
    external: true

위와 같이 네트워크를 구성하면 아래와 같이 (Line 4) 도커 컨테이너를 호스트네임으로 활용하여 alias처럼 다룰 수 있다.

# example of nginx conf file

upstream ghost-server {
    server ghost:2368; # 도커 컨테이너를 가져올 수 있다.
}

server {
    server_name j911.me;
    #listen 80;

#    *** for https support uncomment following lines ***
    listen 443 ssl;
    
  ...