利用Docker实现后台项目模板化配置部署

Docker基础知识介绍:

Docker及图形化管理UI Portainer的搭建

Dockerfile的使用以及使用Maven工程TCP构建远程镜像

一、Docker自定义模板介绍

进入Portainer管理页面,可以看到右侧菜单App Templates里已经有大量现成的一些常用框架模板,例如Ngnix、Redis搭建模板

image

配置模板的目的就是为了,以最直观的UI展现方式配置一些关键变量来实现一些复杂逻辑,达到快速构建、傻瓜式构建的目的!

点击App Templates菜单里的Add template来新建模板

image
image

下面我们来看怎么自定义模板变量,承继上一节里的Dokcerfile内容,来关联介绍

#下载maven jdk linux环境
FROM maven:3.6.1-jdk-8-alpine
#标注作者信息
MAINTAINER guohanlin@xyz.cn
#配置linux服务器需要的环境
RUN apk add --no-cache git bash openssh-client tzdata
#指定到工作目录
WORKDIR /usr/src/app/ins-mobile
#配置环境
ENV TZ Asia/Shanghai
#定义工程远程地址
ARG GIT_URL
ENV GIT_URL $GIT_URL
#定义分支
ARG BRANCH
ENV BRANCH $BRANCH
#工程Java VM 启动参数
ARG VM_OPTIONS
ENV VM_OPTIONS $VM_OPTIONS
#迁移启动脚本至工作目录
ADD ${RUN_SHELL} /usr/src/app/ins-mobile
#开始运行启动脚本
CMD [ "bash", "ins-mobile-run.sh" ]
# replace this with your application's default port
EXPOSE 9080

上文中的ARG GIT_URLARG BRANCHARG VM_OPTIONS都对应以下模板变量配置

image

可以看出模板变量可以配置3种形式,一个是预设变量、填写变量、自选择变量

image
image

二、详细介绍如何部署后台项目

首先关联上一篇文章Maven工程,可以看到根目录除了定义Dockerfile以外还定义了一个后台服务启动脚本,Dockerfile主要负责容器环境的搭建、后台启动脚本都定义在ins-mobile-run.sh文件中

image

从上文Dockerfile脚本中可以看到这么2句话

#迁移启动脚本至工作目录
ADD ${RUN_SHELL} /usr/src/app/ins-mobile
#开始运行启动脚本
CMD [ "bash", "ins-mobile-run.sh" ]

其中${RUN_SHELL}对应pom.xml中dockerfile-maven-plugin docker自动部署插件定义的变量

<configuration>
    <repository>${project.artifactId}</repository>
    <contextDirectory>${project.basedir}</contextDirectory>
    <buildArgs>
        <RUN_SHELL>${project.basedir}/ins-mobile-run.sh</RUN_SHELL>
    </buildArgs>
</configuration>

下面我们来查看ins-mobile-run.sh文件中的内容

#!/bin/bash
echo "GIT_URL:${GIT_URL}"
echo "BRANCH:${BRANCH}"
echo "VM_OPTIONS:${VM_OPTIONS}"
#设置Maven堆栈大小
export MAVEN_OPTS="-Xmx1024m"
echo "MAVEN_OPTS:${MAVEN_OPTS}"

OUTPUT_ROOT=/usr/src/app/ins-mobile/$BRANCH/modules/aoede/target/ins-mobile-aoede-1.0.0
BOOTSTRAPCLASS="cn.xyz.server.bootstrap.EmbedTomcatAoedeWebServer"

if [ ! -d $BRANCH ]; then
  #拉取代码
  git clone -b $BRANCH $GIT_URL $BRANCH
  #编译项目
  cd $BRANCH && mvn clean install package -Dmaven.test.skip=true
  #启动应用
  java ${VM_OPTIONS} -classpath ${OUTPUT_ROOT}/WEB-INF/classes:${OUTPUT_ROOT}/WEB-INF/lib/* ${BOOTSTRAPCLASS}
else
  #拉取代码
  cd $BRANCH && git pull
  #编译项目
  cd $BRANCH && mvn clean install package -Dmaven.test.skip=true
  #启动应用
  java ${VM_OPTIONS} -classpath ${OUTPUT_ROOT}/WEB-INF/classes:${OUTPUT_ROOT}/WEB-INF/lib/* ${BOOTSTRAPCLASS}
fi

至此Docker后台项目构建镜像脚本和后台项目启动脚本已经全部介绍完毕

按照上篇文章的介绍的使用Docker部署插件构建远程Docker后端服务启动镜像

image
image

然后配置后端服务启动模板,填写刚刚构建的镜像,即可通过模板一键启动后端服务

image
image
image

三、后端启动服务脚本优化

我们都知道后端项目一般都依赖大量的Maven远程仓库,并且如果后端项目特别庞大,例如我们的Apollo项目接近1G,那么每次都去执行拉取仓库和拉取Maven远程仓库无疑是致命的!起个后台服务你给我整30分钟,还是每次都要30分钟!等得花都谢了!

为了解决上述问题怎么办?很简单,实现容器目录的挂载!

(1)使用Portainer创建一个虚拟Volume

image
image

(2)在使用模板创建后台服务容器时,容器工作目录挂载这个虚拟磁盘

image

四、搭建File Browser管理虚拟磁盘

(1)下载filebrowser镜像

docker pull filebrowser/filebrowser

(2)挂载刚刚新建虚拟Volume到容器srv目录并指定端口运行容器

docker run -d -v public_volume:/srv -p 9001:80 filebrowser/filebrowser

(3)配置Ngnix,重启服务,使用域名访问

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 80;
        server_name docker.xyz.cn;
        location / {
            proxy_pass http://192.168.27.180:9000;
        }
    }
    
    server {
        listen 80;
        server_name filebrowser.xyz.cn;
        location / {
            proxy_pass http://192.168.27.180:9001;
        }
    }
}
image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容