본문 바로가기
Linux

Docker - docker-compose로 다중 컨테이너 관리하기

by 올엠 2024. 2. 27.
반응형

Docker를 실제 사용하다보면, Database, Web, Memory Cache 등 다중 컨테이너로 사용해야 하는 상황이 종종 발생한다.

이때 만약 기본적인 Docker 명령을 활용한다면, 아래와 같이 여러 단계를 거쳐야 한다.

1. 먼저 함께 사용할 내부 네트워크를 생성하고, 

2. 이후 Docker를 Run을 통해 실행할때 마다 네트워크 및 볼륨정보등 각각의 필요한 옵션을 지정해야 줘야 한다.

아래 명령은 myapp이라는 네트워크를 생성하고, Database의 저장을 위해 mariadb-data라는 볼륨용도의 컨테이너를 생성하여 Mysql 5.7버전의 컨테이너를 생성하는 명령이다.

sudo docker network create myapp
docker run -d --network my-app --network-alias mysql -v myapp-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=<your-password> -e MYSQL_DATABASE=myapp mysql:5.7

위와 같이 네트워크 생성해서 docker run을 이용해 개별 docker 이미지를 생성할 수 있지만 매번 여러 CLI를 입력하여 관리하는 건 큰 어려움이라고 할 수 있다.

이를 위해 Docker Compose를 이용하면 별도의 네트워크를 생성하지 않아도 되며, 동시에 여러 이미지를 활용하면 쉽게 관리할 수 있다.

아래는 MariaDB와 FastAPI를 동시에 실행할 때 사용할 수 있는 Docker-Compose 파일이다.

docker-compose.yml

version: "3.3"

services:
  mariadb:
    image: mariadb:latest
    ports:
      - 3306:3306
    volumes:
      - mariadb-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      PYTHONUNBUFFERED: 0
  api:
    image: my:api
    ports:
      - 443:8080
    environment:
      DB_PASSWORD: password
      PYTHONUNBUFFERED: 0
    volumes:
      - /etc/letsencrypt:/etc/letsencrypt
      - /var/lib/letsencrypt:/var/lib/letsencrypt
    depends_on:
      - mariadb
    command:
      sh -c "/opt/api/start.sh"
volumes:
  mariadb-data:

 

반응형