本文描述了在Spring Boot項(xiàng)目中通過docker-maven-plugin插件把項(xiàng)目推送到私有docker倉庫中,隨后拉取倉庫中的項(xiàng)目用docker run運(yùn)行項(xiàng)目。作者自行構(gòu)建,質(zhì)量有保證。
1. 用docker-maven-plugin插件推送項(xiàng)目到私服docker
1.1. 構(gòu)建鏡像 v1.0
1、要想使用docker-maven-plugin
,需要在pom.xml
中添加該插件;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<configuration>
<!-- Docker 推送鏡像倉庫地址(由于是推送到本地的docker鏡像倉庫) -->
<pushRegistry>http://localhost:5000</pushRegistry>
<images>
<image>
<!--由于推送到私有鏡像倉庫,鏡像名需要添加倉庫地址(相當(dāng)于告訴去哪里拉取鏡像)-->
<name>localhost:5000/fire-tiny/${project.name}:${project.version}</name>
<!--定義鏡像構(gòu)建行為-->
<build>
<!--定義基礎(chǔ)鏡像-->
<from>java:8</from>
<args>
<!-- jar的名稱,一般配置為gav的av -->
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</args>
<!--定義哪些文件拷貝到容器中-->
<assembly>
<!--定義拷貝到容器的目錄-->
<targetDir>/</targetDir>
<!--只拷貝生成的jar包-->
<descriptorRef>artifact</descriptorRef>
</assembly>
<!--定義容器啟動命令-->
<entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
<!--定義維護(hù)者-->
<maintainer>firefish</maintainer>
<!--使用Dockerfile構(gòu)建時打開-->
<!--<dockerFileDir>${project.basedir}</dockerFileDir>-->
</build>
<!--定義容器啟動行為-->
<run>
<!--設(shè)置容器名,可采用通配符(一般配置為gav的a)-->
<containerNamePattern>${project.artifactId}</containerNamePattern>
<!--設(shè)置端口映射-->
<ports>
<port>8080:8080</port>
</ports>
<!--設(shè)置容器間連接(即容器需要連接mysql,需要外部環(huán)境提供mysql連接)-->
<links>
<link>mysql:db</link>
</links>
</run>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
注:注意下db:3306
spring: datasource: url: jdbc:mysql://db:3306/fire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root
2、我們構(gòu)建鏡像之前需要先將項(xiàng)目打包,然后再構(gòu)建,否則會出錯,直接使用如下命令即可
mvn package docker:build
3、打包完成后就可以在我們的本地上看到這個鏡像了;
# 本地運(yùn)行
[root@linux-local work]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/fire-tiny/fire-tiny-fabric 0.0.1-SNAPSHOT 9b7cf9c38c5d About an hour ago 680MB
4、當(dāng)然我們也可以設(shè)置使用package
命令時直接打包鏡像,修改pom.xml
,在<plugin>
節(jié)點(diǎn)下添加<executions>
配置即可;
是額外添加的;不建立這么做在需要的時候在構(gòu)建docker鏡像就好了
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<executions>
<!--如果想在項(xiàng)目打包時構(gòu)建鏡像添加-->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
1.2. 構(gòu)建鏡像 v2.0
構(gòu)建鏡像 v2.0 是對 v1.0 的升級,原來的缺點(diǎn)有構(gòu)建docker鏡像的步驟和項(xiàng)目的pom代碼耦合嚴(yán)重,不利于后期修改且構(gòu)建過程導(dǎo)致pom文件臃腫肥大。針對這些缺點(diǎn) v2.0 采用 DockerFile方式把docker鏡像的構(gòu)建步驟和Spring Boot項(xiàng)目的pom文件分離。具體步驟如下:
1、新建DockerFile文件
在項(xiàng)目下新建DockerFile文件,內(nèi)容自定義,參考內(nèi)容如下:
# 該鏡像需要依賴的基礎(chǔ)鏡像
FROM java:8
# 拷貝target下的文件到容器中
ARG JAR_FILE
ADD target/${JAR_FILE} /
# 聲明服務(wù)運(yùn)行在8080端口
EXPOSE 8080
# 指定docker容器啟動時運(yùn)行jar包
ENTRYPOINT ["java", "-jar","/fire-tiny-fabric-0.0.1-SNAPSHOT.jar"]
# 指定維護(hù)者的名字
MAINTAINER mike
2、修改pom文件
構(gòu)建docker鏡像的過程現(xiàn)在只有 <dockerFileDir>${project.basedir}</dockerFileDir>
這一行,非常簡潔。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<configuration>
<!-- Docker 推送鏡像倉庫地址(由于是推送到本地的docker鏡像倉庫) -->
<pushRegistry>http://localhost:5000</pushRegistry>
<images>
<image>
<!--由于推送到私有鏡像倉庫,鏡像名需要添加倉庫地址(這個相當(dāng)于告訴別人拉取鏡像的時候去哪里拉取)-->
<name>localhost:5000/fire-tiny/${project.name}:${project.version}</name>
<!--定義鏡像構(gòu)建行為-->
<build>
<!--使用Dockerfile構(gòu)建時打開-->
<dockerFileDir>${project.basedir}</dockerFileDir>
</build>
</image>
</images>
</configuration>
</plugin>
</plugins>
</build>
3、打包、構(gòu)建、查看鏡像
3步一套帶走,比原來簡潔很多看起來也舒服。
# 打包構(gòu)建
mvn clean package docker:build
# 查看本地鏡像
docker images
1.3. 推送到鏡像倉庫
1、指定build和push推送到私有倉庫
2、登錄私有倉庫地址:http://localhost:8280/,查看到剛推送的鏡像
2. 拉取私服docker鏡像運(yùn)行
把鏡像推送到私有倉庫后,就需要拉取鏡像到本地并使用鏡像啦。
1、拉取鏡像到本地
因?yàn)槲覀兪潜镜貥?gòu)建的鏡像再推送到私有倉庫的,需要先把原先構(gòu)建的鏡像刪除,再去私有倉庫拉取鏡像
docker rmi "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
docker pull "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
2、運(yùn)行容器
docker run --rm -d --name fire-tiny-fabric -p 8080:8080 "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
3、訪問下容器其中的一個接口
curl -X GET --header 'Accept: application/json' 'http://localhost:8080/brand/list?pageNum=1&pageSize=3'
但是比較遺憾,不出意外查看docker日志會顯示數(shù)據(jù)庫相關(guān)的報(bào)錯。
這是因?yàn)槲覀冊谇懊娌襟E中構(gòu)建fire-tiny-fabric項(xiàng)目的鏡像時指定了是需要依賴mysql數(shù)據(jù)庫的但是我們在docker run中沒有指定數(shù)據(jù)庫,所以會出現(xiàn)數(shù)據(jù)庫連接方面的錯誤
4、重新運(yùn)行容器
-
如果存在使用docker構(gòu)建的數(shù)據(jù)庫,那通過–link指定mysql數(shù)據(jù)庫:
docker run --rm -d --name fire-tiny-fabric -p 8080:8080 \ --link mysql:db \ "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
注:mysql:db 中的mysql是容器的名稱(–name),后面的db是構(gòu)建fire-tiny-fabric時指定變量。–link的原理就是在/etc/hosts里面添加了一個alias的名稱。
-
如果是本地自己構(gòu)建的數(shù)據(jù)庫,那指定ip地址端口
我們在項(xiàng)目中連接數(shù)據(jù)庫用的是db作為域名,所以只要給容器添加上一個db指向主機(jī)ip地址的域名映射就可以
spring: datasource: url: jdbc:mysql://db:3306/fire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai username: root password: root
# 域名db與主機(jī)ip的映射 docker run --rm -d --name fire-tiny-fabric -p 8080:8080 \ --add-host=db:192.168.1.6 \ "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
# 測試接口
curl -X GET --header 'Accept: application/json' 'http://localhost:8080/brand/list?pageNum=1&pageSize=3'
3. 參考資料
我的文章:《如何查看一個Docker鏡像有哪些版本.md》
我的文章:《Docker設(shè)置國內(nèi)鏡像源.md》
我的文章:《Docker快速入門實(shí)用教程.md》
我的文章:《Docker安裝MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常見服務(wù).md》
我的文章:《Docker安裝Nacos服務(wù).md》
我的文章:《如何修改Docker中的文件.md》
我的文章:《Docker容器間的連接或通信方式.md》
我的文章:《Docker安裝的MySQL如何持久化數(shù)據(jù)庫數(shù)據(jù).md》
我的文章:《制作Docker私有倉庫.md》
我的文章:《使用docker-maven-plugin插件構(gòu)建發(fā)布推鏡像到私有倉庫.md》
我的文章:《解決Docker安裝Elasticsearch后訪問9200端口失敗.md》
傳送門:保姆式Spring5源碼解析
歡迎與作者一起交流技術(shù)和工作生活文章來源:http://www.zghlxwxcb.cn/news/detail-615297.html
聯(lián)系作者文章來源地址http://www.zghlxwxcb.cn/news/detail-615297.html
到了這里,關(guān)于【Docker】使用docker-maven-plugin插件構(gòu)建發(fā)布推鏡像到私有倉庫的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!