0
点赞
收藏
分享

微信扫一扫

简单使用docker stack /swarm 替代docker-compose进行部署

代码敲到深夜 2021-09-23 阅读 67
日记本

PS:小白最近刚使用docker进行tomcat的项目部署,后面学习使用docker-compose,再后面看到docker stack启动docker-compose,技术迭代的过程真的很有意思,下面讲述一下具体我的tomcat项目部署的配置、方法和思路(个人的部署方案,等学到其他技术打算再升级部署方案)。

1、项目分析

(1)我的tomcat项目有配置文件,首先我要把配置文件使用docker config create命令(从文件或STDIN创建配置文件作为内容)创建配置文件在docker swarm 容器管理中使用,避免每次上传都要修改配置文件
(2)我的tomcat项目有上传目录,我必须要把上传目录挂载到外部使用,不然部署新版本重新启动容器我的上传文件都被清除了
(3)数据库也要挂载到外部文件夹,也是同样的问题,重新部署mysql的时候避免数据丢失

搞清楚我的目的后,开始部署工作

2、首先我们先把war包打成tomcat启动的镜像(安装docker很简单,上网查一下很多的)

docker pull tomcat  //默认下载最新的tomcat版本,你也可以指定tomcat版本

  • 我的文件目录

  • 创建打包的工具类 build-image.sh
#!/bin/bash
# usage:
# ./build-image 
mkdir $1 //创建一个版本文件夹
mv $2 $1/   //把war包移到版本文件夹下保存起来作数据备份,有问题可以翻出来检查
cp Dockerfile $1/    //把外部的Dockerfile移进来作数据备份,有问题可以翻出来检查
cd $1  //进入版本文件夹
unzip $2 -d blackberry  //解压war包
docker build -t black-web:$1 .    //然后在文件夹里面进行镜像构建

启动的脚本命令先赋予脚本权限

chmod u+x build-image.sh

再执行命令

./build-image.sh 1.0.1 blackberry.war (代表脚本的2个参数,1.0.1代表版本号,可以是1.0.2,1.0.3,blackberry.war代表我的项目war包)

主要是以后怕有问题可以翻看资料,所以自己做了数据备份

  • 创建Dockerfile
FROM tomcat:last
RUN rm -rf /usr/local/tomcat/webapps  //清除容器webapps的所有文件
RUN mkdir -p /usr/local/tomcat/webapps/blackberry //创建新的文件夹
COPY ./blackberry /usr/local/tomcat/webapps/blackberry //将宿主机的war解压出来的文件拷贝到容器中

3、编辑docker-compose.yml

version: '3.7'

services:

  fl_mysql:
    restart: always
    image: mysql:5.7.22
    ports:
      - 33306:3306   //自己使用的开放外部端口测试用,正式上线环境建议开个白名单,就不要暴露端口了
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root
    command:
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
      --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:
      - ./fl-mysql:/var/lib/mysql  //挂载本地目录
      - /etc/localtime:/etc/localtime:ro

  fl_tomcat:
    image: black-web:1.0.1  //刚刚上面打包的镜像
    configs:
      - source: black-config   //这个要使用docker config create 创建外部配置文件,下面有介绍
        target: /usr/local/tomcat/webapps/blackberry/WEB-INF/classes/config/application.yml  //替换掉配置文件
    depends_on:
      - fl_mysql  //代表先运行mysql镜像
    volumes:
      - black-web:/usr/local/tomcat/webapps/blackberry  //将项目挂载到外部文件目录,下面有介绍
      - /home/docker/black-userfiles:/usr/local/tomcat/webapps/blackberry/userfiles  //将上传的文件夹挂载到外部目录
      - /etc/localtime:/etc/localtime:ro

  nginx:
    image: nginx
    depends_on:
      - fl_tomcat
    ports:
      - 8773:8773
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf  //将nginx.conf挂载到外部目录
      - ./nginx/conf.d:/etc/nginx/conf.d //将conf.d 挂载到外部目录
      - ./nginx/www:/www //将www 挂载到外部目录,自己的目录结构,你想怎样挂载你有你的想法
      - /etc/localtime:/etc/localtime:ro

configs:
  black-config:
    external: true

volumes:
  black-web:
    external: true

  • docker config create创建配置文件


主要在docker swarm 容器管理中使用

docker swarm init
docker config create black-config /home/docker/black-config/application.yml 
  • docker volume create black-web

命令创建目录,默认路径在/var/lib/docker/volumes/black-web/_data",可以自行查看

  • nginx配置我只修改了nginx/conf.d的default.conf
server {
  listen  8773;  //监听8773端口
  server_name fl_tomcat; 

  location /blackberry {
    proxy_pass    http://fl_tomcat:8080/blackberry;   //容器名称:端口号/包名称
    proxy_set_header  Host $host:8773;  /
    proxy_set_header  X-Real-IP $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Client-Verify SUCCESS;
    proxy_set_header  X-Client-DN $ssl_client_s_dn;
    proxy_set_header  X-SSL-Subject $ssl_client_s_dn;
    proxy_set_header  X-SSL-Issuer $ssl_client_i_dn;
  }
  
}

  • MYSQL启动后你要导入自己的mysql文件,在重启一下服务,数据库导入没有写
  • 具体的挂载目录

4、单机版使用docker stack

  • 在swarm manager节点操作
docker swarm init 

  • 在manager节点部署服务:
docker stack deploy black --compose-file=docker-compose.yml //docker-compose.yml所处的路径,我运行这命令在它的当前目录

测试了一下启动没问题<_>

4、更新war包版本

  • 更新镜像的工具类 deploy-release.sh
#!/bin/bash

docker service update --image black-web:$1 black_black-web

例如:

./deploy-release.sh 1.0.1   //传入版本号更新  1.0.1是镜像的版本
举报

相关推荐

0 条评论