docker部署spring boot(Spring Boot 打包上传Docker 仓库的详细步骤)
docker部署spring boot
Spring Boot 打包上传Docker 仓库的详细步骤重要提示:学习本文之前需要提前了解docker容器相关的知识,了解和熟练运用常用的docker操作命令,如果已经了解了docker容器相关的知识那我们就开搞吧!
以下是完成标题所述功能的大致步骤:
搭建docker镜像仓库
修改Spring Boot 配置文件添加docker仓库配置,打包,上传至docker 镜像仓库
从自己搭的docker镜像仓库拉取上传的镜像文件并运行
Step1 搭建docker镜像私有仓库搭建docker镜像仓库我们需要依赖docker-registry工具 ,docker-registry是官方提供的工具,可以用于构建私有的镜像仓库。本文内容基于 docker-registry v2.x 版本 官方地址:https://docs.docker.com/registry/
1.拉取registry 镜像文件
docker pull registry
2.启动镜像
$ docker run -d \ -p 5000:5000 \ -v /opt/data/registry:/var/lib/registry \ registry
-d:守护线程启动
-p:端口映射 宿主机的端口:容器的端口
-v:数据卷把容器内的地址目录映射到宿主机中/opt/data/registry就是宿主机中镜像私有仓库存放镜像的位置
registry 就是镜像名
3.配置daemon.json文件加入,仓库配置
vim /etc/docker/daemon.json
添加配置如下:
{ "registry-mirrors": [ "https://registry.docker-cn.com" ], "insecure-registries": [ "yourip:5000" ] }
在原来的daemon.json 文件添加 insecure-registries 节点配置,yourip :填写你的虚拟机ip, 保存退出 重新加载配置文件和重新启动docker
systemctl daemon-reload systemctl restart docker
4.测试把镜像上传到自己的镜像仓库,我们标记一个镜像然后上传的仓库 使用 docker tag 命令:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]
docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
(这里测试上传的镜像不必和文中相同,你可以pull 一个 tomcat 镜像然后上传即可) 此时会生成一个标记的镜像
docker image ls REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB 127.0.0.1:5000/ubuntu:latest latest ba5877dc9bec 6 weeks ago 192.7 MB
push 到私有仓库
docker push 127.0.0.1:5000/ubuntu:latest
查看私有仓库的镜像(其实可以去启动仓库时挂载的目录下看,本文可以到宿主机 /opt/data/registry 目录下查看了上传的镜像文件)
curl 127.0.0.1:5000/v2/_catalog
把私有仓库的镜像pull 下来
docker pull 127.0.0.1:5000/ubuntu:latest
pull 下来没问题那就说明镜像仓库已经搭建好了
Step 2 修改SpringBoot 配置文件添加docker仓库配置,打包,上传至docker 镜像仓库在配置SpringBoot项目之前,还需要对docker 容器做一些配置,才能把jar包上传到仓库
开启docker远程api,修改文件,
vim /lib/systemd/system/docker.service
原来ExecStart :ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
添加**-H tcp://0.0.0.0:2375**
修改后:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
(如果你使用的是阿里云服务器记得去出入规则那里打开2375这个端口哦!)
保存退出,重新加载配置和启动docker
systemctl daemon-reload systemctl restart docker
查看配置是否成功,
docker -H 127.0.0.1 info
输出如下就是配置成功:
Client:
Debug Mode: falseServer:
Containers: 5
Running: 1
Paused: 0
Stopped: 4
Images: 6
Server Version: 19.03.3
Storage Driver: overlay2
.......
配置springboot 项目,pom文件添加打包配置如下
<plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.1.0</version> <executions> <execution> <id>build-image</id> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <imageName>jenkins_test/${project.artifactId}:${project.version}</imageName> <dockerHost>http://yourip:2375</dockerHost> <baseImage>java:8</baseImage> <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>
- executions.execution.phase:此处配置了在maven打包应用时构建docker镜像;
- imageName:用于指定镜像名称,jenkins_test是仓库名称,{project.version}为镜像版本号;
- dockerHost:打包后上传到的docker服务器地址;
- baseImage:该应用所依赖的基础镜像,此处为java;
- entryPoint:docker容器启动时执行的命令;
- resources.resource.targetPath:将打包后的资源文件复制到该目录;
- resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面;
- resources.resource.include:需要复制的文件,打包好的应用jar包。
配置好以上内容后就可以打包了,(正常的springboot maven 打包,或者idea mavenproject install 即可)
打包成功完成后,回到docker容器 查看镜像仓库
curl 127.0.0.1:5000/v2/_catalog
确认存在之后将上传的镜像拉取下来,拉取成功后查看镜像列表
docker iamges
显示如图:
这样就说明这一套操作成功了 ,首次打包可能比较慢 因为docker 要拉去一下 java :8 基础镜像
我们来启动一下这个镜像
docker run -p 8080:8080 imageid
-p:端口映射
启动成功如图:
因为springboot 项目的application.yml文件中配置的server.port 为8080.启动的时候需要映射 8080:8080 第一个8080 是宿柱机的端口 第二个8080 是容器的端口
到此本文的所需要实现的都已经实现了,继续阅读有彩蛋哦!!!!
在springboot 项目中有一个日志配置,如下
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <property name="LOG_HOME" value="/home/logs" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日志文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 日志输出级别 --> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
我们要注意这个节点配置的logs 文件的保存地址
如果按照传统的jar包部署方式,日志文件应该就在宿主机的 /home/logs 里面了但是现在我们发现都没有这个目录了,那问题出现在哪?日志文件输出到哪了??我们进入启动的springboot容器试一试,以交互形式进入一个已经在运行的容器内部
docker exec -it containerid bash
我们就看到里面有一个 home目录,依次进入目录我们会发现日志文件在这里了!
思考,我们前面不是使用到了数据卷的命令嘛,是否可以把容器内的路径映射到虚拟机上?试试吧!停掉启动的容器,(我们直接删除吧)
docker stop containerid docker rm containerid
重新启动容器
docker run -d -p 8080:8080 -v /home/logs:/home/logs imageid
这次我们命令加了一个 -d 意思是守护线程启动 (后台运行) 使用如下命令 查看启动的容器日志
docker logs -f containerID
可以看到,启动成功了,那么 按理说 locback.xml 会在我们映射的宿主机的 /home/logs 目录下输出我们的日志文件,我们去看看 输入一系列命令,可以看到日志文件真的在这里了!
到此这篇关于Spring Boot 打包上传Docker 仓库的详细步骤的文章就介绍到这了,更多相关Spring Boot 打包上传内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- springboot如何解析vue登录参数(SpringBoot + Vue 项目部署上线到Linux 服务器的教程详解)
- springboot项目部署到docker(IDEA 通过docker插件发布springboot项目的详细教程)
- centosdocker安装教程(centos下docker安装及springboot远程发布docker的方法)
- docker启动项目需要tomcat吗(docker安装tomcat并部署Springboot项目war包的方法)
- dockerspringboot一键部署(docker-compose镜像发布springboot项目的流程分析)
- springboot docker 部署(详解docker部署SpringBoot及替换jar包的方法)
- springboot内置tomcat启动过程(Tomcat启动springboot项目war包报错:启动子级时出错的问题)
- 使用docker在linux环境中部署springboot包的教程(使用docker在linux环境中部署springboot包的教程)
- idea 一键部署springboot docker(IDEA部署Docker到WSL2的详细过程)
- springbootdocker详解(Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解)
- docker如何启动springboot(Centos8.3、docker部署springboot项目实战案例分析)
- yii2对比springboot(Yii框架函数简单用法分析)
- docker中的mongodb(Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解)
- spring boot docker部署(docker部署springboot和vue项目的实现步骤)
- springboot怎么设置docker(Docker如何给Springboot项目动态传参的实现方法)
- docker启动springboot项目(Docker运行springboot项目的实现)
- 阴生环境 耐阴地被植物,你知道哪些(阴生环境耐阴地被植物)
- 常见的喜阴植物有哪些 养室内盆栽就在这里选(常见的喜阴植物有哪些)
- 这8种耐阴植物,营造阴生植物花境,也是一个不错的选择(营造阴生植物花境)
- 览邦G08 Plus SMART WATCH 测评⑱ 全独立这才是智能手表该有的样子(览邦G08PlusSMART)
- 荣耀手表 GS 3 真机亮相 不支持无线充电(荣耀手表GS3)
- 通过体温就能为智能手表充电 原来是用NASA在空间站用的黑科技(通过体温就能为智能手表充电)
热门推荐
- Uncaught TypeError: jQuery.handleError is not a function
- dede采集规则(DEDECMS 5.7 采集规则无法导入的解决办法)
- python flask部署实例(Python Flask框架扩展操作示例)
- 轻量云服务器和ecs服务器区别(ECS云服务器租用的优势表现在哪些方面?)
- 云服务器自己配置还是主机好(云服务器配置怎么选才好?)
- js原型链的理解(浅谈JS的原型和原型链)
- dedecms模板特点(为DedeCMS换上精美多样的提示信息窗口)
- python3字符串怎么操作(Python3字符串encode与decode的讲解)
- 怎样在python中散点图(python使用Plotly绘图工具绘制散点图、线形图)
- 如何查找MySQL中查询慢的SQL语句
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9