開啟docker遠程端口
我上一篇里面寫了,這里暴露的路徑:
18.16.202.95:2375
簡單構建
配置pom.xml
文件
在properties中增加一行指定遠程主機的位置
<properties>
<java.version>1.8</java.version>
<dockerHost>http://18.16.202.95:2375</dockerHost>
</properties>
增加一個plugin
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<imageName>com.huishi.demo</imageName>
<!-- <imageName>${project.build.finalName}</imageName>-->
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
或者就用一個整個,dockerHost配置設置在插件里面:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<imageName>com.huishi.demo</imageName>
<!-- <imageName>${project.build.finalName}</imageName>-->
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<dockerHost>http://18.16.202.95:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
這種方式也是可以的。
configuration
配置說明:
imageName
:用於指定鏡像的完整名稱,其中{docker.registry}為注冊中心地址,{project.groupId}為倉庫名稱,{project.artifactId}為鏡像名稱,${project.version}為鏡像標簽名.dockerDirectory
:用於指定Dockerfile文件所在的目錄.resources.resource.directory
:用於指定需要復制的根目錄,${project.build.directory}表示target目錄.resources.resource.include
:用於指定需要復制的文件,${project.build.finalName}.jar表示生成的jar包.
configuration
中也可以添加
<forceTags>true</forceTags>
用於每次新的構建上覆蓋鏡像tags,如果如果已經存在該tag,那么舊的鏡像將會設為none
構建鏡像:
mvn -DskipTests clean package docker:build
mvn clean package docker:build -Dmaven.test.skip=true
查看:
[root@slaver2 /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
com.huishi.demo latest 860fe1ab3334 About a minute ago 662MB
啟動鏡像:
[root@slaver2 /]# docker run -p 18080:8080 com.huishi.demo
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.8.RELEASE)
2019-09-12 12:08:58.997 INFO 1 --- [ main] com.huishi.demo.DemoApplication : Starting DemoApplication v0.0.1-SNAPSHOT on 70b1ca956ab4 with PID 1 (/demo-0.0.1-SNAPSHOT.jar started by root in /)
2019-09-12 12:08:59.001 INFO 1 --- [ main] com.huishi.demo.DemoApplication : No active profile set, falling back to default profiles: default
2019-09-12 12:09:02.355 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-09-12 12:09:02.439 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-09-12 12:09:02.439 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.24]
2019-09-12 12:09:02.681 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-09-12 12:09:02.682 INFO 1 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3526 ms
2019-09-12 12:09:03.527 INFO 1 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-12 12:09:04.218 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-09-12 12:09:04.236 INFO 1 --- [ main] com.huishi.demo.DemoApplication : Started DemoApplication in 6.877 seconds (JVM running for 8.01)
2019-09-12 12:09:27.255 INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-09-12 12:09:27.256 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-09-12 12:09:27.292 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 36 ms
訪問測試:
curl -XGET http://18.16.202.95:18080
Hello Docker World
使用Dockerfile進行構建
在/src/main/docker
目錄下,建立文件Dockerfile
FROM java:8
VOLUME /tmp
ADD demo-0.0.1.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
使用-Djava.security.egd=file:/dev/./urandom
加快隨機數產生過程。
修改pom.xml配置:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<imageName>hongdada/${project.groupId}.${project.artifactId}</imageName>
<dockerHost>http://18.16.202.95:2375</dockerHost>
<!-- 指定Dockerfile所在的路徑 -->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<forceTags>true</forceTags>
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
其他步驟一樣。這樣即可使用Dockerfile進行構建Docker鏡像啦。
異常
這里要注意的是,imageName必須符合正則[a-z0-9-_.]
,docker的imageName只能是小寫字母,數字,點號,下划線
${project.build.finalName}
產出物名稱,缺省為${project.artifactId}-${project.version}
當前版本
如果要使用SpringBoot
中imageName
要設置為${project.build.finalName}
,注意修改version
,一般默認為0.0.1-SNAPSHOT
,注意大寫字母