利用Docker實現後臺項目模板化配置部署

Docker基礎知識介紹:java

Docker及圖形化管理UI Portainer的搭建linux

Dockerfile的使用以及使用Maven工程TCP構建遠程鏡像nginx

1、Docker自定義模板介紹

進入Portainer管理頁面,能夠看到右側菜單App Templates裏已經有大量現成的一些經常使用框架模板,例如Ngnix、Redis搭建模板git

配置模板的目的就是爲了,以最直觀的UI展示方式配置一些關鍵變量來實現一些複雜邏輯,達到快速構建、傻瓜式構建的目的!

點擊App Templates菜單裏的Add template來新建模板docker

下面咱們來看怎麼自定義模板變量,承繼上一節裏的Dokcerfile內容,來關聯介紹bootstrap

#下載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都對應如下模板變量配置後端

能夠看出模板變量能夠配置3種形式,一個是預設變量、填寫變量、自選擇變量

2、詳細介紹如何部署後臺項目

首先關聯上一篇文章Maven工程,能夠看到根目錄除了定義Dockerfile之外還定義了一個後臺服務啓動腳本,Dockerfile主要負責容器環境的搭建、後臺啓動腳本都定義在ins-mobile-run.sh文件中bash

從上文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文件中的內容markdown

#!/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後端服務啓動鏡像

而後配置後端服務啓動模板,填寫剛剛構建的鏡像,便可經過模板一鍵啓動後端服務

3、後端啓動服務腳本優化

咱們都知道後端項目通常都依賴大量的Maven遠程倉庫,而且若是後端項目特別龐大,例如咱們的Apollo項目接近1G,那麼每次都去執行拉取倉庫和拉取Maven遠程倉庫無疑是致命的!起個後臺服務你給我整30分鐘,仍是每次都要30分鐘!等得花都謝了!

爲了解決上述問題怎麼辦?很簡單,實現容器目錄的掛載!

(1)使用Portainer建立一個虛擬Volume

(2)在使用模板建立後臺服務容器時,容器工做目錄掛載這個虛擬磁盤

4、搭建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;
        }
    }
}
複製代碼

相關文章
相關標籤/搜索