赞
踩
· 软件更新发布及部署低效,过程繁琐且需要人工介入
· 环境一致性难以保证
· 不同环境之间迁移成本太高
- # 基于java镜像创建新镜像
- FROM java:8
-
- # 作者
- MAINTAINER 杨汉奇
-
- #在容器内创建创建目录,创建的目录之后需要挂载到宿主机外,实现持久化
- RUN mkdir -p /demo/data /demo/logs /demo/config /demo/avatar/custom /demo/jar/config
-
- #将jar包添加到容器中并更名为demo.jar
- ADD demo.jar /demo/jar/demo.jar
-
- # 启动容器运行的命令
- ENTRYPOINT ["nohup","java","-jar","-Dspring.config.location=/demo/jar/config/application.properties","-Duser.timezone=GMT+8","/demo/jar/demo.jar","&"]
-
- #容器对外暴露的端口,比如运行tomcat是8080,则暴露8080端口
- EXPOSE 8080
1,编写dockerFile文件,文件内容如上
2,在jar所在目录运行一下命令构建镜像
docker build -t (dockerFile路径) (镜像名称:版本号) . 例如:docker build -t /demo/dockerFile demo:test . [不要缺少最后的点号]
最好构建的镜像可以push到远程仓库,避免部署人员重新进行繁琐的构建镜像
- version: '3'
-
-
- services:
- #jar包镜像
- demo:
- image: demo:test
- ports:
- - 8080:8080
- networks:
- #加入的网络名称
- - demo_netword
- tty: true
- command:
- - /bin/bash
- - -c
- - |
- tail -f /etc/profile
- volumes:
- #静态资源挂载到宿主机
- - /home/demo/data:/demo/avatar/custom
- #系统日志挂载到宿主机
- - /home/demo/logs:/demo/logs
- #启动配置,启动会运行/home/demo/jar/config的application.properties文件
- - /home/demo/config:/demo/jar/config
- environment:
- #设置环境变量
- - BASE_HOST=xxx.xxxx
- deploy:
- #构建多少个容器,(分布式:访问都是同个IP,docker实现自动分配)
- replicas: 3
- placement:
- #指定在管理节点部署
- constraints: [node.role == manager]
- depends_on:
- - demo_redis
- - demo_mysql
- - demo_rabbitmq
-
- #nginx服务
- demo_nginx:
- image: nginx:1.19.2
- ports:
- - 80:80
- networks:
- - demo_netword
- volumes:
- #指定读取的nginx.conf配置
- - /home/demo/nginx/nginx.conf:/etc/nginx/nginx.conf
- #读取静态文件的目录挂载
- - /home/demo/data:/var/www/html/upload
- deploy:
- placement:
- #指定在管理节点部署
- constraints: [node.role == manager]
- depends_on:
- - demo
-
- #redis服务
- demo_redis:
- image: redis:5.0
- ports:
- - 6379:6379
- networks:
- - demo_netword
- #设置密码123456,开启持久化,并设置重启数据不丢失
- command: redis-server --requirepass 123456 --appendonly yes --save ""
- volumes:
- #上面开启了持久化,只是在容器内持久化,需要挂载到宿主机才能实现真正持久化
- - /home/demo/redis/data:/data
- deploy:
- placement:
- #指定在管理节点部署
- constraints: [node.role == manager]
-
- #mysql服务
- demo_mysql:
- image: mysql:5.7
- ports:
- - 3306:3306
- networks:
- - demo_netword
- environment:
- #最好使用此设定时区,其它静像也可以使用
- - TZ=CST-8
- - MYSQL_ROOT_PASSWORD=123456
- #可以加--default-time-zone='+8:00'设定时区
- command: --character-set-server=utf8
- --collation-server=utf8_general_ci
- --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
- volumes:
- #挂载mysql文件目录,实现持久化
- - /home/demo/mysql:/var/lib/mysql
- deploy:
- placement:
- constraints: [node.role == manager]
-
- #rabbitmq服务
- demo_rabbitmq:
- image: rabbitmq:3.7.7-management
- ports:
- - 4369:4369
- - 5671:5671
- - 5672:5672
- - 15671:15671
- - 15672:15672
- - 25672:25672
- networks:
- - demo_netword
- volumes:
- #本地文件目录
- - /home/demo/rabbitmq/pwd:/var/lib/rabbitmq
- environment:
- - RABBITMQ_DEFAULT_VHOST=my_vhost
- - RABBITMQ_DEFAULT_USER=test
- - RABBITMQ_DEFAULT_PASS=test
- deploy:
- placement:
- constraints: [node.role == manager]
-
-
- networks:
- #指定加入的docker网络
- demo_netword:
- external: true
-
-
1,编写好docker-stack.yml文件
2,执行以下命令运行运行docker容器
docker stack deploy -c (yml文件) (名称) 例如:docker stack deploy -c docker-stack.yml mydockerdemo
查看docker集群运行情况
docker service ls
停止某个docker集群
docker stack rm mydockerdemo
指定某个镜像更新到某个容器
docker service update --image demo:test1 mydockerdemo_demo (如果名字不清楚,可以通过docker service ls查看需要更新容器的名字)
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。