一 在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没啥用
五 检验是否正确