본문 바로가기
Server/Ubuntu

Docker Compose

by 유주원 2016. 10. 13.

Docker Compose 개요


하나의 docker container에 하나의 서비스만을 돌린다면 아무 문제가 없지만, 만약에 여러개의 docker container를 이용해서 하나의 서비스를 운영하는 것이라면 이야기가 달라진다.

매번 각각의 container를 실행시키는 것은 너무나도 귀찮은일 일 것이다.


Docker compose는 docker의 여러 container를 운영하고 정의하기 위한 툴이며, compose 파일을 구성함으로써 이러한 서비스들을 사용할 수가 있다.


compose는 기본적으로 3가지 스텝을 가지는데,


1. Dockerfile에 app 환경을 정의한다. ( app을 쉽게 재생산하기 위함)

2. docker-compose.yml 내에 앱을 구성하기 위한 service를 정의한다.

3. 마지막으로 docker-compose up을 실행하면 전체 앱들이 실행되고 운영된다.


docker-compose.yml의 예는 아래와 같다.


version : '2'

service :

  web:

    build: .

    ports:

    - "5000:5000"

    volumes:

    - .:/code

    - logvolume01:/var/log

    links:

    - redis

  redis:

    image: redis

volumes:

  logvolume01: {}


간략하게 위의 yml 파일을 설명하자면, 우선 위의 compose는 web과 redis 두개 의 서비스로 구성되어 있다.

web service를 살펴보면, 


1. 현재 위치에 있는 dockerfile로부터 빌드를 하라.

2. container 안에 있는 5000번 포트와 외부의 5000번 포트를 포트포워딩 해라.

( container 상에 있는 포트는 외부에서 접근이 불가능하기 때문에 이런식으로 연결을 시켜줘야 한다.)

3. container 안의 /code 디렉토리와 현재 폴더를 연결해라. 

( 외부 볼륨 연결, 외부 볼륨을 연결하면, 우선 container가 삭제 되더라도 외부 볼륨 상에 있는 데이터는 그대로 유지시킬 수가 있다.)

4. web service와 redis service를 연결해라.


보다 자세히는 서서히 알아가는 것으로...



Docker Compose 설치


Docker compose를 설치하기 위해서는 우선 docker engine을 설치해야 한다. 만약에 docker toolbox가 설치되어 있다면 아래의 설치 과정은 무시해도 된다.


만약 docker toolbox가 설치되어 있지 않다면 아래의 주소를 통해 docker compose를 가져온다.


$> curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose- `uname -s`-`uname -m` > /usr/local/bin/docker-compose


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


$> docker-compose --version


pip를 이용해서도 dokcer-compose를 설치할 수 있다.


$> pip install docker-compose


 

Docker Compose 실행해보기


따로 dockerfile을 만드는 일은 귀찮으니, yml 파일만 수정해서 docker compose를 실행해보자.

아래의 예제는 wordpress와 mysql을 서비스로 하는 예제이다.


version: '2'

services:

  db:

    image: mysql:5.7

    volumes:

      - "/test/db:/var/lib/mysql"

    restart: always

    environment:

       MYSQL_ROOT_PASSWORD: wordpress

       MYSQL_DATABASE: wordpress

       MYSQL_USER: wordpress

       MYSQL_PASSWORD: wordpress


  wordpress:

    depends_on:

      - db

    image: wordpress:latest

    links:

      - db

    ports:

      - "8000:80"

    restart: always

    environment:

      WORDPRESS_DB_HOST: db:3306

      WORDPRESS_DB_PASSWORD: wordpress


위와 같이 yml 파일을 만들어 주고 아래와 같이 docker-compose를 실행해 준다.


$> docker-compose up -d


받아진 이미지가 없다면, mysql과 wordpress에 대해 이미지를 받을 것이다. 완료가 되었다면, docker-compose ps를 해보자.


$> docker-compose ps


word-press와 mysql에 대한 각각의 container 정보를 볼 수가 있다.