基于Docker-Compose 部署前后端分離單體項(xiàng)目(二)

大概部署的思路在上篇文章已經(jīng)介紹清楚,本文的目的特別簡單,只有兩件事情需要做:

  • 1.制作鏡像。
  • 2.推送鏡像。

上文說到,基于maven的java項(xiàng)目的推送和vue的推送是有差別的,那我們也就分為兩部分來說明!
上文也說到,原理都是一樣的,都是基于docker build命令來制作的,所以大家在閱讀這篇文章的時(shí)候有必要了解以下docker build這個(gè)命令,以及Dockerfile。這里不再贅述,網(wǎng)上資料很多,自行查閱即可!

1.阿里云容器服務(wù)配置

1.1 創(chuàng)建命名空間

阿里云容器鏡像服務(wù)創(chuàng)建命名空間

1.2 創(chuàng)建鏡像服務(wù)

阿里云容器鏡像服務(wù)創(chuàng)建鏡像倉庫

同時(shí)也推薦大家在創(chuàng)建鏡像倉庫的時(shí)候,多寫鏡像描述,如果是公開鏡像方便其他人的使用,例如


鏡像描述說明

2. maven項(xiàng)目的打包制作鏡像以及鏡像推送

為什么此處不寫java項(xiàng)目或者springboot項(xiàng)目等,是因?yàn)槲覀冞@里是通過maven插件dockerfile-maven-plugin來進(jìn)行打包推送的.

從上面我們創(chuàng)建的鏡像來看,我們是需要把當(dāng)前鏡像推送到pitaya-vistor這個(gè)鏡像倉庫的。話不多少,先把項(xiàng)目需要配置的貼出來再解釋

  • 先看項(xiàng)目結(jié)構(gòu),以及文件位置


    maven項(xiàng)目結(jié)構(gòu)

    需要修改的只有標(biāo)出來的幾個(gè)文件

  • .dockerignore
  • docker-compose.yml
  • Dockerfile (這個(gè)文件與鏡像制作以及推送無關(guān),放在此處是為了項(xiàng)目更清晰)
  • pom.xml
  • settings.xml (maven的settings.xml配置)

2.1 maven集成docker插件

  • pom.xml添加properties
<properties>
     <!-- 倉庫地址 在阿里云上可以找到 -->
    <docker.registry>registry.cn-shenzhen.aliyuncs.com</docker.registry>

    <!-- 這里指的是阿里云上配置的命名空間名字-->
    <docker.image.prefix>pitaya</docker.image.prefix>
</properties>

上面的配置信息去哪里找,請查看注釋。

  • pom.xml添加plugins
<build>
       
       <!-- 此處需要注意和你的項(xiàng)目名對應(yīng)起來-->
        <finalName>pitaya-vistor</finalName>
        <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.10</version>
                <configuration>
                    <contextDirectory>${project.basedir}</contextDirectory>
                    <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                    <dockerfile>${project.basedir}/Dockerfile</dockerfile>
                    <repository>${docker.registry}/${docker.image.prefix}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

這里有一個(gè)比較重要的事情是,你pom.xml里面的 artifactId 對應(yīng)的名字要和鏡像倉庫的名字對應(yīng)起來,當(dāng)然也可以進(jìn)行修改,

<!--這里${project.artifactId}配置的就是倉庫名字,如果需要修改,請修改這里 -->
<repository>${docker.registry}/${docker.image.prefix}/${project.artifactId}</repository>

2.2 maven的settings.xml文件配置,配置遠(yuǎn)程docker鏡像服務(wù)賬號密碼

 <!-- docker服務(wù)器地址配置 begin -->
   <server>
     
     <!-- 遠(yuǎn)程docker鏡像服務(wù)器地址,如果不同請修改 -->
     <id>registry.cn-shenzhen.aliyuncs.com</id>
     
     <!-- 賬號 -->
     <username>xxx</username>
     
     <!-- 密碼,注意此處的密碼指的不是阿里云登錄密碼,容器鏡像服務(wù)有單獨(dú)密碼 -->
     <password>xxx</password>
   </server>
<!-- docker服務(wù)器地址配置 end -->

2.3 docker配置

  • Dockerfile
#依賴jdk8鏡像構(gòu)建
FROM java:8

# 維護(hù)者信息
MAINTAINER weidan "2182129257@qq.com"

#配置一個(gè)具有持久化功能的目錄
VOLUME /tmp

ARG JAR_FILE

#MYSQL主機(jī)地址
ENV MYSQL_HOST=127.0.0.1

#MYSQL端口
ENV MYSQL_PORT=3306

#MYSQL賬號
ENV MYSQL_USERNAME=root

#MYSQL密碼
ENV MYSQL_PASSWORD=123456

#MYSQL訪問數(shù)據(jù)庫schema
ENV MYSQL_SCHEMA=pitaya-vistor

#REDIS主機(jī)
ENV REDIS_HOST=127.0.0.1

#REDIS端口
ENV REDIS_PORT=6379

#REDIS密碼
ENV REDIS_PASSWORD=""

#REDIS數(shù)據(jù)庫序號
ENV REDIS_DB=0


COPY ${JAR_FILE} app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-Denv.mysql.host=${MYSQL_HOST}", "-Denv.mysql.port=${MYSQL_PORT}","-Denv.mysql.username=${MYSQL_USERNAME}","-Denv.mysql.password=${MYSQL_PASSWORD}","-Denv.mysql.schema=${MYSQL_SCHEMA}","-Denv.redis.host=${REDIS_HOST}","-Denv.redis.port=${REDIS_PORT}","-Denv.redis.password=${REDIS_PASSWORD}","-Denv.redis.database=${REDIS_DB}","-jar","/app.jar"]

說明:
為了實(shí)現(xiàn)在docker運(yùn)行鏡像的時(shí)候可以動態(tài)指定運(yùn)行參數(shù),上面Dockerfile指定了ENV環(huán)境變量,例如mysql的鏈接信息,redis的鏈接信息等,然后在通過java -jar 參數(shù)形式傳遞到j(luò)ava項(xiàng)目。這樣我們的鏡像可以不必寫死我們的需要改變的配置信息。同時(shí)提供一些默認(rèn)值,我們在運(yùn)行的時(shí)候覆蓋我們需要改變的即可!

其實(shí)此處也可以指定一些jvm的參數(shù),方便后期jvm調(diào)優(yōu),如果需要大家可以加上去。

  • .dockerignore
# Ignore everything
**

# Allow files and directories
#這里大家修改為自己的jar的名稱,其實(shí)也就是上面pom配置的finalname屬性即可
!target/xxx.jar
!Dockerfile

這個(gè)文件的作用類似與.gitignore,忽略一些文件不打包到鏡像,這樣即可以減少我們鏡像的大小,又可以降低信息透露出去的風(fēng)險(xiǎn)。

2.4 docker-compose

  • docker-compose.yml
version: '3'
services:
  pitaya_vistor_java: #次數(shù)也修改成為你自己服務(wù)的名字
    image: [Image]:[Tag]
    container_name: [容器名字,可以根據(jù)自己的需要指定]
    networks:
      pitaya_network:
        ipv4_address: 172.2.0.100
    ports:
      - 8080:8080
    environment:
      MYSQL_HOST: 172.2.0.10
      MYSQL_PORT: 3306
      MYSQL_USERNAME: [mysql的賬號]
      MYSQL_PASSWORD: [mysql的密碼]
      MYSQL_SCHEMA:  [鏈接的數(shù)據(jù)庫名]
      REDIS_HOST: 172.2.0.11
      REDIS_PORT: 6379
      REDIS_PASSWORD: [redis的密碼]
      TZ: Asia/Shanghai


networks:
  pitaya_network:
    external: true

該文件主要在部署的時(shí)候使用,在鏡像制作用不到

2.5 打包制作鏡像并且推送到阿里云服務(wù)器

mvn clean install package -Dmaven.test.skip=true dockerfile:build dockerfile:push

配置好之后一條命令搞定,是不是很簡單!
最大的問題在于要注意細(xì)節(jié)以及一些名字的對應(yīng)關(guān)系,配置還是很簡單的!

3.Vue項(xiàng)目制作鏡像

  • 項(xiàng)目結(jié)構(gòu)


    Vue項(xiàng)目結(jié)構(gòu)

    同樣的,先列出來需要修改的文件,在項(xiàng)目根目錄下添加以下幾個(gè)文件即可

  • .dockerignore
  • docker-compose.yml(同樣制作鏡像用不到,部署的時(shí)候再使用)
  • Dockerfile
  • nginx.conf

3.1 docker配置

  • .dockerignore
/node_modules
/public
/screenshots
/src
/README.md
!Dockerfile
  • Dockerfile
# 設(shè)置基礎(chǔ)鏡像
FROM nginx

MAINTAINER "weidan <2182129257@qq.com>"

# 將dist文件中的內(nèi)容復(fù)制到 /usr/share/nginx/html/ 這個(gè)目錄下面
COPY dist/  /usr/share/nginx/html/admin/

#nginx配置文件替換。
COPY nginx.conf /etc/nginx/conf.d/default.conf

#暴露81端口
EXPOSE 81
CMD ["nginx", "-g", "daemon off;"]
  • nginx.conf
server {
    listen 82;
    listen [::]:82;
    charset utf-8;
    access_log off;
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
  
    location = /50x.html {
        root html;
    }
}

3.2 docker-compose

  • docker-compose.yml
version: '3'
services:

  #此處也改為你的容器服務(wù)名字
  pitaya_vistor_java:
    image: [Image]:[tag]
    container_name: [配置你的容器名字]
    environment:
      TZ: Asia/Shanghai
    networks:
      pitaya_network:
        ipv4_address: 172.2.0.202
    ports:
      - 82:82
networks:
  pitaya_network:
    external: true    

3.3 打包上傳鏡像

步驟1:修改api請求路徑

#步驟2:打包
cnpm run build

#步驟3:制作鏡像,注意修改版本號
docker build -t [image,去阿里云鏡像倉庫下找]:[tag版本,例如1.0.0] .

#步驟4:登錄云服務(wù)器(輸入兩次密碼,第一次是電腦密碼,第二次是阿里云容器服務(wù)的密碼)
sudo docker login --username=xxx registry.cn-shenzhen.aliyuncs.com

#步驟5: 推送到云服務(wù)器
sudo docker push [image,去阿里云鏡像倉庫下找]:[tag版本,例如1.0.0] .

4.uni-app 打包h5制作鏡像

其實(shí)原理同vue打包一樣的,只需要修改對應(yīng)配置信息即可

uni-app項(xiàng)目結(jié)構(gòu)

4.1 docker信息配置

  • .dockerignore
/components
/pages
/static
/utils
/App.vue
/main.js
/manifest.json
/pages.json
/uni.scss
!Dockerfile
  • Doclerfile
# 設(shè)置基礎(chǔ)鏡像
FROM nginx

MAINTAINER "weidan <2182129257@qq.com>"

# 將dist文件中的內(nèi)容復(fù)制到 /usr/share/nginx/html/ 這個(gè)目錄下面
COPY unpackage/dist/build/h5/  /usr/share/nginx/html/h5/

#nginx配置文件替換。
COPY nginx.conf /etc/nginx/conf.d/default.conf

#暴露81端口
EXPOSE 81
CMD ["nginx", "-g", "daemon off;"]
  • nginx.conf
server {
    listen 81;
    listen [::]:81;
    charset utf-8;
    access_log off;
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }
  
    location = /50x.html {
        root html;
    }
}

4.2 docker-compse

version: '3'
services:
  
  #修改成你的容器服務(wù)名稱
  pitaya_vistor_java:
    image: [image]:[tag]
    container_name: [修改成你的容器服務(wù)名稱]
    environment:
      TZ: Asia/Shanghai
    networks:
      pitaya_network:
        ipv4_address: 172.2.0.201
    ports:
      - 81:81
networks:
  pitaya_network:
    external: true

4.3 部署上傳


步驟1:修改api請求路徑

#步驟2:打包
請查看dcloud h5打包

#步驟3:制作鏡像,注意修改版本號
docker build -t .....

#步驟4:登錄云服務(wù)器,密碼a開頭(輸入兩次密碼,第一次是電腦密碼,第二次是阿里云容器服務(wù)的密碼)
在鏡像倉庫下可以找到命令

#步驟5: 推送到云服務(wù)器
在鏡像倉庫下可以找到命令

關(guān)于如何查找上面的命令


查找鏡像命令
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容