docker-compose

docker-compose

docker 시작하기 이전포스트에서 docker의 설치와 이미지파일 생성등을 알아보았다.
다음의 명령어는 생성된 이미지파일을 컨테이너로 실행하는 명령이다

1
$ sudo docker run -d -p 89:8080 --name jenkins -v /home/docker/jenkins/jenkins_data:/root jenkins

그렇다면, 생성된 이미지파일이 다수일경우, 위와같은 명령어를 이미지명과, volume 경로등 개별 옵션들을 변경하여 명령어를 입력해야한다
다수의 이미지들을 정해진 설정으로 한번에 컨테이너로 모두 만들수는없을까 ?
docker-compose 활용하면, 작성해둔 이미지별 설정정보로 한번에 여러이미지를 컨테이너로 만들수있다.
설치부터 한번 알아보자

1
2
3
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

docker-compose를 정상적으로 설치되었다면 버전을 확인해보자

1
$ sudo docker-compose --version

버전이 표시된다면, 정상적으로 설치가된것이다 .


docker-compose 사용하기

docker-compose를 사용하는방법으로, 먼저 docker-compose는 yml 확장자를 가진 파일을 생성하도록한다.

1
$ vi docker-compose.yml

이제 ‘이미지파일을 어떻게 실행할 것인가’ 에대한 설정을 시작한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
version: '2'
services:
mariadb:
image: mariadb
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=0000
- TZ=Asia/Seoul
volumes:
- /home/jaehunpark/docker/mariadb/mariadb_data:/var/lib/mysql
command:
- "mysqld"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
container_name: mariadb
jenkins:
image: jenkins
ports:
- "89:8080"
volumes:
- /home/jaehunpark/docker/jenkins/jenkins_data:/root
container_name: jenkins
deploy:
image: deploy
ports:
- "33:22"
- "88:4000"
volumes:
- /home/jaehunpark/docker/deploy/deploy_data:/root
tty: true
depends_on:
- mariadb
container_name: deploy

필자는 위와같이 docker-compose를 사용한다. mariadb는 순수 docker hub에서 제공하는 이미지를 사용하고, jenkins와 deploy 는 Dockerfile을 만들어 이미 이미지로 생성된 상태로 설정정보를 진행하였다.
docker-compose 공식문서를 참고하도록하자 .


docker-compose 를사용하여 컨테이너 실행

1
$ sudo docker-compose up -d
  • -d 백그라운드로 실행
1
2
3
mariadb is up-to-date
deploy is up-to-date
Creating jenkins

이미지가 이미 컨테이너로 실행되어있으면, up-to-date를, 이미지를 컨테이너로 처음 실행된다면 Creating jenkins를 표시한다.
이제 컨테이너가 정상적으로 실행되었는지 확인해보자 .

1
$ sudo docker ps -a

1
2
3
4
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a3cf0852e58 jenkins "/opt/tomcat/bin/cata" 4 minutes ago Up 4 minutes 0.0.0.0:89->8080/tcp jenkins
5846e1ba049f deploy "/usr/sbin/sshd -D" 47 hours ago Up 47 hours 0.0.0.0:33->22/tcp, 0.0.0.0:88->3000/tcp, 0.0.0.0:87->4000/tcp deploy
7a53b6623118 mariadb "docker-entrypoint.sh" 3 months ago Up 4 days 0.0.0.0:3306->3306/tcp mariadb

실행한후, 컨테이너가 제대로 실행되었는지, STATUS 탭 을 꼭확인하도록하자.
만약 Exited 라고 표시되었다면 컨테이너 실행도중 죽은것이므로 docker-compose.yml 파일을 다시한번 체크하도록 하자. (특히 docker-compose.yml 에 기술하는 services들의 문법이 엄격하다 특히 띄어쓰기를 주의해야한다)


견해

docker-compose를 통해 다중 이미지들을 컨테이너로 실행하는 법을 알아보았다.
현재 글에서 docker-compose 버전은 2를 사용하고있다. 현재 3.1버전까지 나온상태로 확인이된다.
음 .. docker-compose 3.x 를 사용한후 익숙해지면 새롭게 포스트를 올리도록 하겠다.