使用Maven构建项目Docker镜像

前言

在前面我们介绍了

Docker是什么?有什么优点?应用场景?_黄嚯嚯-CSDN博客

Linux安装Docker步骤_黄嚯嚯-CSDN博客

Docker配置使用阿里云加速镜像_黄嚯嚯-CSDN博客

 准备工作

创建一个基础项目工程

开始之前我们先准备一个Springboot的项目工程 , 就很普通就好 , 确保项目整正常启动即可!

配置

本次构建所使用到的插件是 docker-maven-plugin ,  

该插件提供了两种不同的构建方式 ,  两种方式外观差别体现在pom不同

一种是纯粹的xml文件标签定义参数的方式 , 

另一种是可以利用DockerFile辅助定义构建参数的方式, 下面都会一一介绍.

纯粹xml标签构建方式pom文件

<plugins>
			<!--这是原有的spring boot插件-->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!--新增的docker maven插件-->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>0.4.12</version>
				<!--docker镜像相关的配置信息-->
				<configuration>
					<!--镜像名,这里用工程名-->
					<imageName>${project.artifactId}</imageName>
					<!--TAG,这里用工程版本号-->
					<imageTags>
						<imageTag>${project.version}</imageTag>
					</imageTags>
					<!--镜像的FROM,使用java官方镜像-->
					<baseImage>java:8u111-jdk</baseImage>
					<!--该镜像的容器启动后,直接运行spring boot工程-->
					<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>
		</plugins>

指定DockerFile方式

在<project>标签内添加<build>相关内容如下

这种方式要我们自己写Dockerfile,好处是可以按照自己的需要在Dockerfile中添加更多内容,而不像第一种方式那样只能按照插件的参数规则来配置

 修改Pom

    <build>
        <finalName>ko-assy-db</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.ko.assy.db.ms.KoAssyDbApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--使用docker-maven-plugin插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>${project.artifactId}</imageName>
                    <!-- 指定 Dockerfile 路径 , 根据实际情况改动! ${project.basedir}:项目根路径-->
                    <dockerDirectory>${basedir}/src/docker</dockerDirectory>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!--指定远程 docker api地址 ,此举目的是将构建好的镜像推送至远程的Docker服务器 ,  前提是服务器开启远程连接 -->
                    <dockerHost>http://127.0.0.0:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

创建并编辑Dockerfile

 DockerFile 内容

# Docker image for springboot application
# VERSION 0.0.1
# Author: huanghuohuo

# 构建镜像基于哪个镜像
FROM openjdk:8
# 镜像维护者姓名或邮箱地址
MAINTAINER huanghuohuo
# 为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
WORKDIR /
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
COPY ko-assy-db.jar ko-assy-db.jar
#启动容器时的进程
#ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS $ENV_OPTS $REMOTE2 -jar ko-assy-db.jar" ]
CMD ["java", "-version"]
# 容器启动时执行的命令 
ENTRYPOINT ["java","-jar","/ko-assy-db.jar"]
#暴露11109端口
EXPOSE 11109
# 声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
# 一般的使用场景为需要持久化存储数据时
# 容器使用的是AUFS,这种文件系统不能持久化数据,当容器关闭后,所有的更改都会丢失。
# 所以当数据需要持久化时用这个命令。
# VOLUME 指令创建的挂载点,无法指定主机上对应的目录,是自动生成的。
VOLUME /data/app/ko-assy-db-ms/logs

构建

前面pom文件中提到了有关docker镜像的构建操作 , 绑定了maven构建的package

所以这里可以不用命令 , 直接构建就好

 

 构建成功

 

 验证

构建成功后到docker服务器查看 

// 查看镜像
docker images 

 如上图就说明是构建镜像成功了 , 但是为什么会出现两个出了版本不一样的镜像呢 ?

其实这是因为我们在上面的pom里面使用了 <tag>打标签的配置 , name在构建镜像的时候就会在构建好的基础镜像上在构建出来一个打了标签的镜像,  其实通过镜像ID可以看出来 , 这两个其实是一样的!

启动镜像

## --name 指定启动后容器名称
## -d  守护进程的方式运行
## -p  内外端口映射 
docker run --name testdemo -d  -p 11109:11109 fe5604877415


## 启动后 验证 
docker ps 

 至此,我们通过 docker-maven-plugin 的方式构建本地docker镜像的实战就结束了,但镜像停留在本地,或者远程docker服务器 , 只能手工push到公有或者私有仓库才能给其他人使用,

在下一章我们就来体验docker-maven-plugin插件的推送能力,将本地镜像推送到镜像仓库,这样就能将项目编译构建、镜像构建、镜像推送等环节集成在一次构建中完成;

 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Maven构建并推送Docker镜像到私有库的步骤如下: 1. 在pom.xml文件中添加Docker Maven插件的依赖。 2. 在pom.xml文件中添加Docker Maven插件的配置,包括Docker主机地址、Docker Maven插件版本、Docker镜像名称等信息。 3. 使用Maven命令打包项目,并生成Docker镜像。 4. 使用Maven命令推送Docker镜像到私有库。 具体步骤如下: 1. 在pom.xml文件中添加Docker Maven插件的依赖: ``` <dependency> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.maven.plugin.version}</version> </dependency> ``` 其中,${docker.maven.plugin.version}为Docker Maven插件的版本号。 2. 在pom.xml文件中添加Docker Maven插件的配置: ``` <build> <plugins> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.maven.plugin.version}</version> <configuration> <imageName>your-docker-image-name</imageName> <dockerHost>http://your-docker-host:2375</dockerHost> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> ``` 其中,your-docker-image-name为Docker镜像名称,your-docker-host为Docker主机地址。 3. 使用Maven命令打包项目,并生成Docker镜像: ``` mvn clean package docker:build ``` 4. 使用Maven命令推送Docker镜像到私有库: ``` mvn docker:push ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值