一、部署前后分离
使用你自己的自定义镜像
部署多个副本
所有副本使用相同的配置和逻辑
Nginx 做反向代理统一入口
外部访问形式如:
http://your-domain/api/xxx
1.1 建立私库
镜像已构建并推送到可访问的镜像仓库
启动 Docker Registry 容器
docker run -d -p 5000:5000 --restart=always --name registry registry:2
这会在本地启动一个私有的 Docker Registry,并监听 5000 端口。
配置 HTTPS 或者信任不安全的 Registry,可以通过以下方式让 Docker 客户端信任这个不安全的 Registry:
每个机器都要编辑 /etc/docker/daemon.json
文件(如果没有则创建),添加如下内容:
{"insecure-registries" : ["【ip】:5000"]
}
每个机器都要,然后重启 Docker 服务:
sudo systemctl restart docker
管理机上将 my-java 并推送镜像到 Docker Registry
docker tag my-java [ip]:5000/my-backend:1.0
管理机将镜像上传到 Docker Registry
docker push [ip]:5000/my-backend:1.0
1.2 下载镜像
在其他工作机上下载镜像
docker pull [镜像私库ip]:5000/my-backend:1.0
1.3 创建覆盖 network
这个要在主节点上创建
docker network create --driver overlay --attachable app_network
1.4 部署服务
主节点上部署
docker service create \--name backend-api \--network app_network \--replicas 3 \192.168.107.157:5000/my-backend:1.0
创建 Nginx 配置文件
mkdir /testcd /testvim default.confupstream backend_api {server backend-api:8081;
}server {listen 80;server_name localhost;location / {root /usr/share/nginx/html;index index.html index.htm;try_files $uri $uri/ =404;}location ~ ^/api/(.*)$ {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://backend_api;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_redirect off;}
}
注意:
backend-api
是你上面创建的服务名称请求
/api/xxx
会被转发到任意一个backend-api
的副本上
1.5 启动 Nginx 服务
manager添加标签并进行节点更新
docker node update --label-add role=lb manager注释:
标签role
值为lb
根据标签指定部署
docker service create \--name my-nginx \--network app_network \--publish 80:80 \--mount type=bind,source=/test/default.conf,target=/etc/nginx/conf.d/default.conf \--replicas 1 \--constraint 'node.labels.role == lb' \nginx:latest注释:
constraint 指定部署到标签值为lb的机器
replicas 运行一台机器
mount 运行指定文件
测试访问
curl http://localhost/api/getMsg
来访问你的后端服务。请求会由 Nginx 转发到任意一个 backend-api
副本上,实现负载均衡。
1.6 更新服务
如果你更新了镜像,可以这样滚动更新:
docker service update \--image 【镜像名】:【镜像版本】 \--update-parallelism 2 \--update-delay 10s \服务名注释:--update-parallelism 2 一次更新两个服务
--update-delay 10s 更新一次休息10秒
如果后台压力过大可以多增加几个后台服务
-- 将服务增加10个
docker service update \--replicas 10 \服务名