만자의 개발일지

[Docker] Docker Compose 사용하기 본문

Docker

[Docker] Docker Compose 사용하기

박만자 2022. 2. 23. 12:59

Docker Compose

MSA 서비스가 등장하면서 하나의 서버에 모든 기능이 들어가있는 것이 아닌 하나의 어플리케이션을 각 서비스로 분리시켜 놓는 구조를 사용하기 시작했습니다. 때문에 MSA를 설계하기 위해서는 각 서비스들을 서버 혹은 컨테이너 단위로 분리시켜야 하고 각각의 서버 혹은 컨테이너가 서로 의존성 있게 구성되어야 합니다. MSA의 특징과 컨테이너의 확장성이 주목받기 시작하였고, MSA 서비스를 만들 때 Docker나 Kubernetes 같은 컨테이너 서비스들을 사용하기 시작했습니다. 그리고 이 Docker 컨테이너를 보다 쉽게 다루기 위해 등장한 것이 바로 Docker Compose 입니다.

Docker Compose는 여러 개의 컨테이너로 구성된 어플리케이션을 관리하기 위한 도구입니다. 

Docker Compose를 사용하면 컨테이너를 구축, 실행순서를 정의 할 수 있고, 여러 개의 컨테이너를 단 한번의 명령어로 실행 시킬 수 있습니다.

 

그러면 간단한 예제를 통해 Docker Compose 사용방법에 대해 알아보도록 하겠습니다.

 

Docker Compose 사용방법

먼저 Docker Compose를 사용하기 위해서는 Docker Compose가 설치되있어야 합니다.맥이나 윈도우의 경우 Desktop Install에 Docker Compose가 포함되어 있지만 우분투나 Cent OS같은 리눅스 계열의 경우 별도의 설치가 필요합니다.설치 방법은 아래 사이트를 참고하시길 바랍니다.

https://docs.docker.com/compose/install/

 

Install Docker Compose

 

docs.docker.com

 

다음 명령어로 Docker Compose가 설치되어있는지 확인합니다.

$ docker-compose --version
docker-compose version 1.29.2, build 5becea4c

 

그 다음 docker-compose.yml 파일을 정의해줘야 합니다. docker-compose.yml 파일 안에는 Docker 컨테이너 실행에 관한 옵션을 추가해주실 수 있습니다.

버전마다 지원하는 형식이 다르기 때문에 자세한 내용은 공식문서를 참고하시길 바랍니다.

https://docs.docker.com/compose/compose-file/

 

Compose file

 

docs.docker.com

 

다음은 Docker Compose로 mysql 컨테이너를 띄우는 docker-compose.yml 예제 입니다.

version: "3.9"
services:
  db:
    image: mysql:8.0.28
    restart: always
    environment:
      - MYSQL_DATABASE=database
      - MYSQL_ROOT_PASSWORD=abcd1234
      - TZ=Asia/Seoul
    container_name: mysql-container
    ports:
      - "3333:3306"

version은 최신 버전인 3.9버전을 사용하였고 services 블록을 통해 서비스를 정의할 수 있습니다.

각 블록의 사용법은 공식문서에 자세히 나와있습니다.

https://docs.docker.com/compose/compose-file/compose-file-v3/

 

Compose file version 3 reference

 

docs.docker.com

 

docker-compose.yml이 있는 경로에서 다음 명령어를 실행해 줍니다.

$ docker-compose up

 

 

위 명령어를 실행하면 docker-compose.yml 에 정의되있는 내용을 기반으로 컨테이너를 실행합니다.

 

컨테이너가 잘 실행되었는지 확인하기 위해 다음 명령어를 실행해 줍니다.

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
d718225ca63e   mysql:8.0.28   "docker-entrypoint.s…"   18 seconds ago   Up 18 seconds   33060/tcp, 0.0.0.0:3333->3306/tcp   mysql-container

컨테이너가 잘 실행되고 있는 것을 보실 수 있습니다.

 

이처럼 Docker Compose를 사용하면 복잡한 컨테이너들의 관계를 Yaml 이라는 형식으로 문서화 할 수 있습니다.

이로 인해 컨테이너를 손쉽게 관리할 수 있게 되고, 보다 편리하게 서비스를 구축할 수 있게 되었습니다.

Docker Compose를 잘 활용하면 보다 서비스의 내구성을 향상시킬 수 있을겁니다.

 

 

Comments