Docker compose

2020. 2. 8. 15:19devops/docker

Docker Compose

여러개의 컨테이너가 하나의 서비를 운영하기 위해서 여러번의 run 명령어를 사용해주어야합니다. 예를들어 node webServer를 사용하는데 DB까지 사용한다면 node서버를 run하고 DB 서버를 run해야합니다. 매번 이렇게 run하여 컨테이너를 만들기 귀찮습니다. 이런 문제를 해결하기 위해 Docker는 여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있도록하는 기능을 제공해줍니다. 이를 Docker Compose라고합니다. 개발과 CI를 할 수있게 여러개의 container를 하나의 묶음으로 다룰 수 있는 환경을 제공합니다. 

 

Docker Compose는 여러 개의 컨테이너의 옵션과 환경을 정의한 파일을 읽어 container를 순차적으로 실행합니다. run을 할때 사용했던 option을 그대로  사용할 수 있습니다. ex) 네트워크, 볼륨....또한 스웜 모드의 서비스와 비슷하게 컨테이너의 수를 유동적으로 관리할 수 있으며 수를 유동적으로 관리할 수 있습니다. 

 

Docker Compose 설치

- ubuntu

curl -L https://github.com/docker/compose/release/download/1.11.0/docker-compose-'uname -s' -'uname -m' > /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

 

-window, mac

window와 mac은 자동으로 docker를 설치하면 compose또한 설치됩니다. 

 

Docker Compose 사용

compose는 yaml 파일을 읽어서 도커엔진을 통해 컨테이너를 생성합니다. 그럼 우선 YAML 파일을 작성해보겠습니다. 기본적으로 docker-compose는 docker-compose.yml이라는 이름의 파일을 찾아서 컨테이너를 생성합니다. -f 옵션을 통해 compose할 파일을 선택할 수 있습니다.

 

이러한 명령어를 yaml파일로 바꾸어 보겠습니다. 

docker run -d --name mysql \
alicek106/composetest:mysql \
mysqld

docker run -d -p 80:80 \
--link mysql:db --name web \
alicek106/compotest:web \ 
apachectl -DFOREGROUND

위 명령어를 변환한 yaml파일

version: '3.0'

services: 
  web:
    image: alicek106/composetest:web
    ports:
      - "80:80"
    links:
      - mysql:db
    command: apachectl -DFOREGROUND
  mysql:
    image: alicek106/composetest:mysql
    command: mysqld
    
    
저장 후 
docker-compose up -d

yaml 파일 설명

version: '3.0'

yaml 파일 포맷의 버전을 나타냅니다. 버전은 1.2, 2.1, 3.0 등등이 있습니다. 

services: 

생성될 컨테이너들을 묶어놓은 단위입니다. 

 

docker ps를 통해 위에서 실행시킨 container를 확인할 수 있습니다. 

 

컨테이너를 프로젝트 및 서비스 단위로 구분한다. 

compose명령어에서 container의 이름은 yml이 존재하는 디렉터리 파일이름_서비스_container 만들어진 순서 대로 container이름이 설정됩니다. 

 

scale 명령어를 통해 container의 숫자를 설정할 수 있습니다. 

// mysql container 2개로 늘리기
docker-compose scale mysql=2

yml 파일에서 특정  서비스 container만 만들기

// mysql만 만들기
docker-compose  up -d mysql

Interactive shell 사용하기

docker-compose run web /bin/bash

 

docker-compose ps

ps 명령어를 통해 compose를 통해 만들어진 container를 확인할 수 있습니다.

docker-compose ps                                                                                                                                           1 ↵  11258  15:10:10
     Name                Command           State    Ports
---------------------------------------------------------
compose_mysql_1   mysqld                   Up
compose_web_1     apachectl -DFOREGROUND   Exit 0

docker-compose down

생성된 프로젝트는 docker-compose down명령어로 삭제할 수 있습니다. 

docker-compose down                                                                                                                                           ✔  11259  15:10:14
Stopping compose_mysql_1 ... done
Removing compose_web_1   ... done
Removing compose_mysql_1 ... done
Removing network compose_default

docker-compose -p

-p 옵션을 사용하여 프로젝트의 이름을 설정할 수 있습니다. 그리고 -p를 사용하여 관리 및 사용할 수 있습니다. 

// 프로젝트 이름 myproject로 설정하여 compose 생성
docker-compose -p myproject up -d
// 프로젝트 이름 myproject 확인하기
docker-compose -p myproject ps
// 프로젝트 이름 myproject 종료
docker-compose -p myproject down

 

'devops > docker' 카테고리의 다른 글

docker compose yaml 파일 작성  (2) 2020.02.08
Docker 구조  (0) 2020.02.04
Dockerfile 명령어  (0) 2020.02.04
docker build 과정  (2) 2020.02.02
docker file 작성  (0) 2020.01.31