系列文章目录
docker 门外初体验–docker stack (五)
前言
本文主要对docker stack 进行学习,及谈一谈本人对docker stack的理解.
一、docker stack是什么?
如下为本文中使用的docker-compose.yml文件的具体内容。
version: "3"
services:
web:
image: pan19881018/get-start:part2
volumes:
- .:/app
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
redis:
image: redis
ports:
- "6379:6739"
volumes:
- ./data:/data
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
docker stack 是容器编排技术,初次接触不太好理解,我们通过实际的操作来理解。 在本文的实操中,我们将通过操作来体验在docker stack是如何实现容器编排。docker stack 技术栈。技术栈是一组相关的服务,它们共享依赖项并且可以一起进行编排和扩展。按我的理解就是docker的最终的目标是为了提供服务,单一的服务无法满足实际的应用场景,服务的组合才能满足我们实际的应用场景。
二、操作过程
如下为docker stack的实操日记。
# docker-machine ssh myvm1 “docker swarm init –advertise-addr 192.168.99.100:2377”
Swarm initialized: current node (qmsgq8wgya34mfxgd94jvt2hh) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join –token SWMTKN-1-0l4021umvvtfjk9meufz4gks5gc8qa5yu16leg367m9s3ca24e-cwuj8c047v6xvvbxho2flx6xw 192.168.99.100:2377
To add a manager to this swarm, run ‘docker swarm join-token manager’ and follow the instructions.
# docker-machine ssh myvm2 “docker swarm join –token SWMTKN-1-0l4021umvvtfjk9meufz4gks5gc8qa5yu16leg367m9s3ca24e-cwuj8c047v6xvvbxho2flx6xw 192.168.99.100:2377”
This node joined a swarm as a worker.
# docker-machine ssh myvm1
## .
## ## ## ==
## ## ## ## ## ===
/”””””””””””””””””\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| ‘_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ ‘__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.06.1-ce, build HEAD : c7e5c3e – Wed Aug 22 16:27:42 UTC 2018
Docker version 18.06.1-ce, build e68fc7a
docker@myvm1:~$ docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web
Creating service getstartedlab_visualizer
docker@myvm1:~$ exit
# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 * virtualbox Running tcp://192.168.99.100:2376 v18.06.1-ce
myvm2 – virtualbox Running tcp://192.168.99.101:2376 v18.06.1-ce
在页面http://192.168.99.101:8080/
# docker-machine ssh myvm1 “docker stack ps getstartedlab”
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
yhauhypkguok getstartedlab_visualizer.1 dockersamples/visualizer:stable myvm1 Running Running 6 minutes ago
lo65xbvsmyfb getstartedlab_web.1 pan19881018/get-start:part2 myvm1 Running Running 7 minutes ago
m7fompj28ptg getstartedlab_web.2 pan19881018/get-start:part2 myvm2 Running Running 7 minutes ago
y1i1bghzyhuc getstartedlab_web.3 pan19881018/get-start:part2 myvm2 Running Running 7 minutes ago
mej5094xv5k6 getstartedlab_web.4 pan19881018/get-start:part2 myvm1 Running Running 7 minutes ago
z55f2hdwwyzc getstartedlab_web.5 pan19881018/get-start:part2 myvm2 Running Running 7 minutes ago
三、操作结果
登录页面http://192.168.99.101:8080/,如下图所示:stack的样例的结果如下所示:
四、总结
本文主docker-compose.yml包含了三个docker镜像,这三个docker镜像具备不同的功能,我们就是通过docker stack将它们编排在一起。最终的目地就是服务组合。在实际的应用中,docker stack的回滚策略、服务更新策略等功能在本文中没有谈及还需要系统学习。