본문 바로가기

Docker

[Docker] docker-compose

단일 서버에서 여러 컨테이너를 프로젝트 단위로 묶어서 관리할 수 있게 도와주는 기능이다.

 

  • docker-compose.yml 파일을 통해 사용하는 컨테이너를 명시적으로 관리할 수 있다.
  • 프로젝트 단위로 도커 네트워크와 볼륨을 관리할 수 있다.
  • 프로젝트 내 서비스 간 의존성 정의가 가능하다.
  • 각각의 서비스 명으로 네트워크 상에서 호출할 수 있는 서비스 디스커버리 자동화 기능을 제공한다.
  • 손쉽게 컨테이너를 수평 확장할 수 있다.
  • 주요 사용 목적
    • 로컬 개방 환경 구성
    • 자동화된 테스트 환경 구성
    • 단일 호스트 내 컨테이너를 선언적 관리


Docker-Compose 구성

  • 프로젝트
    • docker-compose에서 다루는 워크스페이스 단위
    • 함께 관리하는 서비스 컨테이너의 묶음을 의미한다.
    • 프로젝트 단위로 기본 도커 네트워크가 생성된다.

  • 서비스
    • docker-compose에서 컨테이너를 관리하기 위한 단위
    • scale을 통해 서비스 컨테이너의 수를 확장할 수 있다.

  • 컨테이너
    • 서비스를 통해 컨테이너를 관리할 수 있다.

 


docker-compose.yml

  • docker-compose의 구성 파일로 한 파일 안에 여러 컨테이너 설정 내용을 저장할 수 있다.
  • version, services, networks, volumes 총 4개의 최상위 옵션을 제공한다.
  • 기본적으로 도커 네트워크는 브리지 네트워크, 이름은 [프로젝트명]_default로 생성된다.

 

docker-compose.yml의 기본 구조는 다음과 같다.

version: "3"
services:
   db:
      image: mysql:5.7
      volumes:
      - db:/var/lib/mysql
      restart: always
      environment:
      - MYSQL_ROOT_PASSWORD=PASSWORD
      - MYSQL_DATABASE=DATABASE
      - MYSQL_USER=USER
      - MYSQL_PASSWORD=PASSWORD
      networks:
      - test
  
  wordpress:
     depends_on:
     - db
     image: wordpress:latest
     ports:
     - "8000:80"
     restart: always
     environment:
        WORDPRESS_DB_HOST: db:3306
        WORDPRESS_DB_USER: USER
        WORDPRESS_DB_PASSWORD: PASSWORD
        WORDPRESS_DB_NAME: DATABASE
     networks:
     - test

volumes:
   db: {}
   
networks:
   test: {}
  • depends_on 옵션으로 컨테이너가 실행되는 순서를 정의할 수 있다.
    • 해당 설정에서는 db 실행된 후, wordpress가 실행된다.

  • volumes 옵션 아래에는 volume의 이름을 정의할 수 있다.
  • networks 옵션 아래에는 network의 이름을 정의할 수 있다.
  • {} 안에 아무것도 입력하지 않으면 docker에서 제공하는 기본 옵션으로 생성된다.

docker-compose 명령어

  • docker-compose ls
    • 실행 중인 프로젝트 목록 확인

  • docker-compose ls -a
    • 전체 프로젝트 목록 확인
  • docker-compose up
    • Foreground로 docker-compose 프로젝트 실행

  • docker-compose -p [프로젝트 명]
    • 프로젝트 명 변경 옵션

  • docker-compose -d 
    • Background로 docker-compose 프로젝트 실행

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

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

  • docker-compose up --scale [service 명]=[개수]
    • 해당 서비스를 개수로 확장
    • Host Port와 Service 내에서 container_name을 지정하면 확장이 불가능하다.

  • docker-compose logs
    • 프로젝트 내 서비스 로그 확인

  • docker-compose events
    • 프로젝트 내 컨테이너 이벤트 확인

  • docker-compose images
    • 프로젝트 내 이미지 목록

  • docker-compose ps
    • 프로젝트 내 컨테이너 목록

  • docker-compose top
    • 프로젝트 내 실행 중인 프로세스 목록

'Docker' 카테고리의 다른 글

[Docker] Dockerfile  (0) 2022.11.11
[Docker] Docker 기본  (0) 2022.11.10
[Docker] 도커란?  (0) 2022.09.17