docker stack

docker stack

docker swarm 을 사용하지않고 단일 물리 머신에서는 docker run … 과같은 명령어들을 docker compose 에 설정하여 사용하는 방법이있었다.
docker swarm 에서도 역시 이런 유사한 방법이 있는데 docker service create … 들을 정의하여 사용하는방법이 있으며 docker stack 이라고 지칭한다.
docker stack 을 어떻게 사용하는지 알아보자 .

configure yml file

이전포스트 docker swarm service 에서 제시된 service 를 생성하는 명령어는 다음과 같다.
다음과 같은 service를 생성하는 명령어가 있다고 가정하자.

1
2
3
4
5
6
7
$ docker service create --name nginx \
--network setyourmindpark_net \
--constraint "node.labels.type == nginx" \
-p 80:80 \
--mount type=bind,src=/home/docker/nginx/volume,dst=/etc/nginx \
--replicas 3 \
setyourmindpark/debian-nginx

다음과 같이 docker-stack.yml 을 정의한다. ( 파일명은 제약사항이없다. )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3.5"
networks:
net:
driver: overlay
attachable: true
services:
nginx:
image: setyourmindpark/debian-nginx
ports:
- 80:80
environment:
- TZ=Asia/Seoul
volumes:
- /home/docker/nginx/volume:/etc/nginx
networks:
- net
deploy:
replicas: 3
placement:
constraints:
- node.labels.type == nginx

이제 stack 명령어를 사용하여 services 들을 생성한다.

1
2
3
4
5
6
7
# docker stack deploy -c 파일명 stack명
$ docker stack deploy -c docker-stack.yml setyourmindpark
Creating network setyourmindpark_net
Creating service setyourmindpark_nginx
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
vbdj9p1h58fg setyourmindpark_nginx replicated 3/3 setyourmindpark/debian-nginx:latest *:80->80/tcp

정상적으로 생성이 완료되었다.
추가적으로 stack으로 생성된 services들은 stack 명령어로도 확인이 가능하다.

1
2
3
4
5
6
7
8
9
$ docker stack ls
NAME SERVICES
setyourmindpark 1
$ docker stack ps setyourmindpark
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vl95vusgaqcp setyourmindpark_nginx.1 setyourmindpark/debian-nginx:latest nginx Running Running 8 minutes ago
da0107q7fwiv setyourmindpark_nginx.2 setyourmindpark/debian-nginx:latest nginx Running Running 8 minutes ago
v8om2wwr4ba4 setyourmindpark_nginx.3 setyourmindpark/debian-nginx:latest nginx Running Running 8 minutes ago

해당 yml 파일에 기술한 nginx service 외에도 필요한 service를 같이 기술하면, stack deploy시 정의된 모든 services들이 같이 올라올것이다.
그밖에도 cpu나, memory limit 과 같은 추가적인 옵션들을 제공하며,( 당연히 docker service create … 시에도 똑같이 사용할수있다. ) 제공하는 옵션은 docker Compose file version 3 reference 에서 확인가능하다.

견해

docker 를 잠시동안 놓게되면 정말 엄청나게 빨리 version up 이 되는듯하다.
새로생긴 옵션도 많아지고, 점점더 진입장벽이 생기는듯하다.
새로 눈여겨볼 부분은 service create 시 -v 가 먹히지않는다는점.. docker document에서는 권장사항이라고 언급하고있으나 필자의 version에서는 해당명령어를 사용할수없었다.
물론 –mount 옵션이 좀더 많은 기능을 제공하는듯하다. nas와 같은 volume container를 설정할수있는 옵션이 추가된듯하다 자세히 살펴보지않았지만…
꾸준히 docker document를 살펴보는 습관을 길러야겠다.