回顧上一章的整個部署過程:
- 使用"mvn install"進行打包jar
- 將jar移動到與Dockerfile文件相同的文件夾下
- 編寫Dockerfile文件
- 使用"docker build -t="zjg/myservice1docker:v1.1" /Users/enniu1/Desktop/docker-data/file"命令進行打包
- 需要手動指定生成的images的name和tag,以及dockerfile所在的文件夾
- 之后啟動鏡像
本章使用docker-maven-plugin實現。
一、Dockerfile:與上一章完全相同
- 放在了一個單獨的文件夾下src/main/docker/
二、pom.xml
引入docker-maven-plugin插件
1 <plugin> 2 <groupId>com.spotify</groupId> 3 <artifactId>docker-maven-plugin</artifactId> 4 <version>0.4.13</version> 5 <configuration> 6 <!-- ${project.artifactId}:即artifactId,myservice1-docker ${project.version}:即version,1.0-SNAPSHOT --> 7 <imageName>${project.artifactId}:${project.version}</imageName><!-- 鏡像名稱 --> 8 <dockerDirectory>${basedir}/src/main/docker</dockerDirectory><!-- Dockerfile文件地址 --> 9 <resources> 10 <resource> 11 <!-- <targetPath>/</targetPath> --> 12 <!-- ${project.build.directory},項目構建輸出目錄,默認為target/ --> 13 <directory>${project.build.directory}</directory> 14 <!-- ${project.build.directory},打包出來的jar名稱,默認為${project.artifactId}-${project.version} --> 15 <include>${project.build.finalName}.jar</include> 16 </resource> 17 </resources> 18 </configuration> 19 </plugin>
執行下邊的命令后,
- 將dockerDirectory目錄下的內容(這里只有Dockerfile)拷貝到項目的/target/docker/文件夾下(這里就是/target/docker/Dockerfile)
- 將resource中的include下的文件(這里就是${project.build.finalName}.jar)拷貝到/target/docker/文件夾下(這里就是/target/docker/myservice1-docker-1.0-SNAPSHOT.jar)
- 經過上述兩個拷貝,將jar與Dockerfile拷貝到同一個文件夾下了
- 之后進行構建過程
三、運行
mvn clean package docker:build
關鍵日志:
1 [INFO] --- maven-jar-plugin:2.5:jar (default-jar) @ myservice1-docker --- 2 [INFO] Building jar: /Users/enniu1/Desktop/project/myservice1-docker/target/myservice1-docker-1.0-SNAPSHOT.jar 3 [INFO] 4 [INFO] --- spring-boot-maven-plugin:1.3.0.RELEASE:repackage (default) @ myservice1-docker --- 5 [INFO] 6 [INFO] --- docker-maven-plugin:0.4.13:build (default-cli) @ myservice1-docker --- 7 [INFO] Copying /Users/enniu1/Desktop/project/myservice1-docker/target/myservice1-docker-1.0-SNAPSHOT.jar -> /Users/enniu1/Desktop/project/myservice1-docker/target/docker/myservice1-docker-1.0-SNAPSHOT.jar 8 [INFO] Copying /Users/enniu1/Desktop/project/myservice1-docker/src/main/docker/Dockerfile -> /Users/enniu1/Desktop/project/myservice1-docker/target/docker/Dockerfile 9 [INFO] Building image myservice1-docker:1.0-SNAPSHOT 10 Step 1 : FROM zhaojigang/jdk8:c7_j8 11 ---> e7b4cf41e531 12 Step 2 : ADD myservice1-docker-1.0-SNAPSHOT.jar /opt/jar/ 13 ---> 771c895968f6 14 Removing intermediate container 12392489f5a4 15 Step 3 : ENV JAVA_HOME /opt/jdk 16 ---> Running in a81ffe207dfa 17 ---> 7aded06bc5be 18 Removing intermediate container a81ffe207dfa 19 Step 4 : ENV PATH $PATH:$JAVA_HOME/bin 20 ---> Running in b2598b5eee7c 21 ---> 5c282af98ab3 22 Removing intermediate container b2598b5eee7c 23 Step 5 : CMD java -jar /opt/jar/myservice1-docker-1.0-SNAPSHOT.jar 24 ---> Running in 51881dd70cd2 25 ---> 5e86ecc155d8 26 Removing intermediate container 51881dd70cd2 27 Successfully built 5e86ecc155d8
說明:
- maven-jar-plugin進行package
- spring-boot-maven-plugin進行repackage
- 將jar和Dockerfile拷貝到同一個目錄(target/docker/)
- 執行Dockerfile進行build
四、查看鏡像
- docker images
1 REPOSITORY TAG IMAGE ID CREATED SIZE 2 myservice1-docker 1.0-SNAPSHOT 5e86ecc155d8 21 seconds ago 575.8 MB
五、啟動鏡像
- docker run -d -p 8014:8080 5e86ecc155d8
瀏覽器訪問:localhost:8014/health
注意:
- 多次指定build去構建的話,之前構建出來的REPOSITORY和TAG都會變為<none>
1 REPOSITORY TAG IMAGE ID CREATED SIZE 2 myservice1-docker 1.0-SNAPSHOT 5e86ecc155d8 21 seconds ago 575.8 MB 3 <none> <none> f0f5b0df8ecf 4 minutes ago 575.8 MB
- 使用docker-maven-plugin構建項目,可以避免手工移動jar,並且可以很方便的自己做成archetype