@zhangyy
2018-12-27T19:46:57.000000Z
字数 4558
阅读 189
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_x64
172.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 --help
create 创建一个容器的服务
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 ls
docker service ps hello
docker service ps -f 'desired-state=running' hello
# 滚动更新服务
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 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=3
docker service ps my_nginx
docker ps -a
docker exec -ti 3f3cb48ef09d bash
volume 卷的使用
docker volume ls
docker volume inspect nginx-vol
cd /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