본문 바로가기
가상화 기술과 관리/Docker

[Docker compose] 도커 컴포즈 정리

by so5663 2023. 12. 9.

도커 컴포즈?

도커 컴포즈는 단일 서버에 여러개의 컨테이너를 하나의 서비스로 해서 컨테이너의 묶음으로 관리할 수 있는

작업 환경을 제공하는 관리 도구

 

리눅스 환경에서

sudo apt install docker
sudo apt install docker-compose

 

이런 화면이 나온다면 성공!

 

docker-compose.yml

version: '3'

services:

  b-mysql:
    image: mysql:8.0.32
    container_name: b-mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
    ports:
      - "3307:3306"
      
  b-redis:
    image: redis:latest
    container_name: b-redis
    ports:
      - "6379:6379"

yqml 파일에서는 도커 컴포즈가 탭을 인식하지 못한다고 한다. 스페이스바 2개를 사용하자.

 

어떠한 설정도 하지 않으면 도커 컴포즈는 현재 디렉토리의 docker-ompose.yml 파일을 읽음

로컬의 도커 엔진에게 켄테이너 생성을 요청함

그리고 나서 docker-compose 명령을 실행할 때 -f 플래그를 사용하여 환경 변수 파일을 지정합니다.

docker-compose -f your-compose-file.yml --env-file .env up

 

이 경우 docker-compose.yml 파일을 사용하고 test.env 파일에 정의된 환경 변수를 적용하여 컨테이너를 실행하려면 다음과 같이 명령어를 작성할 수 있습니다

docker-compose -f docker-compose.yml --env-file test.env up

 

docker-compose.yml 파일의 옵션

  • version -> yaml 파일 포맷의 버전을 나타냄 
  • services -> 생성될 컨테이너들을 묶어놓은 단위입니다. 서비스 아래에서 각 컨테이너에 적용될 생성 옵션 적용
  • 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정합니다.
    •  이미지 이름 포맷은 docker run과 같으며 만일 이미지가 도커에 존재하지 않으면 도커 허브에서 자동으로 내려받습니다.
  • environment  -> docker run 명령어의 --env, -e 옵션과 동일합니다. 서비스의 컨테이너 내부에서 사용할 환경변수를 지정하며, 딕셔너리(Dictionary)나 배열 형태로 사용할 수 있습니다.
  • port -> docker run 명령어의 -p와 같으며 서비스의 컨테이너를 개방할 포트를 설정합니다. 그러나 단일 호스트 환경에서 80:80과 같이 호스트의 특정 포트를 서비스의 컨테이너에 연결하면 docker-compose scale 명령어로 서비스의 컨테이너의 수를 늘릴 수 없습니다.

 

도커 컴포즈 명령어

 

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

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

# 프로젝트 이름 my-project로 변경하여 도커 컴포즈 프로젝트 실행
$ docker-compose -p my-project up -d

# docker-compose scale 명령어로 각 서비스에 여러개의 컨테이너를 생성
# 단, scale 시 주의할 점은 포트를 여러개 지정하면 충돌이나므로 호스트 포트는 하나만 지정해주어야 함.
$ docker-compose scale [서비스명]=[컨테이너 갯수]

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

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

-----------------------------------------------------------------------------
# 도커 컴포즈 프로젝트 목록 확인
$ docker-compose ps