大概部署的思路在上篇文章已經(jīng)介紹清楚,本文的目的特別簡單,只有兩件事情需要做:
- 1.制作鏡像。
- 2.推送鏡像。
上文說到,基于maven的java項(xiàng)目的推送和vue的推送是有差別的,那我們也就分為兩部分來說明!
上文也說到,原理都是一樣的,都是基于docker build命令來制作的,所以大家在閱讀這篇文章的時(shí)候有必要了解以下docker build這個(gè)命令,以及Dockerfile。這里不再贅述,網(wǎng)上資料很多,自行查閱即可!
1.阿里云容器服務(wù)配置
1.1 創(chuàng)建命名空間

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

同時(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)配置信息即可

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)于如何查找上面的命令


