새소식

docker

[Docker] Docker-Compose

  • -

Docker Compose

도커 컴포즈는 여러 컨테이너를 모아서 하나의 애플리케이션을 구성할 수 있도록 해준다.
yaml 파일을 사용하여 애플리케이션의 서비스를 구성한다.
이후, 단일 명령으로 yaml 파일에 정의된 모든 서비스를 만들고 시작한다.

여러 컨테이너를 띄우려면 docker run ... 명령을 컨테이너 수 만큼 실행해야 한다.
docker-compose를 이용하면 하나의 파일에 여러 컨테이너를 실행하도록 미리 작성해두고, docker-compose.yml 파일만 실행하도록 하면 된다.

이렇게하면 여러 컨테이너를 한번에 띄우기 쉬워지고, 실행시 필요한 설정 정보들도 관리하기 편해진다.
컨테이너를 백업하거나 다른 환경으로 옮길 때에도, 기존에 작성한 docker-compose.yml 파일과 컨테이너를 띄울 때 필요한 파일 또는 디렉토리들만 백업하면 얼마든지 기존 환경과 동일한 컨테이너를 띄울 수 있다.

Docker-Compose 설치

먼저, 도커 컴포즈를 설치해야 한다. 다음과 같이 도커 컴포즈를 설치할 수 있다.

# 도커 컴포즈 설치
$ sudo curl -L https://github.com/docker/compose/releases/download/v2.1.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 도커 컴포즈 실행 권한 설정
$ sudo chmod +x /usr/local/bin/docker-compose

# 설치된 도커 컴포즈 버전 확인
$ docker-compose --version

도커 컴포즈 최신 버전 확인

Docker-Compose 작성

docker-compose.yml 파일을 생성하고, 다음과 같이 작성한다.

도커 컴포즈 실행을 위한 파일명은 무조건 docker-compose.yml으로 작성해야 한다.

(수정)
docker-compose에서 default로 읽을 수 있는 파일 이름은 docker-compose.ymldocker-compose.override.yml 이다.
docker-compose -f 명령을 통해 특정 이름의 compose 파일을 사용할 수 있다.
$ docker-compose -f custom-docker-compose.yml up -d와 같이 명령을 입력하면 custom-docker-compose.yml파일을 읽어서 docker-compose를 실행한다.

# yaml 파일 포멧 버전
version: '3.8'

# 파일에서 쓸 볼륨을 선언
volumes:
    [volume_name]:
        external: true # 외부에 있는 [volume_name] 볼륨 사용
        name: [volume_name]

# 생성될 컨테이너들의 묶음
services:
    # 컨테이너를 여러개 띄우고 싶다면 아래에 추가하면 된다.
    # 컨테이너 이름
    mysql-container:
        # 사용할 이미지
        image: mysql
        # 사용할 포트
        ports:
            - 3306:3306
        # 사용할 볼륨
        volumes:
            # 도커 볼륨 사용
            - todo_mysql:/var/lib/mysql
            # Bind Mount 방식
            # - ./db/conf.d:/etc/mysql/conf.d
            # - ./db/data:/var/lib/mysql
            # - ./my.cnf:/etc/mysql/my.cnf
        # 환경 변수 파일. `.env` 파일에 정의된 정보를 가져온다
        env_file: .env
        # 환경 변수
        environment:
            - TZ=Asia/Seoul
        restart: always
        command:
            - --character-set-server=utf8mb4
            - --collation-server=utf8mb4_unicode_ci
            - --character-set-client-handshake=FALSE

.env 파일처럼 환경 변수 파일을 따로 빼내어 지정해줄 수 있다. 민감한 정보들이 들어있을 때 사용하기 좋다.

MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=[root_pw]

MYSQL_USER=user
MYSQL_PASSWORD=[user_pw]

Docker-Compose 실행

작성한 docker-compose.yml 파일이 위치한 경로에서 다음 명령을 입력한다.

$ docker-compose up -d

위 명령에서 up은 빌드 및 실행을 의미한다.
-d 옵션은 컨테이너를 백그라운드에서 실행해주는 옵션이다.

이후 $ docker ps 명령을 통해 확인해보면 지정한 컨테이너가 실행중인 것을 확인할 수 있다.

# 출력되는 내용이 길어서 command, ports는 잘랐다..
$ docker ps
CONTAINER ID   IMAGE     CREATED          STATUS          NAMES
ba07fc70be35   mysql     37 minutes ago   Up 37 minutes   mysql-container

기타 명령어

docker-compose로 띄운 컨테이너 중지 명령

docker-compose stop

docker-compose로 띄운 컨테이너 삭제 명령

docker-compose down
[Docker] Docker-Compose

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.