springboot构建docker集群实践部署

为啥要用Docker?

为啥要用Docker?这要从目前软件行业的痛点来讲起

·  软件更新发布及部署低效,过程繁琐且需要人工介入

·  环境一致性难以保证

·  不同环境之间迁移成本太高

既然docker那么火那么热,那我们不妨学习一下如何构建自己的docker镜像 

通过dockerFile构建自己的镜像

# 基于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到远程仓库,避免部署人员重新进行繁琐的构建镜像

通过docker-stack 方式启动容器

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集群还提供滚动更新机制,生成环境更新用户再也无感了,但是前提是开启了多个容器副本

指定某个镜像更新到某个容器

docker service update --image demo:test1  mydockerdemo_demo      (如果名字不清楚,可以通过docker service ls查看需要更新容器的名字)

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值