Docker 11 IntelliJ IDEA 构建Docker镜像
Maven插件
1. Spring Boot Maven打包插件内置的 build-image
官方文档:https://docs.spring.io/spring:imageboot/docs/current/maven-plugin/reference/htmlsingle/#build-
Sprigg Boot 2.3版本后默认集成了用于构建 Maven 镜像的插件,只要是Spring Boot项目,就可以直接使用,前提是本地环境中安装了 Docker。
命令:
mvn spring-boot:build-image
拓展配置:
相当于把Dockerfile文件里的配置内容写进了pom.xml里
<plugin>
<configuration>
<groupId>ong.springframework.boot</groupId>
<artifactId>springlboot-maven-plugin</artifactId>
<!--指定打包后的镜像名-->
<imageName>${groupId)/${proiect.artifactId):${project.version}</imageName>
<docker>
<!--配置发布的仓障信息-->
<publishRegistry>
<url>htte://192.168.113.121:5e0e</url>
<username>admin</username>
<password>wolfcode</password>
</publishRegistry>
</docker>
</configuration>
</plugin>
2. Google的Jib-maven-plugin
Jib是一个Maven和Gradle插件,用来创建Docker镜像。它最大的特点是,你的本地可以没有Docker也可以进行构建,同样也不需要编写Dockerfile文件,不用改动代码,甚至不用修改pom.xml文件,运行如下命令即可:
mvn compile com.google.cloud.tools:jib-maven-pluain:2.3.0:dockerBuild
Springboot-maven-plugin 和 Jib-maven-plugin的封装程度高,意味着灵活性,可定制化操作的配置就低,不好定制化调整。
自定义镜像的目的就是把那些过度封装的东西打碎,然后按照自己的理念进行定义。
3. Spotify 的 dockerfile-maven-plugin
专门基于Dockerfile构建镜化的插件,也是目前市面上用的比较多的镜像构建方式之一
1. Dockerfile
## 基础镜像
## AdoptopenJDK 停止发布 OpenJDK 二进制,而Eclipse Temurin 是它的延伸,提供更好的稳定性
FROM eclipse-temurin:8-jre
#作者
MAINTAINER xiaoliu <liugang@wolfcode.cn>
# 定义参数,实际设值是在pom.xml中<buildArgs>中被设置
ARG JAR_FILE
# 创建并进入工作目录
RUN mkdir -p /wolfcode
WORKDIR /wolfcode
## maven 插件构建时得到 buildArgs 种的值
COPY ${JAR_FILE} app.jar
##设置TZ时区
##设置 JAVA OPTS 环境变量,可通过 docker run -e "JAVA_OPTS="进行覆盖
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms256m -Xmx256m"
## 暴露端口
EXPOSE 8080
# 容器启动命令# CMD 第一个参数之后的命令可以在运行时被替换
CMD java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar
# 如何在执行docker时,通过启动命令参数给docker run 动态传值,CMD 会覆盖第一个参数之后的所有命令;而ENTRYPOINT 不会覆盖替换,而是追加。也就是说上面的命令CMD会变为:
CMD java -Dserver.port=9999
# ENTRYPOINT 追加
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar -Dserver.port=9999
docker run xxxx java_server -Dserver.port=9999
2. pom.xml
<plugins>
<!-- 不仅仅可以构建镜像,还可以让不能执行的jar包变成可执行的jar包 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default</id>
<!--自定义构建、推送命令-->
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<!--打包后的完整像名:仓库路径/组织/镜像名-->
<repository>192.168.113.121:5000/wolfcode/${project.artifactId}</repository>
<!--镜像版本号-->
<tag>${project.version}</tag>
<!--读取settings.xml文件中的认证信息-->
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<!--jar所在目录, 和Dockerfile中的JAR_FILE相对应 -->
<JAR_FILE>target/${project.artifactId}-${project.version}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
3. setting.xml
pom.xml 中设置了
true , 所以要在maven中设置仓库
<servers>
<server>
<id>192.168.113.121:5000</id>
<username>admin</username>
<password>wolfcode</password>
</server>
</servers>
打包java 项目jar包,报错:
【问题解决】java.io.FileNotFoundException: \.\pipe\docker_engine (系统找不到指定的文件。)解决方案:
https://blog.csdn.net/qq_43437874/article/details/107198498

浙公网安备 33010602011771号