您的位置:首页 > 运维架构 > Docker

Docker 学习(七) 使用 Maven 插件构建 Docker 镜像

2020-01-14 12:51 786 查看

文章目录


跟随书中,使用 Spotify 公司开发的 Maven 插件。

GitHub 地址:https://github.com/spotify/docker-maven-plugin#the-future-of-docker-maven-plugin

快速入门

  1. 在 pom 文件中添加:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- 指定镜像名称 -->
<imageName>yhcm/microservice-discovery-eureka:${version}</imageName>
<!-- 指定基础镜像,类似Dockerfile 的 FROM -->
<baseImage>java</baseImage>
<!-- 类似于Dockerfile ENTRYPOINT 指令 -->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!-- copy the service's jar file from target into the root directory of the image -->
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 指定需要复制的根目录。${project.build.directory} 表示 target 目录 -->
<directory>${project.build.directory}</directory>
<!-- 用于指定需要复制的文件。${project.build.finalName}.jar 表示打包后的jar文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
  1. 执行 maven 命令,构建 Docker 镜像。

或者是直接执行命令:

mvn clean package docker:build

因为这一步会构建成镜像,需要在本地装有 Docker 。默认的虚拟机就是 default 虚拟机。因为需要下载基础的 Java 镜像,所以请配置好镜像加速,避免加速下载失败。

  1. 查看刚刚构建的镜像
  2. 启动容器
docker run -d -p 8761:8761 yhcm/microservice-discovery-eureka:0.0.1-SNAPSHOT
  1. 访问测试

插件读取 Dockerfile 构建

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
<!-- 指定镜像名称 -->
<imageName>yhcm/microservice-discovery-eureka:${version}</imageName>
<!-- 指定 Dockerfile 的位置 -->
<dockerDirectory>${project.basedir}/src/main/resources/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 指定需要复制的根目录。${project.build.directory} 表示 target 目录 -->
<directory>${project.build.directory}</directory>
<!-- 用于指定需要复制的文件。${project.build.finalName}.jar 表示打包后的jar文件 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

简单点来说就是,事先准备好 Dockerfile 然后在配置中指定 Dockfile 的地址就可以了。实际上之前的方式也是插件生成了一个 Dockerfile 之后来构建。

将插件绑定在某个 phase 执行

这个的意思就是,在执行

mvn clean package
或者是其他 Maven 命令的时候顺带执行插件 goal。

phase 和 goal 可以这样理解:maven 命令格式是 mvn phase:goal,例如 mvn package docker:build。那么 package 和 docker 都是 phase ,build 则是 goal。

添加配置:

<plugin>
...
<configuration>
...
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>

推送镜像

配置每次构建完成之后推送镜像到 Docker Hub 上。

修改 maven 的配置文件 settings.xml,添加以下配置:

<servers>
<!--  docker相关配置  -->
<server>
<id>docker-hub</id>
<username>你的 Docker Hub 用户名</username>
<password>Docker Hub 的密码</password>
<configuration>
<email>邮箱</email>
</configuration>
</server>
</servers>

然后在微服务的 pom.xml 中新增配置:

<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.0</version>
<configuration>
...
<!-- 与刚刚配置的maven配置文件中的settings.xml中的 server.id 一致 -->
<serverId>docker-hub</serverId>
</configuration>
...
</plugin>

然后命令:

mvn clean package docker:build -DpushImage

然后就完成了镜像的推送。如果想要推送到私有的镜像仓库,和之前一样,修改标签即可

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
同名给你糖 发布了21 篇原创文章 · 获赞 1 · 访问量 407 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: