@zhangyy
2018-12-27T11:46:57.000000Z
字数 4558
阅读 724
docker的部分
- 一: Swarm容器集群管理
Swarm是Docker公司自研发的容器集群管理系统,Swarm在早期是作为一个独立服务存在,在Docker Engine v1.12中集成了Swarm的集群管理和编排功能。可以通过初始化Swarm或加入现有Swarm来启用Docker引擎的Swarm模式。Docker Engine CLI和API包括了管理Swarm节点命令,比如添加、删除节点,以及在Swarm中部署和编排服务。也增加了服务栈(Stack)、服务(Service)、任务(Task)概念。

Manager:接收客户端服务定义,将任务发送到worker节点;维护集群期望状态和集群管理功能及Leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。Worker:接收并执行从管理节点分配的任务,并报告任务当前状态,以便管理节点维护每个服务期望状态。
1. Docker Engine 集成集群管理使用Docker Engine CLI 创建一个Docker Engine的Swarm模式,在集群中部署应用程序服务。2. 去 中心化设计Swarm角色分为Manager和Worker节点,Manager节点故障不影响应用使用。3. 扩容缩容可以声明每个服务运行的容器数量,通过添加或删除容器数自动调整期望的状态。4. 期望 状态 协调Swarm Manager节点不断监视集群状态,并调整当前状态与期望状态之间的差异。5. 多 主机网络可以为服务指定overlay网络。当初始化或更新应用程序时,Swarm manager会自动为overlay网络上的容器分配IP地址。6. 服务 发现Swarm manager节点为集群中的每个服务分配唯一的DNS记录和负载均衡VIP。可以通过Swarm内置的DNS服务器查询集群中每个运行的容器。7. 负载均衡实现服务副本负载均衡,提供入口访问。8. 安全 传输Swarm中的每个节点使用TLS相互验证和加密,确保安全的其他节点通信。9. 滚动 更新升级时,逐步将应用服务更新到节点,如果出现问题,可以将任务回滚到先前版本。
使用 Swarm 前提:Docker版本1.12+集群节点之间保证TCP 2377(集群管理)、TCP/UDP 7946(容器网络发现)和UDP 4789(Overlay网络)端口通信节点规划:操作系统:CentOS7.4_x64172.17.100.11 node01 (manager)172.17.100.12 node02 (worker01)172.17.100.13 node03 (worker02)
172.17.100.11 node01 (manager)---docker swarm init --advertise-addr 172.17.100.11---docker swarm join --token SWMTKN-1-09h3c5ehmupa172t0wznc8orvc6y3qoujjpee9mwte06nbnfof-68r586okdnkoo1xusq0z3f8p3 172.17.100.11:2377

172.17.100.12 node02 (worker01)----docker swarm join --token SWMTKN-1-09h3c5ehmupa172t0wznc8orvc6y3qoujjpee9mwte06nbnfof-68r586okdnkoo1xusq0z3f8p3 172.17.100.11:2377----

172.17.100.13 node03 (worker02)----docker swarm join --token SWMTKN-1-09h3c5ehmupa172t0wznc8orvc6y3qoujjpee9mwte06nbnfof-68r586okdnkoo1xusq0z3f8p3 172.17.100.11:2377----

查看swarm的集群manager:docker node ls

docker node --help

docker service create --replicas 1 --name hello busybox ping www.baidu.com

docker service --helpcreate 创建一个容器的服务inspect 列出创建容器服务器的详细信息logs 列出创建容器当中正在运行的服务器ls 查看当前的容器的信息主要是副本数ps 查看当前集群中跑的容器信息rm 删除当中的容器服务rollback 回滚到上一个配置scale 调整容器服务的副本数update 更新服务

# 创建服务docker service create --replicas 1 --name hello busybox# 显示服务详细信息docker service inspect --pretty hello # 易于阅读显示docker service inspect hello # json格式返回# 扩展服务实例数docker service scale hello=3# 查看服务任务docker service lsdocker service ps hellodocker service ps -f 'desired-state=running' hello# 滚动更新服务docker service create \--replicas 3 \--name redis \--update-delay 10s \redis:3.0.6docker service update --image redis:3.0.7 redis# 创建服务时设定更新策略docker service create \--name my_web \--replicas 10 \--update-delay 10s \--update-parallelism 2 \--update-failure-action continue \nginx:1.12# 创建服务时设定回滚策略docker service create \--name my_web \--replicas 10 \--rollback-parallelism 2 \--rollback-monitor 20s \--rollback-max-failure-ratio .2 \nginx:1.12# 服务更新docker service update --image nginx:1.13 my_web# 手动回滚docker service update --rollback my_web
docker service create --replicas 1 --name hello busybox ping www.baidu.com



修改swarm 的集群的副本数docker service scale hello=3


滚动更新服务docker service create \--replicas 3 \--name redis \--update-delay 10s \redis:3.0.6


更新底层的镜像:docker service update --image redis:3.0.7 redis


回滚底层镜像docker service update --rollback redis

Volume# 创建数据卷docker service create \--mount type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH> \--name myservice \<IMAGE># 查看数据卷详细信息docker volume inspect <VOLUME-NAME>
docker service create \--mount type=volume,src=nginx-vol,dst=/usr/share/nginx/html/ \--name my_nginx \nginx---docker servcie scale my_nginx=3docker service ps my_nginxdocker ps -adocker exec -ti 3f3cb48ef09d bash





volume 卷的使用docker volume lsdocker volume inspect nginx-volcd /var/lib/docker/volume/nginx-vol/_data/ls -ld *



Bind Mounts# 读写挂载docker service create \--mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH> \--name myservice \<IMAGE># 只读挂载docker service create \--mount type=bind,src=<HOST-PATH>,dst=<CONTAINER-PATH>,ro \--name myservice \<IMAGE>
mkdir /app/wwwroot/docker service create \--mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html \--name bind-nginx \nginx



docker service create \--mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume-opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"'--name myservice \<IMAGE>
172.17.100.13:yum install -y nfs*


172.17.100.11----showmount -e 172.17.100.13

docker service create --mount 'type=volume,src=nfs-vol,dst=/usr/share/nginx/html,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/opt/container_data,"volume-opt=o=addr=172.17.100.13,vers=4,soft,timeo=180,bg,tcp,rw"' --name nginx-nfs nginx

docker service scale nginx-nfs=3

