docker swarm容器编排
2022年12月31日大约 3 分钟约 786 字
swarm容器编排
部署swarm
在一台docker上创建manager节点:
docker swarm init --advertise-addr=192.168.42.130 # ip为可被外网访问的本机IP地址
在其他docker上创建work节点:
docker swarm join --token SWMTKN-1-51pnlsczidnwz2rc8mq34pg0h57fa7z2l157ggz50u3463ovla-2rhia5pai25pvz6fttlvw7yli 192.168.42.130:2377
在manage节点上查看:
docker node ls
强制删除集群
# 如果是manager,需要加–force
docker swarm leave --force
docker node rm docker-118
在swarm集群创建容器
在manager节点下创建容器:
# 在swarm集群模式中使用service代替run
docker service create --name demo busybox sh -c "while true; do sleep 3600; done"
# 查看创建的服务(容器)
docker service ls
# 查看具体的服务(容器)
docker service ps demo
# 将demo服务(容器)扩展到5个
docker service scale demo=5
# 将demo服务删除
docker service rm demo
swarm集群的扩展功能:1.会自动分配服务器性能在不同的docker内扩展。2.会自动修补错误确保正常服务数量
在swarm集群部署wordpress
创建overlay网络
docker network create -d overlay demo
docker network ls
在swarm集群中创建服务使用demo网络时,会自动同步网络配置,不需要在其他docker上配置了。
创建mysql服务
docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network demo --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysql
--mount就是-v参数
创建wordpress服务
docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo wordpress
部署wordpress服务后,集群所有IP地址都可以访问
在swarm集群部署wordpress(高级)
>>> vim docker-compose.yml
version: '3'
services:
web:
image: wordpress
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: mysql
WORDPRESS_DB_PASSWORD: root
networks:
- my-network
depends_on:
- mysql
deploy:
mode: replicated # 可以做横向扩展(缺省值)
replicas: 3 # 初始化3个容器
restart_policy: # 重启策略
condition: on-failure
delay: 5s
max_attempts: 3
update_config: # 更新配置
parallelism: 1 # 同时只能有一个容器更新
delay: 10s # 10秒更新一个
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
volumes:
- mysql-data:/var/lib/mysql
networks:
- my-network
deploy:
mode: global # 这个service只有一个容器,不能做横向扩展(scale)
placement:
constraints:
- node.role == manager # 只能部署到manager节点
volumes:
mysql-data:
networks:
my-network:
driver: overlay # 通过swarm部署服务时会在不同机器上分配部署,不能采用bridge网络
在swarm集群中使用docker-compose.yml文件部署使用stack命令:
docker stack deploy wordpress -- compose-file=docker-compose.yml#部署堆栈命名为wordpress
docker stack ls
docker stack ps wordpress # 查看wordpress具体信息
docker stack services wordpress # 查看wordpress的服务
docker stack rm wordpress # 删除wordpress的stack
验证
curl 192.168.205.10:8080
Routing Mesh
Internal网络
容器之间的访问通过overlay网络(通过VIP虚拟IP)
docker secret
# 创建secret
echo "password" | docker secret create my-pw -
docker secret ls
docker service create --secret my-pw -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/my-pw mysql
docker secret rm my-pw # 删除my-pw2秘钥
在stack中使用
>>> vim docker-compose.yml
version: "3"
services:
mysql:
image: mysql
secrets:
- my-pw # 引用secret值
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my-pw # 使用secret值
MYSQL_DATABASE: wordpress
service更新
# 更新镜像
docker service update --image xionglilong/python-flask-demo:2.0 web
# 更新端口
docker service update --publish-rm 8080:5000 --publish-add 8088:5000 web
使用stack时,直接修改docker-compose文件内容然后重新部署