本文介绍如何使用idea与maven打包spring boot后自动打成docker镜像推送到远程docker服务器中
1.配置远程docker服务器文件
vi /etc/docker/daemon.json
在配置文件中添加
{
"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
然后重新加载配置文件,重启docker
systemctl daemon-reload
systemctl restart docker
通过docker暴露的接口验证
curl http://localhost:2375/version
2.配置spring boot项目
在项目中添加Dockerfile文件
Dockerfile文件内容,里面步骤为下拉java8的镜像,把自己的jar文件放到镜像中,暴露端口,设置虚拟机的时区,最后为镜像运行命令.
FROM hub.c.163.com/library/java:8-alpine
ADD v20-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 6060
# set Time zone
ENV TZ=Asia/Shanghai
RUN set -eux; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
echo $TZ > /etc/timezone
ENTRYPOINT ["java", "-jar", "/app.jar"]
在idea中配置docker
如图最后显示connection successful 为连接docker成功
在pom.xml中添加对于docker镜像的打包推送操作
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定镜像名-->
<imageName>you-images-name</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.2.67:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
之后双击maven package进行打包
其中还会显示docker镜像的打包步骤,最后BUILD SUCCESS后为打包成功
[INFO] Building image v20
Step 1/6 : FROM hub.c.163.com/library/java:8-alpine
---> d991edd81416
Step 2/6 : ADD v20-0.0.1-SNAPSHOT.jar app.jar
---> e0277ca3fc7a
Removing intermediate container 803b8d5621f0
Step 3/6 : EXPOSE 6060
---> Running in f4bbefaa98a0
---> 006b38024461
Removing intermediate container f4bbefaa98a0
Step 4/6 : ENV TZ Asia/Shanghai
---> Running in 264c84ae1980
---> 808bbab3f347
Removing intermediate container 264c84ae1980
Step 5/6 : RUN set -eux; ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; echo $TZ > /etc/timezone
---> Running in e0e3e880f7d0
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
+ ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+ echo Asia/Shanghai
---> a0ebae2cdebc
Removing intermediate container e0e3e880f7d0
Step 6/6 : ENTRYPOINT java -jar /app.jar
---> Running in c2a3e71708fe
---> 4ec0154666fb
Removing intermediate container c2a3e71708fe
Successfully built 4ec0154666fb
[INFO] Built v20
[INFO] Tagging v20 with latest
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18.877 s
[INFO] Finished at: 2020-08-17T13:29:32+08:00
[INFO] ------------------------------------------------------------------------
此时docker的images中已经有了我们打包完成的镜像
然后右击镜像,点击创建容器(container)
输入容器名称,和暴露的端口映射后我们就可以直接点击run,然后运行容器了。