m1ndy5's coding blog

Ditto 프로젝트 docker-compose 2편 - docker-compose란? 본문

Toy Projects/Ditto - Discuss Today's Topic

Ditto 프로젝트 docker-compose 2편 - docker-compose란?

정민됴 2024. 4. 24. 11:11

docker-compose?

docker-compose는 단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구

왜 docker-compose를 사용할까?

여러 개의 컨테이너가 하나의 애플리케이션으로 동작할 때 docker-compose를 사용하지 않는다면 각 컨테이너를 하나씩 생성해 실행해야 한다. 만약 100개의 컨테이너가 하나의 애플리케이션으로 동작한다면 일일이 컨테이너를 실행하기는 번거롭다.

docker-compose는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작하기 때문에 하나의 명령어로도 애플리케이션을 이루고 있는 컨테이너들을 실행시킬 수 있다.

docker-compose 설치

https://docs.docker.com/compose/install/
각 os에 맞게 다운받으면 된다.

docker-compose.yml

docker-compose.yml에 컨테이너로 생성할 서비스들을 설정하여 사용하면 된다.

# 도커 컴포즈의 버전을 설정
version: "3"
# 컨테이너들의 설정 내용
services:
  # 이름:컨테이너1
  컨테이너1:
    # 베이스이미지 설정
    image: mysql:5.7
    # 네트워크 설정
    networks:
      - 네트워크이름
    # mysql-data 볼륨을 /var/lib/mysql에 연결함 -> docker volume create로 생성한 볼륨을 
    # docker run 명령에서 -v 옵션으로 사용하는 것과 같음
    volumes:
      - mysql-data:/var/lib/mysql
    # 환경변수 설정
    environment:
      MYSQL_ROOT_PASSWORD: root_pwd
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: pwd
    # 포트 설정
    ports:
      - 포트설정
  # 이름:컨테이너2
  컨테이너2:
    image: wordpress
    networks:
      - 네트워크
    volumes:
      - 볼륨
    ports:
      - 8000:80
# 네트워크 설정
networks:
  네트워크이름1:
# 볼륨 설정 -> docker volume create와 같음
volumes:
  볼륨1:
  볼륨2:
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: jenkins
    volumes:
      - ./jenkins:/var/jenkins_home
    ports:
      - "8088:8080"

  activity:
    container_name: activity
    build:
      context: ./ditto-module-activity
      dockerfile: Dockerfile
    ports:
      - "8081:8081"

  gateway:
    container_name: gateway
    build:
      context: ./ditto-module-gateway
      dockerfile: Dockerfile
    ports:
      - "8083:8083"

  newsfeed:
    container_name: newsfeed
    build:
      context: ./ditto-module-newsfeed
      dockerfile: Dockerfile
    ports:
      - "8082:8082"

  stock:
    container_name: stock
    build:
      context: ./ditto-module-stock
      dockerfile: Dockerfile
    ports:
      - "8091:8091"

  user:
    container_name: user
    build:
      context: ./ditto-module-user
      dockerfile: Dockerfile
    ports:
      - "8087:8087"

나는 이렇게 각 서비스에 도커파일로 정의해서 사용했다.
포트 같은 경우에는 호스트OS 포트 : 컨테이너 내부 포트

docker-compose 실행 및 종료

# foreground로 도커 컴포즈 프로젝트 실행
$ docker-compose up

# background로 도커 컴포즈 프로젝트 실행
$ docker-compose up -d

# 프로젝트 내 컨테이너 및 네트워크 종료 및 제거
$ docker-compose dowm

# 프로젝트 내 컨테이너, 네트워크 및 볼륨 종료 및 제거
$ docker-compose down -v

docker-compose 목록 확인

$ docker-compose ps