一、Docker swarm
1. docker swarm简介
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
2. docker swarm的优点
3. docker swarm中的节点分为管理 (manager) 节点和工作 (worker) 节点
其中,任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
二、搭建swarm集群
实验准备:三个节点均搭建docker环境
server1——master(172.25.5.1)
server2——node1(172.25.5.2)
server3——node2(172.25.5.3)
1. 在server1中初始化集群,根据提示将server2和server3加入该集群中
docker swarm init #初始化节点
查看swarm集群节点是否添加成功
docker node ls #查看节点
2. 三个节点同时导入nginx镜像
docker load -i nginx.tar
docker tag nginx:1.16 nginx
docker images
3. server1中创建集群服务,server2和3也会自动开启该服务
docker service create --name web --replicas 3 --publish 80:80 nginx #启动示例数为3
docker service ps web
server2和server3中可以使用【docker ps】命令查看nginx服务是否运行
4.编辑发布文件到容器中
docker ps
echo server1 > index.html
docker cp index.html 73a6692188cc:/usr/share/nginx/html
5. 物理机进行测试
for i in {1..10}; do curl http://172.25.5.1; done
6. 弹性伸缩
docker service scale web=6
三、图形监控界面
1. 导入镜像
2. 设置管理节点的图形监控
docker service create \
--name=viz \
--publish=8080:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
dockersamples/visualizer
【docker ps】命令查看设置是否成功
3. 测试
http://172.25.5.1:8080
关闭某一节点,该节点上运行的容器,会自动平均迁移到其他两个节点上,再次开启该节点,之前迁移的节点并不会立即迁回。
四、docker服务的滚动更新及全局参数的使用
1. 滚动更新服务
docker load -i game2048.tar
docker service update --image game2048 --update-delay 5s --update-parallelism 2 web #延时5s更新,每次更新2个
网页中进行测试
http://172.25.5.1:8080
http://172.25.5.1
2. 全局参数的使用
docker service create --name web --publish 80:80 --mode global game2048
docker ps
测试:
http://172.25.5.1:8080
关闭一个节点,该结点所在容器进程直接关闭,不会进行迁移,开启该节点,会自动添加一个容器进程。
五、以文件方式部署docker容器服务
(一)部署nginx
1. 编写docker-compose.yml文件
mkdir test
vim docker-compose.yml
version: "3.7"
services:
web:
image: nginx:latest #镜像位置
ports:
- "80:80" #端口映射
networks:
- webnet #网络
volumes:
- "webdata:/usr/share/nginx/html" #宿主机与容器之间挂接的物理存储(该目录为容器默认发布目录)
deploy:
replicas: 3 #通过该参数修改容器进程运行的个数
update_config:
parallelism: 2 #最大同步更新的任务数
delay: 10s
restart_policy:
condition: on-failure
visualizer:
image: dockersamples/visualizer:latest
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager] #限制在管理节点上
networks:
webnet:
volumes:
webdata:
2. stack部署
docker stack deploy -c docker-compose.yml example
docker service ps example_web #查看服务
3. 修改配置文件,测试nginx是否部署成功
cd /var/lib/docker/volumes/
cd example_webdata/_data/
vim index.html
4. 测试
curl 172.25.5.1
(二)docker-compose文件限制内存和cpu的使用
1. 编辑docker-compose.yml文件
version: "3.7"
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- webnet
volumes:
- "webdata:/usr/share/nginx/html"
deploy:
replicas: 6 #容器进程数
resources:
limits:
cpus: "0.2" #限制cpu利用率为20%
memory: 300M #限制物理内存为300M
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
visualizer:
image: dockersamples/visualizer:latest
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
webnet:
volumes:
webdata:
2. stack进行部署
docker stack deploy -c docker-compose.yml example
3. 查看docker进程的cpu和内存限制是否更改
cd /sys/fs/cgroup/cpu
cat cpu.cfs_quota_us
cd /sys/fs/cgroup/memory
六、docker图形化管理服务
1. 导入镜像
docker load -i portainer-agent.tar
docker load -i portainer.tar
scp portainer-agent.tar server2:
scp portainer-agent.tar server3:
scp portainer-agent.tar server4:
2. stack部署服务
docker stack deploy -c portainer-agent-stack.yml portainer
docker stack services portainer
netstat -antlp
3.测试
http://172.25.5.1:9000