一 在pom文件中添加docker編譯的插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- tag::plugin[] --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <imageName>tms/${project.artifactId}</imageName> //其中tms是鏡像名的前綴 為了區別而已 例如我的這個application的名為eureka-server 則他的鏡像名為tms/eureka-server <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> <!-- end::plugin[] --> </plugins> </build>
二 編寫Dockfile
我的文件目錄是這樣的,其中Dockefile是沒有文件后綴的 文件內容如下:
FROM java:8 VOLUME /tmp ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] EXPOSE 8060
FROM 后是指定java的版本
VOLUME
指定了臨時文件目錄為/tmp
。其效果是在主機 /var/lib/docker
目錄下創建了一個臨時文件,並鏈接到容器的/tmp
。改步驟是可選的,如果涉及到文件系統的應用就很有必要了。/tmp
目錄用來持久化到 Docker 數據文件夾,因為 Spring Boot 使用的內嵌 Tomcat 容器默認使用/tmp
作為工作目錄
項目的 jar 文件作為 “app.jar” 添加到容器的
ENTRYPOINT
執行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統屬性指向 “/dev/urandom” 作為 Entropy Source
其中有關於jar包的路徑 這個路徑是從target的根目錄去找
三 將eureka-server打包
[root@Master eureka-server]# mvn clean package docker:build -Dmaven.test.skip=true
[root@Master eureka-server]# mvn clean package docker:build -Dmaven.test.skip=true [INFO] Scanning for projects... [INFO] [INFO] -----------------------< com.hmzj:eureka-server >----------------------- [INFO] Building eureka-server 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ eureka-server --- [INFO] [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ eureka-server --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] Copying 3 resources [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ eureka-server --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 2 source files to /home/web/workspace/tms-callcenter/eureka-server/target/classes [INFO] [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ eureka-server --- [INFO] Not copying test resources [INFO] [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ eureka-server --- [INFO] Not compiling test sources [INFO] [INFO] --- maven-surefire-plugin:2.21.0:test (default-test) @ eureka-server --- [INFO] Tests are skipped. [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ eureka-server --- [INFO] Building jar: /home/web/workspace/tms-callcenter/eureka-server/target/eureka-server-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.0.3.RELEASE:repackage (default) @ eureka-server --- [INFO] [INFO] --- docker-maven-plugin:0.4.3:build (default-cli) @ eureka-server --- [INFO] Copying /home/web/workspace/tms-callcenter/eureka-server/target/eureka-server-0.0.1-SNAPSHOT.jar -> /home/web/workspace/tms-callcenter/eureka-server/target/docker/eureka-server-0.0.1-SNAPSHOT.jar [INFO] Copying src/main/docker/Dockerfile -> /home/web/workspace/tms-callcenter/eureka-server/target/docker/Dockerfile [INFO] Building image tms/eureka-server Step 1/5 : FROM java:8 ---> d23bdf5b1b1b Step 2/5 : VOLUME /tmp ---> Using cache ---> 5308d9a48e23 Step 3/5 : ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar ---> e26005362082 Removing intermediate container ae0edcf3f17c Step 4/5 : ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -jar /app.jar ---> Running in f7ed354189de ---> 4c365be95f2f Removing intermediate container f7ed354189de Step 5/5 : EXPOSE 8060 ---> Running in 279cee1f4c28 ---> e26719477043 Removing intermediate container 279cee1f4c28 Successfully built e26719477043 [INFO] Built tms/eureka-server [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 25.808 s [INFO] Finished at: 2018-08-07T18:08:55+08:00 [INFO] ------------------------------------------------------------------------
四 用docker部署
1.查看docker images
[root@Master eureka-server]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tms/eureka-server latest e26719477043 2 minutes ago 699 MB <none> <none> e48f8ad62799 3 hours ago 699 MB <none> <none> 59d323a94109 7 hours ago 707 MB docker.io/hello-world latest 2cb0d9787c4d 3 weeks ago 1.85 kB docker.io/java 8 d23bdf5b1b1b 18 months ago 643 MB docker.io/ubuntu 15.10 9b9cb95443b5 2 years ago 137 MB [root@Master eureka-server]#
2.運行鏡像
[root@Master eureka-server]# docker run -p 8061:8061 -d tms/eureka-server --spring.profiles.active=peer2
1d4cd0fb70a9da0260a13658b957993ddac78e430b82a670275b1d5de4468a3f
-d 后台運行 -p port1:port2 port1表示對外端口號 port2沒啥用
五 檢驗是否正確