springboot 应用打包发布到 docker

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012930316/article/details/82997664

使用 docker-maven-plugin 插件,直接将 spring boot 应用一键发布到 docker 容器中。

   Centos 7 配置文件位于:/usr/lib/systemd/system/docker.service

    直接在 ExecStart 启动参数的 /usr/bin/dockerd 后面添加以开启 TCP 连接:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
像这样:


ExecStart=/usr/bin/dockerd --registry-mirror=https://registry.docker-cn.com -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

配置好后重新载入 systemd,扫描新的或有变动的单元(docker):

systemctl daemon-reload

这个命令没报错的话就重启docker 

systemctl start docker  (启动)

systemctl restart docker(重启) 

然后都没问题的话 本地可以测试下

curl http://localhost:2375/info

有返回json的话即成功,远程访问可以 使用将期替换成对应的ip来访问,如果访问不了,可以看看防火墙是否开启

  • 3还需给第2步配置TLS加密

             如果不配置 ,在使用 docker:build  命令时会报这个错

Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (default-cli) on project docker: Exception caught: An HTTPS URI for DOCKER_HOST must be provided to use Docker client certificates

这里就先配置下这个 https的加密

一:生成key文件(我这里是在/etc/.docker文件夹下面生成的):

openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem
openssl genrsa -out server-key.pem 4096
openssl req -sha256 -new -key server-key.pem -out server.csr
openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem
openssl genrsa -out key.pem 4096
openssl req -new -key key.pem -out client.csr
openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
rm -v client.csr server.csr
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

二:继续修改docker的配置

vim  /lib/systemd/system/docker.service

修改execstart配置

  

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/root/.docker/ca.pem -- tlscert=/root/.docker/server-cert.pem --tlskey=/root/.docker/server-key.pem

    没问题的话继续重启下docker   

       systemctl daemon-reload
  systemctl restart docker(重启) 

将刚才生成的证书复制的你 操作打包的那台机器上,(我这是使用windows的eclipse来进行maven打包操作)

  •   下载父镜像 ,我们的镜像会依靠这个父镜像来生成.

       docker pull frolvlad/alpine-oraclejdk8

  • 5

      给原本的springboot项目下面的pom.xml文件中增加打包的配置

<properties>
		<docker.image.prefix>anxpp</docker.image.prefix>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

<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.13</version>
				<configuration>
					<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
					<dockerHost>https://192.168.11.189:2375</dockerHost>
					<dockerCertPath>D:\certs</dockerCertPath>
					<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>

dockerHost 要替换 成刚才第2步配置好的 那个地址

dockerCertPath 要替换成你证书文件的地址(示范是在d盘)(也就是第3步生成的证书文件夹的位置)

dockerDirectory 要替换成Dockerfile文件的在项目中的位置 我这里是在项目src/main/docker 这里建了个文件夹

  • 6

            编写 dockerfile文件,我存放在src/main/docker这个文件夹下面

FROM frolvlad/alpine-oraclejdk8
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/test/./urandom -jar /app.jar" ]
  • 7构建生成镜像

            mvn clean package  先生成jar包,

         没问题了执行    docker:build

      如果一切正常 ,则可以在liunx这台docker机器上面执行

              docker images

 就可以看到我们刚才生成的镜像文件 

执行命令:  docker run -d -p 8080:8080 -t anxpp/docker

    -d 是让容器后台运行

    -p 是将容器内的端口映射到 docker 所在系统的端口

    -t 是打开一个伪终端,以便后续可以进入查看控制台 log

查看运行中的容器 

        docker ps

本文参考 https://blog.csdn.net/anxpp/article/details/73478883

但是由于这篇文章里面没有说明https的问题,所以对其做了自己的理解和补充.

猜你喜欢

转载自blog.csdn.net/u012930316/article/details/82997664