본문 바로가기
Docker

4. Docker Compose

by 서영선 2023. 8. 19.

 

 

 

 

1. Docker Compose란? 

:  여러 컨테이너를 모아서 관리하기 위한 툴

웹서비스는 프론트엔드 서버, 데이터베이스 서버, 백엔드 서버로 이루어져 있는 경우가 많음
각각을 docker 컨테이너로 작성하고, 연결하여 동작하므로, Docker Compose와 같은 컨테이너 관리 툴이 필요함

더 나아가 서비스 규모가 커지면, 복수의 컨테이너를 유지하고 관리해야 하며, 이를 위해 쿠버네티스 등의 관리 툴이 사용됨

 

 

 

 

 

2. Docker Compose 작성 기본

Docker Compose는 docker-compose.yml 파일을 작성하여 실행할 수 있음
docker-compose.yml 파일은 YAML 형식으로 작성함

 

 

 

 

 

 

3. docker-compose.yml 예시로 이해하는 Docker Compose 사용법

Docker Compose 명령은 기본적으로 Dockerfile에서 익힌 명령에 기반하고 있음

( 예시 )

version : "3"

services:
  db: 
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=ys
      - MYSQL_DATABASE=myDb
    ports:
      - "3306:3306"

 

 

 

 

 

  • 기본적으로, 다음과 같은 4가지의 큰 카테고리로 작성하며, 이 중에서 보통 version과 services만 설정하여 많이 사용함 
# Docker Compose 파일 포맨 버전 저장
version: "3"

# 컨테이너 설정
services:

# 컨테이너에서 사용하는 volume 설정으로 대체 가능
volumes:

# 컨테이너간 네트워크 분리를 위한 추가 설정 부분
networks:

 

 

 


  1.  version : Docker Compose 파일 포맷 버전 지정, docker 버전에 따라 지원하는 Docker Compose 버전이 있으며, 기본적으로 버전 3으로 사용하는 것이 일반적임
  2.  services: 위 항목 아래에서 여러개 또는 하나의 컨테이너를 설정함
  3.  image : 다음 코드에서 db는 컨테이너 이름을 정의한 것으로, db라는 이름의 컨테이너 작성 시, Docker Hub에 있는 이미지를 사용할 셩우, image를 설정하면됨
services:
  db:
    image: mysql:5.7

   4.  restart: 컨테이너가 다운되었을 경우, 항상 재시작하라는 설정

   5.  environment : Dockerfile의 ENV 옵션과 동일한 역할호, 패스워드 등 보안이 필요한 부분을 docker compose 보다는          별도 파일로 작성하여, env_file 옵션으로 읽어들이는 방식을 쓰는 경우도 많음

    

services:
  db: 
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    env_file:
      - ./mysql.env

 

 

 

 

 

 

 

5. Docker Compose 실행/ 중지 하기

 

  • 실행

보통 백그라운드 실행을 의미하는 -d 옵션을 사용하여 실행함

docker-compose up -d

 

이미지 재 빌드가 필요하면 --build 옵션을 추가해야 함

그렇지 않으면, 이미 작성된 이미지를 사용하게 됨

docker-compose up --build -d

 

  • 중지

Docker Compose 중지 명령

docker-compose stop

 

  • 삭제

docker-compose up으로 생성된 컨테이너 삭제 명령

docker-compose down

 

 

 

 

 

 

 

6. docker-compose.yml 예시로 이해하는 Docker Compose 사용법 2

기존에 작성한 docker-compose.yml에 컨테이너를 추가하여, 추가 문법 이해하기

version: "3"

services:
  app:
    build:
      context: ./01_FLASK_DOCKER
      dockerfile: Dockerfile
    links:
      - "db:dbcontainer"
    ports:
      - "80:8080"
    container_name: appcontainer
    depends_on:
      - db
      
  db: 
    image: mysql:5.7
    restart: always
    volumes:
      - ./mysqldata:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=ys
      - MYSQL_DATABASE=myDb
    ports:
      - "3306:3306"
    container_name: dbcontainer

 

 

  1. build : 이미지를 Dockerfile 을 기반으로 작성 시 사용 ( context : Dockerfile 이 있는 디렉토리, dockerfile: Dockerfile 파일 명 )
  2. links : 컨테이너 내부에서 다른 컨테이너를 접속하고 싶을 때 사용, 위의 예시에서는 db 컨테이너를 app 컨테이너에서 사용하고 싶을 때, db라는 이름으로 컨테이너 접속 가능
  3. depends_on: 여러 컨테이너를 Docker Compose로 실행할 경우, 각 컨테이너가 실행을 시작하는 시점이 미묘하게 달라 에러가 날수 있다. 이때, depends_on으로 컨테이너 실행 순서를 제어할 수 있다.

 

 

 

 

 

7.  그 외 명령어

docker-compose logs : 각 컨테이너의 모든 로그(출력 결과) 확인

docker-compose config : 실행중인 Docker Compose와 docker-compose.yml 설정 확인

docker-compose exec 컨테이너 이름 : 실행중인 컨테이너에 명령어를 실행

 

 

 

 

 

 

 

'Docker' 카테고리의 다른 글

5. nginx_apache  (0) 2023.08.19
3. Docker link  (0) 2023.08.13
2. docker 조사하기  (0) 2023.08.12
1. Dockerfile 이란?  (0) 2023.08.12
0. Docker 란?  (0) 2023.08.12

댓글