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: false

Server:
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 打包上传内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • springboot docker jenkins 自动化部署并上传镜像的步骤详解

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1.前期准备工作不说了 2.在项目根目录下新建Dockerfile Dockerfile文件内容为: #基础镜像 FROM openjdk:12 #作者 MAINTAINER demo <demo@qq.com> VOLUME /tmp #指定配置文件,以及jar包在服务器上的路径 ENTRYPOIN

  • 最简单的spring boot打包docker镜像的实现

    这个spring boot项目只在网页输出一个hello world文本,没有其他复杂的配置和页面,属于入门级,可以放心食用. 本项目通过maven打包,打包和构建镜像的命令为: mvn clean install package docker:build spring boot打包docker镜像步骤如下: (一) 在pom.xml文件中添加docker配置: <!--docker maven plugin,在目录src/main/docker下创建Dockerfile文件,Dockerfil

  • 浅析SpringBoot打包上传到docker并实现多实例部署(IDEA版)

    最近有一个朋友问我有没有玩过docker,回答起来底气不是很足 ^ - ^ (刚开始玩cloud的时候接触过,玩过一会,后面在实际开发中比较少用,所以基本上可以说是忘记了.),今天花了点时间整理之前的笔记以及整理走一个流程,记录一下吧,下次玩得时候C V 就好啦~ 1. Docker的安装以及开启远程访问 1.1 安装 # 检查虚拟机内核版本,必须是3.10及以上 uname -r # 安装docker yum install docker # 输入y确认安装 # 启动docker system

  • Spring Boot Docker打包工具小结

    最近公司的应用准备容器化,因为几十个应用从测试到发布太麻烦了,而且还会因为环境的因素导致部署中出现各种问题.为了在开发.测试.生产都能保持一致的环境,就引进了容器技术,先拿边缘的项目试试水,积累下经验,今天对几种常见的Spring Boot Docker打包工具进行了简单总结. Spring Boot Docker 在Spring Boot应用中,我们可以约定不同的标识来定义不同的环境.例如 dev 表示开发环境.test表示测试环境,对应的配置文件为apppcation-dev.yaml.ap

  • Springboot微服务打包Docker镜像流程解析

    1.构建springboot项目 2.打包应用 3.编写dockerfile 4.构建镜像 5.发布运行! [root@localhost demo]# ls demo02-0.0.1-SNAPSHOT.jar Dockerfile # Dockerfile文件 [root@localhost demo]# cat Dockerfile FROM java:8 COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTR

  • Springboot打包为Docker镜像并部署的实现

    一.Springboot项目运行正常 打包前,Springbooot项目在本地必须是运行正常的.我们这里使用本专栏写起来的项目,如下所示: 来访问一下我们接口,做连通性验证测试: 注意这里的地址是本地地址,因为我是在本地IDEA里面运行的项目! 二.Maven打包项目 执行如下命令即可: // 先清空再打包 mvn clean package 打包成功之后如下所示,提示BUILD SUCCESS,target目录下会有打好的jar包: 注意:此处我们打包为jar包,直接部署在Docker中.如果

  • Spring Boot 打包上传Docker 仓库的详细步骤

    重要提示:学习本文之前需要提前了解docker容器相关的知识,了解和熟练运用常用的docker操作命令,如果已经了解了docker容器相关的知识那我们就开搞吧! 以下是完成标题所述功能的大致步骤: 搭建docker镜像仓库 修改Spring Boot 配置文件添加docker仓库配置,打包,上传至docker 镜像仓库 从自己搭的docker镜像仓库拉取上传的镜像文件并运行 Step1 搭建docker镜像私有仓库 搭建docker镜像仓库我们需要依赖docker-registry工具 ,doc

  • 使用Spring boot + jQuery上传文件(kotlin)功能实例详解

    文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍. 前端部分 前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对,formdata这种方式发送表单数据更为灵活.你可以使用它来组织任意的内容,比如使用 formData.append("test1","hello world"); 在kotlin后端就可以使用@RequestParam("test1") greet

  • spring boot 图片上传与显示功能实例详解

    首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的文件全部在启动的时候都会加载到classpath的目录下的,所以上传的文件不知相对于应用目录在哪,也不知怎么写访问路径合适,对于新手的自己真的一头雾水. 后面想起了官方的例子,没想到一开始被自己找到的官方例子,后面太依赖百度谷歌了,结果发现只有官方的例子能帮上忙,而且帮上大忙,直接上密码的代码 package hello; import static org

  • Spring Boot 文件上传原理解析

    首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关心配置可以快速启动开发,有兴趣可以了解下自动化配置实现原理,本质上是 spring 4.0的条件化配置实现,深抛下注解,就会看到了. 说Spring Boot 文件上传原理 其实就是Spring MVC,因为这部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么

  • Spring Boot应用上传文件时报错的原因及解决方案

    问题描述 Spring Boot应用(使用默认的嵌入式Tomcat)在上传文件时,偶尔会出现上传失败的情况,后台报错日志信息如下:"The temporary upload location is not valid". 原因追踪 这个问题的根本原因是Tomcat的文件上传机制引起的! Tomcat在处理文件上传时,会将客户端上传的文件写入临时目录,这个临时目录默认在/tmp路径下,如:"/tmp/tomcat.6574404581312272268.18333/work/T

  • Spring Boot文件上传最新解决方案

    一.创建一个简单的包含WEB依赖的SpringBoot项目 pom.xml内容: <!-- Spring Boot web启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- jsp --> <d

  • Spring boot实现上传文件到本地服务器

    本文实例为大家分享了Spring boot实现上传文件到本地服务器的具体代码,供大家参考,具体内容如下 引入配置 UploadFileConfig类 @Configuration public class UploadFileConfig {        @Value("${file.uploadFolder}")         private String uploadFolder;           @Bean         MultipartConfigElement m

  • Spring Boot 文件上传与下载的示例代码

    文件的上传及下载功能是开发人员在日常应用及编程开发中经常会遇到的.正好最近开发需要用到此功能,虽然本人是 Android 开发人员,但还是业余客串了一下后台开发. 在本文中,您将学习如何使用 Spring Boot 实现 Web 服务中的文件上传和下载功能.首先会构建一个 REST APIs 实现上传及下载的功能,然后使用 Postman 工具来测试这些接口,最后创建一个 Web 界面使用 JavaScript 调用接口演示完整的功能.最终界面及功能如下: 项目环境 - Spring Boot

  • Spring Boot文件上传简单实例代码

    上传文件是我们日常使用最为广泛的功能之一,比如App端上传头像.本章演示如何从客户端上传到 Spring Boot 开发的 Api中. https://github.com/fishpro/spring-boot-study/tree/master/spring-boot-study-upload 1 新建 Spring Boot Maven 示例工程项目 注意:本示例是用 IDEA 开发工具 File > New > Project,如下图选择 Spring Initializr 然后点击

  • Git建立本地仓库并上传到Gitee的详细步骤

    电脑安装git客户端.注册github账号并登陆 到本地项目文件夹右键选择git bash here 输入个人信息(代码提交者) git config --global user.name "xxxx" git config --global user.email xxxxx@qq.com 在本地项目目录创建本地仓库 git init 输入命令后项目目录会有一个隐藏的.git文件夹 上传所有代码到本地仓库 git add.   (注意add后面有个点,与add之间有一空格) 这样就把代

随机推荐