部署docker swarm
#时区
sudo timedatectl set-timezone Asia/Shanghai
timedatectl status
#启用网络时间同步
sudo timedatectl set-ntp true
初始化 Swarm 模式(因为您使用了 deploy 配置)
bash
# 初始化 Docker Swarm
docker swarm init
# 如果显示已初始化,可以查看状态
docker node ls
创建必要的网络
# 创建 overlay 网络(如果不存在)
docker network create --driver overlay --attachable app-network
# 查看网络
docker network ls
# 1. 先构建所有镜像
echo "=== 构建 Python 镜像 ==="
cd /data/app/python
docker build -t myapp-python:latest .
echo "=== 构建 Vue 镜像 ==="
cd /data/app/vue
VERSION=$(date +%Y%m%d_%H%M%S)
docker build -t myapp-vue:${VERSION} .
echo "=== 构建 Nginx 镜像 ==="
cd /data/nginx
docker build -t myapp-nginx:latest .
部署应用堆栈
# 进入 compose 文件所在目录
cd /data
# 部署堆栈(堆栈名可以自定义,如 myapp)
ex port $(grep -v '^#' .env | xargs)
docker stack deploy -c docker-compose.yml myapp
#滚动更新
清理
#docker stack rm myapp #在没部署成功可以清理掉
# 检查是否完全清理
docker service ls | grep myapp
docker ps | grep myapp
export $(grep -v '^#' .env | xargs)
docker stack deploy -c docker-compose.yml myapp
步骤4:查看部署状态
# 查看所有服务
docker service ls
# 查看具体服务详情
docker service ps myapp_python-app
docker service ps myapp_redis
docker service ps myapp_vue-app
docker service ps myapp_nginx
# 查看容器状态
docker ps
# 查看日志
docker service logs myapp_python-app -f
docker 镜像
# 创建或修改 Docker daemon 配置
sudo mkdir -p /etc/docker
# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 检查配置是否生效
docker info | grep -A 5 "Registry Mirrors"
#回滚机制
# 自动回滚(配置在 update_config 中)
failure_action: rollback
# 手动回滚到上一版本
docker service update --rollback myapp_python-app
# 回滚到特定版本
docker service update --image myapp-python:20251203_150000 myapp_python-app
查看日志
docker service logs myapp_python-app --tail 50
docker service logs myapp_vue-app --tail 50
docker service logs myapp_nginx --tail 50
完整的多服务器部署流程
# 1. 初始化Swarm集群(管理节点)
docker swarm init --advertise-addr 192.168.1.10
查看加入令牌
#2. 查看管理节点令牌
docker swarm join-token manager
#3. 查看工作节点令牌
docker swarm join-token worker
# 4. 添加工作节点(每台服务器)
docker swarm join --token SWMTKN-xxx 192.168.1.10:2377
#5.添加管理节点(Manager,可选)
docker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
# 6. 创建overlay网络(跨节点通信)
docker network create -d overlay --attachable app-network
# 7. 部署应用(使用stack)
docker stack deploy -c docker-compose.yml myapp
# 8. 查看分布式状态
docker stack ps myapp # 查看所有服务分布
docker service ls # 查看服务状态
docker node ps # 查看节点运行情况
节点管理
#9. 提升节点为 manager
docker node promote <NODE_NAME>
#10. 降级节点为 worker
docker node demote <NODE_NAME>
#11.节点维护模式
docker node update --availability drain <NODE_NAME>
docker node update --availability active <NODE_NAME>
#12. 更新服务配置
docker service update --force myapp_nginx
#13.清理
docker stack rm myapp
- THE END -
最后修改:2025年12月24日
非特殊说明,本博所有文章均为博主原创。