Docker(2) —— 使用maven集成编译、推送docker镜像

本文介绍如何开启Docker远程API以便进行远程管理,同时详细解释了使用Maven集成编译并推送Docker镜像的过程,适用于Spring Boot项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先需要开启docker的远程API端口监听

【旧版本docker】编辑文件:

vim /etc/docker/daemon.json

加入键值对:

{"hosts":["0.0.0.0", "unix:///var/run/docker.sock"]}

【新版本docker】编辑文件:

vim /usr/lib/systemd/system/docker.service

修改ExecStart:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

重新加载配置文件:

systemctl daemon-reload

※注意如果绑定到0.0.0.0意味着所有人都可以任意操作这台机器上的docker,而且docker拥有root权限,也就是说实际上开启之后别人可以通过docker来任意操作这台计算机,实际中一定不要将接口直接暴露在外面,使用内网或者unix连接。

重启docker:

systemctl restart docker

验证端口:

netstat -nptl
curl http://127.0.0.1:2375/info

 

2、使用maven集成编译、推送docker镜像,以下使用Springboot工程为例说明

① 在工程中src/main/docker添加Dockerfile:

FROM java:8
MAINTAINER watashi
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
ENV JAVA_OPTS=""
ENTRYPOINT ["sh","-c","java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

② 修改工程POM文件,build标签部分如下:

<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>0.4.14</version>
            <!-- 简化mvn执行命令 -->
            <executions>
            	<!-- when executing mvn package, it will execute mvn docker:build 
            		at the same time -->
            	<execution>
            		<id>build-image</id>
	            	<phase>package</phase>
	            	<goals>
	            		<goal>build</goal>
	            	</goals>
	            </execution>
            	<!-- when executing mvn package, it will execute mvn docker:build 
            		-DpushImage at the same time -->
            	<execution>
	            	<id>push-image</id>
	            	<phase>package</phase>
	            	<goals>
	            		<goal>push</goal>
	            	</goals>
            	</execution>
            </executions>
			<configuration>
				<imageName>${env.DOCKER_REGISTRY_NAME}/${docker.image.prefix}/${project.artifactId}</imageName>
				<imageTags>
					<imageTag>${project.version}</imageTag>
                    <imageTag>latest</imageTag>
				</imageTags>
				<forceTags>true</forceTags>
				<dockerDirectory>src/main/docker</dockerDirectory>
                <!-- 配置docker仓库以及证书路径到环境变量,docker-registry在maven的setting.xml里配置 -->
                <serverId>docker-registry</serverId>
                <registryUrl>${env.DOCKER_REGISTRY}</registryUrl>
                <dockerCertPath>${env.DOCKER_CERT_PATH}</dockerCertPath>
                <!-- 添加远程docker主机,该主机必须开启了远程API,监听2375端口有两种方式添加docker主机 -->
                <!-- 在系统环境变量中添加DOCKER_HOST系统变量,值为tcp://docker-host-ip:2375 -->
                <dockerHost>${env.DOCKER_HOST}</dockerHost>
				<resources>
					<resource>
						<targetPath>/</targetPath>
						<directory>${project.build.directory}</directory>
						<include>${project.build.finalName}.jar</include>
					</resource>
				</resources>
				<buildArgs>
					<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
				</buildArgs>
			</configuration>
		</plugin>
	</plugins>
</build>

※参考https://spring.io/guides/gs/spring-boot-docker/

※打包时会自动从$DOCKER_CERT_PATH目录下读取.crt证书文件。

※设置serverId,打包时会从maven的setting.xml中查找对应的serverId,读取username、password、email配置,push镜像时自动登录。setting.xml里配置如下:

<servers>
<server>
      <id>docker-registry</id>
      <username>username</username>
      <password>password</password>
	  <configuration>
        <email>xxx@xxx.com</email>
      </configuration>
    </server>
</servers>

※配置了executions,这样可以把

mvn clean package docker:build -DpushImage -DskipTests

命令简化成

mvn clean package -DskipTests

※如果pom.xml里没有带版本号,可以用-DdockerImageTags=1.0.0 -DdockerImageTags=latest参数上传或者tag版本号再上传:-DpushImageTag=0.1.1 -DpushImageTag=latest。

③ 编译完成以后,可以看到build success

b032189037db6db7de63cb3c3429f059b15.jpg

到docker主机上通过docker images命令查看镜像:

f4a8e60ec27bfb219fd6d67023052289e62.jpg

④ 启动镜像,运行容器

a) 使用固定端口启动:

docker run -d -p 8080:8080 -i -t cmpaas/hello-service:1.0.0

启动后,通过http://docker-host-ip:8080/hello访问服务。

b) 使用动态端口启动:

docker run -e JAVA_OPTS='-Dserver.port=8084' -d -p 8084:8084 -i -t cmpaas/hello-service:1.0.0

启动后,可以通过docker ps命令列出在运行的容器:

8f07100471753b0219ab33a3bf1267cdd50.jpg

并通过http://docker-host-ip:8084/hello访问服务。

⑤ 查看docker服务的日志

journalctl -u docker.service -f

 

转载于:https://my.oschina.net/u/1445585/blog/1840187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值