DevOps/Docker

[Docker] docker-compose: 멀티 컨테이너를 손쉽게 배포하기

ooeunz 2020. 7. 8. 17:32
반응형

이전 포스팅에서 docker network를 이용하여 하나의 네트워크 안에 여러 개의 멀티 컨테이너를 배포하는 것을 실습해보았습니다. 그런데 만약 이전 포스팅처럼 2개의 컨테이너를 배포하는 것이 아니라 100개의 컨테이너를 배포해야 되는 상황이라면 어떨까요?

 

분명 도커를 사용함으로 인해서 많은 부분 배포가 간결해졌지만, 100개의 컨테이너를 손수 배포하는 것은 여전히 부담스럽습니다. 또한 중간에 오타가 나거나 실수를 하는 경우가 발생할 수 있고 다수의 인스턴스에 일관되게 배포하는 것에 어려움이 있을 수 있습니다.

 

이러한 문제를 해결하는 것이 바로 docker-compose입니다. docker-compose는 docker 프로그램을 정의하고 멀티 컨테이너를 손쉽게 배포할 수 있는 도구입니다. 컨테이너 하나하나 명령어를 입력해서 배포하는 것이 아니라 yaml 파일에 사용할 컨테이너의 정보를 입력하고, 명령어로 손쉽게 배포할 수 있습니다.

 

 

※ docker-compose install은 아래 url을 참고하세요!

 

Install Docker Compose

You can run Compose on macOS, Windows, and 64-bit Linux. Prerequisites Docker Compose relies on Docker Engine for any meaningful work, so make sure you have Docker Engine installed either...

docs.docker.com

 


docker-compose 명령어

docker-compose의 명령어 역시 docker와 크게 다르지 않습니다. 기본적으로 -d와 같은 백그라운드 실행 명령어는 동일합니다.


docker-compose up 

명령어를 입력한 다음 터미널에서 실행 명령어를 입력하면 wordpress 컨테이너와 mysql 컨테이너가 함께 올라가는 것을 확인하실 수 있습니다. 또한 localhost:8000 포트로 접속하면 wordpress 화면을 확인할 수 있습니다. (특정 서비스만 먼저 따로 실행시키고 싶을 경우 사용합니다)

 

docker-compose ps

데몬으로 실행되는 컨테이너들 중에 compose에 등록된 컨테이너들의 상태를 볼 수 있습니다.

 

docker-compose restart

compose에 등록된 컨테이너를 재시작 할 수 있습니다. 또는 서비스 이름을 붙여 명령을 할 경우, 해당 컨테이너만 재시작할 수 있습니다.

 

docker-compose start

compose에 등록된 컨테이너를 실행합니다. 기존에 컨테이너가 생성된 상태이어야 합니다. 역시 이름을 붙여 특정 컨테이너만 실행할 수 있습니다.

 

docker-compose stop

compose에 등록된 컨테이너를 종료합니다. 이름을 붙여 특정 컨테이너만 종료할 수 있습니다.

 

docker-compose rm 

compose에 등록된 컨테이너를 삭제합니다. 이름을 붙여 특정 컨테이너만 삭제할 수 있습니다.

 


 

간단한 예시코드로써 wordpress와 mysql 이미지를 docker-compose를 이용하여 배포해보도록 하겠습니다. 앞서 말씀드린대 컨테이너에 대한 정보를 yaml파일을 이용해서 작성하게 됩니다. yaml(yml)은 json과 비교했을 대 간결하고, 주석도 지원하여서 가독성이 좋습니다. 단, 들여 쓰기에 따라 구조가 바뀌므로 작성할 때 올바르게 들여 쓰기를 했는지 확인해야 합니다.

 

※ 상세한 YAML Syntax는 아래 URL에서 확인합니다 :)

 

YAML Syntax — Ansible Documentation

This page provides a basic overview of correct YAML syntax, which is how Ansible playbooks (our configuration management language) are expressed. We use YAML because it is easier for humans to read and write than other common data formats like XML or JSON.

docs.ansible.com

 

 

그럼 이제 docker-compose.yml이라는 파일을 만들고 아래의 코드를 입력해 보겠습니다.

version: '3'
services:
  wordpress:
    image: wordpress
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_NAME: wp
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: wp
    ports:
      - "8000:80"
    restart: always
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: wp
      MYSQL_DATABASE: wp
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp

 

코드를 입력한 다음 아래의 명령어로  docker-compose를 실행해보겠습니다.

docker-compose up -d

# 또는
docker-compose -d docker-compose.yml up

 

명령어를 입력한 다음 터미널에서 실행 명령어를 입력하면 wordpress 컨테이너와 mysql 컨테이너가 함께 올라가는 것을 확인하실 수 있습니다. 또한 localhost:8000 포트로 접속하면 wordpress 화면을 확인할 수 있습니다.

 

반응형