创建swarm集群
docker swarm init
加入集群
docker swarm join --token SWMTKN-1-32dwznrteyapyobhd7kdj8g7hrsufgmq4zb0rdepp39wtkoib1-3yz4o906eh5nce0uverycc2ql 172.25.33.1:2377
创建集群使用的网络
docker network create -d overlay webnet
添加nginx镜像(所有主机均需要存在该镜像)
docker load -i nginx.tar
部署nginx服务
如果显示no-such-image@sha…错误,但实际镜像存在,可以使用–no-resolve-image参数解决
(–mode=global)每台主机均只有一个节点,不需要–replicas 3参数,自动同步已存在主机的内容
docker service create --name web --network webnet --publish 80:80 --replicas 3 nginx:1.16
集群扩展
docker service scale web=6
复制主文件(所有节点都需要)
docker cp index.html web.1.mpt1x2u1elh3zkw165bbtg4n5:/usr/share/nginx/html
进行访问测试(负载均衡)
添加swarm集群监控
下载得到文件
docker load -i visualizer.tar
执行以下命令
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 service scale web=6
导入一个新的镜像
docker load -i game2048.tar
每隔五秒更新,每次更新5个机子,是为了防止在更新过程中出现问题即使终止并且可以版本回退
docker service update --image game2048 --update-delay 5s --update-parallelism 5 web
docker ps -aq | wc -l
以配置文件方式执行
version: "3.7"
services:
web:
image: nginx:latest
ports:
- "80:80"
networks:
- webnet
volumes:
- "webdata:/usr/share/nginx/html"
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
visualizer:
image: dockersamples/visualizer:stable
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:
执行命令,加载服务
docker stack deploy -c docker-compose.yml example
Portainer可视化界面
服务端
docker load -i portainer.tar
docker load -i portainer-agent.tar
docker stack deploy --compose-file=portainer-agent-stack.yml portainer
文件内容
version: '3.2'
services:
agent:
image: portainer/agent
environment:
# REQUIRED: Should be equal to the service name prefixed by "tasks." when
# deployed inside an overlay network
AGENT_CLUSTER_ADDR: tasks.agent
# AGENT_PORT: 9001
# LOG_LEVEL: debug
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
networks:
- agent_network
deploy:
mode: global
placement:
constraints: [node.platform.os == linux]
portainer:
image: portainer/portainer
command: -H tcp://tasks.agent:9001 --tlsskipverify
ports:
- "9000:9000"
volumes:
- portainer_data:/data
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
客户端
docker load -i portainer-agent.tar