前言:springboot工程如何在docker上发布,其实有很多中解决方案,本次采用的方案为将工程打包为镜像,然后拉取容器进行访问。
本次实验虽然成功了,但觉得还需优化,在镜像创建后,还需要去人工创建容器,能否在创建镜像的同时生成容器,这个还有待研究。
1、配置docker,开启2376端口,
修改 /usr/lib/systemd/system/docker.service文件,在ExecStart 后面添加-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock
配置完成后,重启让配置生效
systemctl daemon-reload
systemctl restart docker.service
2、maven配置
在pom文件下添加下列代码
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.14</version>
<configuration>
<!-- 镜像名 -->
<imageName>test/${project.artifactId}</imageName>
<!-- Dockerfile文件所在位置 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<!-- docker路径和端口 -->
<dockerHost>http://10.19.210.247:2376</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
下图是我在工程中配置的,仅作参考
3、Dockerfile配置
在src/main/docker文件夹下创建Dockerfile文件,内容如下
FROM java
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
VOLUME /tmp:创建/tmp目录并持久化到Docker数据文件夹,因为Spring Boot使用的内嵌Tomcat容器默认使用/tmp作为工作目录。
ADD demo-0.0.1-SNAPSHOT.jar app.jar:将应用jar包复制到/app.jar
ENTRYPOINT:表示容器运行后默认执行的命令