随着微服务的发展,服务docker化成为潮流,本文记录下将SpringBoot项目打包为Docker的全过程,留作记录。
目录: 1、准备docker私服环境 2、服务docker打包配置 3、服务打包&运行验证 4、Docker相关指令 准备docker私服环境准备一台服务器或虚拟机为Docker私服仓库,具体操作可参照【Docker环境配置】环境准备好后开放Docker API端口,供服务打包时的镜像上传。以及基础镜像准备。
开放docker私服API端口
在/usr/lib/systemd/system/docker.service中的【Service】-【ExecStart】中添加-H tcp://127.0.0.1:2375 如下:
$ sudo vi /usr/lib/systemd/system/docker.service
重新加载systemctl配置
$ sudo systemctl daemon-reload
重启Docker
$ sudo systemctl restart docker.service
查看netstat确认的输出是否dockerd正在侦听已配置的端口
$ sudo netstat -lntp | grep dockerd
如图则为操作成功
下载基础镜像(按需下载)
$ docker pull java:8
等待下载成功即可,注意若是虚拟机的话内存和磁盘均不可太小,否则会出现下载失败或者docker的服务运行失败等问题。
开启防火墙 构建端口(也可直接关闭防火墙)
$ firewall-cmd --zone=public --add-port=2375/tcp --permanent $ firewall-cmd --reload服务docker打包配置
构建一个Springboot项目,进行Docker镜像打包配置。
服务本地IDEA运行访问Swagger界面如图:
在项目pom.xml中添加如下配置:
org.springframework.boot spring-boot-maven-plugin 2.1.1.RELEASE org.apache.maven.plugins maven-resources-plugin 3.1.0 com.spotify docker-maven-plugin 1.2.0 build-image package build ${project.build.finalName}.jar http://192.168.4.56:2375 ${project.build.finalName} ${project.version} java ${project.basedir}/src/main/docker / ${project.build.directory} ${project.build.finalName}.jar true ${project.artifactId}
构建Dockerfile(注意:没有文件格式后缀)
# 服务运行所需基础依赖
FROM java:8
# 作者信息
MAINTAINER zp app@xxx.com
# 数据卷挂载地址
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN bash -c 'touch /app.jar'
#设置时区
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 容器运行端口
EXPOSE 8082
# java运行环境配置(非必须)
ENV JAVA_OPTS="
-server
-Xms2048m
-Xmx2048m
-Xmn512m
-XX:SurvivorRatio=8
-XX:metaspaceSize=256m
-XX:MaxmetaspaceSize=256m
-XX:ParallelGCThreads=4
-XX:+PrintGCDetails
-XX:+PrintTenuringDistribution
-XX:+PrintGCTimeStamps
-XX:+HeapDumponOutOfMemoryError
-XX:HeapDumpPath=/
-XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+CMSClassUnloadingEnabled
-XX:LargePageSizeInBytes=128M
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyonly
-XX:CMSInitiatingOccupancyFraction=80
-XX:SoftRefLRUPolicyMSPerMB=0
-XX:+PrintClassHistogram
-XX:+PrintHeapAtGC
-XX:+UnlockDiagnosticVMOptions
-XX:+UnlockExperimentalVMOptions
-XX:+PrintFlagsFinal
-XX:GCLogFileSize=10M"
#运行docker是启动服务
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar
注意如上配置中的地址和资源路径,需对应。
服务打包&运行验证在IDEA中的Terminal中进行mvn打包构建操作:
mvn clean install -Dmaven.test.skip=true
或者在电脑对应项目所在盘符路径中进行CMD运行以上指令打包。
打包指令完成后如图:
在到docker私服仓库中进行查看:
出现和服务配置相同的镜像则说明服务Docker镜像打包成功。
运行该镜像进行服务访问验证。
运行指令:
docker run -it -d --name doc --restart=always -p 8082:8082 documents:1.0
–name doc是对该镜像运行取的容器名称,可通过该名称查看运行的相关日志,若运行失败则通过日志进行排查:
docker logs doc
运行完成如图:
在浏览器中通过Docker私服访问该服务验证如图:
自此SpringBoot服务打包Docker镜像完成。
1.查看当前运行的所有容器 docker ps -a 2.停止所有容器(container),这样才能够删除其中的images: docker stop $(docker ps -a -q) 3.如果想要删除所有容器(container)的话再加一个指令: docker rm $(docker ps -a -q) 若这样删除失败可采用 docker rmi -f image_ID 4.查看当前有那些镜像(images) docker imagesDockerfile相关配置
查看菜鸟教程说明



