docker swarm中使用stack.yml部署服务
一、一些概念:
1、service
swarm service是一个抽象的概念,它只是一个对运行在swarm集群上的应用服务,所期望状态的描述。
2、stack
stack是描述一系列相关services的集合。我们通过在一个YAML文件中来定义一个stack。
3、task
在Docker Swarm中,task是一个部署的最小单元,task与容器是一对一的关系。
4、多主机网络
同一个docker 主机上,我们用bridge网络通信即可。 而在swarm集群中,我们一般都会使用overlay型的
网络来覆盖所有位于不同docker主机中的容器。
一个测试案例
vi stack.yml ,内容如下:
version: '3' services: web: image: ikubernetes/myapp:v1 networks: - mynet ports: - 80:80 deploy: mode: replicated replicas: 6 update_config: parallelism: 1 delay: 10s restart_policy: condition: on-failure delay: 5s max_attempts: 3 #resources: # limits: # cpus: '0.50' # memory: 50M # reservations: # cpus: '0.25' # memory: 20M networks: mynet: driver: overlay#使用yml配置文件,部署swarm服务
(
当然,用命令行执行部署也可:
docker service create --name test1 -p 80:80 --replicas 3 ikubernetes/myapp:v1
注意: 访问ip:/hostname.html这个页面会输出容器的hostname (/etc/hostname文件内容)
)
测试下访问web服务:
在docker容器内部:
wget -O - -q 10.0.0.46/hostname.html ingress网络(默认的overlay),无法访问
wget -O - -q 10.0.1.4/hostname.html 自定义的mynet网络(overlay),可以访问
wget -O - -q localhost/hostname.html 回环地址,可以访问
wget -O - -q 172.18.0.3/hostname.html 特权地址,可以访问
wget -O - -q 172.18.0.1/hostname.html service的虚拟IP,可以访问,多次请求有负载均衡效果
wget -O - -q 192.168.11.13/hostname.html 节点ip,可以访问,多次请求有负载均衡效果
在集群的各个节点主机中:
curl 172.18.0.1/hostname.html service的虚拟IP,多次请求有负载均衡效果
在集群外部,访问各个节点ip,多次请求有负载均衡效果
curl 192.168.11.13/hostname.html
curl 192.168.11.13/hostname.html
curl 192.168.11.14/hostname.html
curl 192.168.11.14/hostname.html
curl 192.168.11.15/hostname.html
curl 192.168.11.15/hostname.html
(
docker stack 命令参考:
deploy Deploy a new stack or update an existing stack
ls List stacks
ps List the tasks in the stack
rm Remove one or more stacks
services List the services in the stack
例如:
docker stack ls
docker stack ps mystack
docker stack services mystack
docker stack rm mystack
docker stack deploy -c mystack.yml mystack
)
二、执行滚动更新
1、使用命令行执行滚动更新
docker service update --image ikubernetes/myapp:v2 --update-parallelism 1 --updae-delay 10s mystack_web
2、使用yml配置清单文件执行滚动更新
修改mystack.yml中 ,web服务的镜像版本为ikubernetes/myapp:v2 保存后,执行:
docker stack deploy -c mystack.yml mystack #执行更新
swarm中默认是采用滚动更新机制,所以在执行更新期间用户仍有可能访问到老版本的页面 。
over ~~
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1