代码:https://gitee.com/wushusong/wss-demo.git / dev-swarm
环境:两台服务器:192.168.1.111(主节点)、192.168.1.240(从节点)
详见前一章节:Docker集群管理-swarm
1、制作镜像
1、编写DockerFile
# 基础镜像:jdk8的镜像,需要提前拉取jdk8的镜像,也可以使用其他地方已经做好的jdk8的docker镜像,放到本机在安装
FROM 9f04bbc44406
# 指定工作目录
VOLUME /usr/local/java/wss-demo
# 复制主机jar包至镜像内,复制的目录需放置在 Dockerfile 文件同级目录下
ADD ./target/wss-demo-0.0.1-SNAPSHOT.jar app.jar
# 安装时区数据包
RUN apt-get update && apt-get install -y tzdata
ENV TZ=Asia/Shanghai TIME_ZONE="Asia/Shanghai"
# 容器启动执行命令
ENTRYPOINT ["java","-Dfile.encoding=utf-8","-Xms512m","-Xmx1024m","-jar", "app.jar" , "--server.port=31012"]
# 对外暴露的端口号
EXPOSE 31022
FROM :这里需要指定jdk8的镜像


2、上传服务器
这里使用idea通过ssh连接服务器192.168.1.111

点击运行DockerFile

到111上查看镜像情况

2、镜像上传远程镜像库,这里使用阿里云镜像仓库,也可以自己搭建docker镜像仓库(Harbor)
前提是登录了阿里云
docker login --username=roronoazoro1995 registry.cn-hongkong.aliyuncs.com1、镜像打包:
docker tag 1d2203659903 registry.cn-hongkong.aliyuncs.com/wushusong/jm-cloud:wss-demo2、镜像推送
docker push registry.cn-hongkong.aliyuncs.com/wushusong/jm-cloud:wss-demo
3、编写docker-compose
这里创建一个网络,给该服务单独使用
docker network create --driver bridge --subnet 172.20.0.0/16 --gateway 172.20.0.1 --attachable --scope=swarm cloud_net_swarm注意,这里要指定--scope=swarm
创建一个文件夹名称,跟项目名称相同,名创建文件docker-compose-swarm.yml
指定刚刚创建的网络:cloud_net_swarm
内容如下
version: '3'
services:
wss-demo:
image: registry.cn-hongkong.aliyuncs.com/wushusong/jm-cloud:wss-demo
restart: always
ports:
- 31022:31012
#volumes:
# - /usr/local/java/cloud/logs/:/script/logs/
environment:
- TZ=Asia/Shanghai
networks: # 设置网络模式为 host(使用宿主机网络)
- cloud_net_swarm # 下面配置的网络名称
entrypoint:
- "java"
- "-Dfile.encoding=utf-8"
- "-Xms512m"
- "-Xmx1024m"
- "-jar"
- "app.jar"
- "--server.port=31012"
deploy:
mode: replicated
replicas: 2 # 两个副本
# placement:
# constraints: [node.role != manager]
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
update_config:
parallelism: 1
delay: 10s
networks:
cloud_net_swarm: # 网络名称
# driver: bridge
external: true # 使用现有网络
# name: cloud_net_default

启动
docker stack deploy -c docker-compose-swarm.yml --with-registry-auth wss--with-registry-auth:一定要要, 会自动把manage节点的远程仓库认证信息,带到其他子节点中

在192.168.1..240上面查看服务部署情况

postman测试

