使用Docker部署打包发布springboot项目

目录
  • 前言
  • 第一:环境
  • 第二:开始描述从搞项目到docker发布:
  • 第四:各种错误教训集合。

前言

从安装docker到多种方式打包发布,编译,镜像,容器等问题,遇到种种问题,终于不负所望,一步步解决,本文我会比较大跨度的来说明一切解决办法。

第一:环境

1.虚拟机安装的centos7。

2.docker已安装好,不会的可以参看我的docker安装文章。

3。搞一个很简单的springboot项目即可,先搞定发布编译再说。

第二:开始描述从搞项目到docker发布:

1.springboot项目代码:

层次图:

哈哈,红叉叉忽略就行了,我的环境问题,无所谓。

代码:pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.0.BUILD-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.king</groupId>
    <artifactId>springdocker</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springdocker</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!--properties节点中设置docker镜像的前缀“springboot”-->
        <docker.image.prefix>springdemo</docker.image.prefix>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- tag::plugin[] -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.3</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
    <!-- end::plugin[] -->
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>

2:Dockerfile文件

FROM java:8
VOLUME /tmp
ADD springdocker-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

文件解释:

VOLUME指定了临时文件目录为/tmp。其效果是在主机/var/lib/docker目录下创建了一个临时文件,并链接到容器的/tmp。改步骤是可选的,
如果涉及到文件系统的应用就很有必要了。/tmp目录用来持久化到 Docker 数据文件夹,因为 Spring Boot 使用的内嵌 Tomcat 容器默认使用/tmp作为工作目录
项目的 jar 文件作为 “app.jar” 添加到容器的
ENTRYPOINT执行项目 app.jar。为了缩短Tomcat 启动时间,添加一个系统属性指向 “/dev/urandom” 作为 Entropy Source

3:其余代码:

package com.king.springdocker.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value="/demo")
public class helloController {
@RequestMapping(value="/hello")
public String hello() {
    return "hello king!!!!!!";
}
}

========applicationProperties========
server.port=80
server.servlet.context-path=/king

=============================
package com.king.springdocker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringdockerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringdockerApplication.class, args);
    }

}
=====================================

第三:

1.xhell进入服务器,我是在/home/下创建文件夹king,本地用开发工具将项目打包,将所打jar包和Dockerfile,放入king目录下。如图所示:

2.执行如下命令:

docker build -t hellodocker .
命令解释:hellodocker名字随你喜欢,镜像名自己起,-t就是代表要构建的镜像tag。
不要忘记点,点是代表是在当前目录,也就是现在Dockerfile文件所在的目录。

[root@localhost king]# docker build -t hellodocker .
Sending build context to Docker daemon  17.36MB
Step 1/6 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
 ---> d23bdf5b1b1b
Step 2/6 : VOLUME /tmp
 ---> Running in a6293dd37995
Removing intermediate container a6293dd37995
 ---> 08f10f02092e
Step 3/6 : ADD springdocker-0.0.1-SNAPSHOT.jar app.jar
 ---> c4eaf809b297
Step 4/6 : RUN sh -c 'touch /app.jar'
 ---> Running in 6c8a30b4220f
Removing intermediate container 6c8a30b4220f
 ---> dba5ee5d2d27
Step 5/6 : ENV JAVA_OPTS=""
 ---> Running in 25f5b705eb27
Removing intermediate container 25f5b705eb27
 ---> e1982350619d
Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 ---> Running in f98b4cc2f63b
Removing intermediate container f98b4cc2f63b
 ---> 1d881201c9c5
Successfully built 1d881201c9c5
Successfully tagged hellodocker:latest

3.docker images,查看如下图:

hellodocker成功出现。现在开始执行,打开浏览器,ip端口地址访问,哎呦喂,不行哦,看下咋回事。

发现原来是我开启的是80端口,所以说网上各种教程例子,看多了容易照搬,还是自己思考好。

改为:docker run -d -p 80:80 hellodocker。

嗯,重新访问地址,好,搞定,成功打印:hello king!!!!!!

第四:各种错误教训集合。

之前网上找资料,这个博客,那个博客,结果呢,不是这种就是那种错,哎,也怨不得别人,谁能说那么详细呢。总结下:

错误一:Dockerfile文件为:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD springdocker-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:/dev/./urandom -jar /app.jar" ]

报错如下:

Sending build context to Docker daemon  17.36MB
Step 1/6 : FROM frolvlad/alpine-oraclejdk8:slim
pull access denied for frolvlad/alpine-oraclejdk8, repository does not exist or may require 'docker login'

也是无语了,FROM换了好多没搞定,又是搞各种镜像,又是配置的,最后反正是改为:FROM java:8,搞定了,这个呢,看下docker命令介绍,好好理解下用法:

docker概念

  1、docker:最早是dotCloud公司出品的一套容器管理工具,但后来Docker慢慢火起来了,连公司名字都从dotCloud改成Docker。

  2、dockerfile:它是Docker镜像的描述文件,可以理解成火箭发射的A、B、C、D……的步骤。

  3、docker镜像:通过Dockerfile做出来的,包含操作系统基础文件和软件运行环境,它使用分层的存储方式。

  4、docker容器:是运行起来的镜像,简单理解,Docker镜像相当于程序,容器相当于进程。

dockerfile指令

  Dockerfile由多条指令组成,每条指令在编译镜像时执行相应的程序完成某些功能,由指令+参数组成,以逗号分隔,#作为注释起始符,虽说指令不区分大小写,但是一般指令使用大些,参数使用小写

错误2:

之前还用过将项目整体放到服务器,然后用命令:mvn package docker:build,去打包编译,结果报错,其实也是由于Dockerfile的from来源不对。报错如下:

到此这篇关于使用Docker部署打包发布springboot项目的文章就介绍到这了,更多相关Docker部署打包发布springboot内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • 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

  • 使用Maven将springboot工程打包成docker镜像

    目录 Maven打包成docker镜像 1.增加docker插件依赖 2.docker插件的配置 3.编写Dockerfile 4.Maven命令打包 5.注意事项 6.Window10 下安装docker Maven打包成docker镜像 由于工作原因,需要通过maven将springboot项目打包成docker镜像,先前以为只能在linux上完成,最近调研了一下,也可以在window环境下进行打包. ​ 下面以thinkpad E470,windows10操作系统以及eclipse开发集成

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

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

  • 使用Docker部署打包发布springboot项目

    目录 前言 第一:环境 第二:开始描述从搞项目到docker发布: 第四:各种错误教训集合. 前言 从安装docker到多种方式打包发布,编译,镜像,容器等问题,遇到种种问题,终于不负所望,一步步解决,本文我会比较大跨度的来说明一切解决办法. 第一:环境 1.虚拟机安装的centos7. 2.docker已安装好,不会的可以参看我的docker安装文章. 3.搞一个很简单的springboot项目即可,先搞定发布编译再说. 第二:开始描述从搞项目到docker发布: 1.springboot项目

  • IDEA 通过docker插件发布springboot项目的详细教程

    一.编写Dockerfile文件 (1)右键项目名,新建一个文本文件,把名字改成Dockerfile,不用后缀.放在项目根目录下. (2)填写Dockerfile内容 FROM openjdk:8 VOLUME /tmp ADD target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] FROM openjdk:8  // 表示基础环境是jdk8 ADD target/*.jar app

  • 使用jenkins一键打包发布vue项目的实现

    jenkins的安装 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java 程序. 安装 这里的操作系统为WSL Ubuntu,其它系统的安装的请参考jenkins官方文档 wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo de

  • docker-compose镜像发布springboot项目的流程分析

    简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project).Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理.因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理. Docker-Compose将所管理的

  • Docker部署前后端分离项目的实现示例

    目录 一.环境准备 二.运行镜像 解决问题 Redis安装 Nginx安装 三.打包项目 四.部署 一.环境准备 服务器 阿里云服务器 1核+2GB即可 软件 本次部署采用的是 docker,因此软件环境都在 docker 上 我们需要 MySQL 8.0.x版本,Redis,Nginx,提前下好镜像即可 二.运行镜像 MySQL安装 MySQL我用的是8.0.x的版本,在部署过程中出现了一些问题,在这里跟大家分享一下 docker run \ -p 3306:3306 \ --name mys

  • 使用docker部署django技术栈项目的方法步骤

    随着Docker的普及成熟,已经逐渐成为部署项目的首选,今天来和大家分享下如何使用docker部署django技术栈项目. 我们这里说的Django技术栈为:python3.6.Django2.2.redis.mysql.celery.gunicorn和nginx.在实际的生产项目中,这些组件分布在集群的不同机器,如Nginx.redis和Mysql可能会有单独的团队或部门负责.涉及的部署架构和容器的编排会更为复杂,本文暂不去深究.本文主要介绍,如何使用 docker-compose 来编排这些

  • Docker compose部署SpringBoot项目连接MySQL及遇到的坑

    前面使用docker简单部署了下SpringBoot项目并介绍了什么是Dockerfile,如果是镜像比较多的情况下如何一键交付呢?Docker-compose!,理解了Docker-compose后面学习K8s就会好理解一些 一.安装docker-compose 环境Centos7 //下载docker-compose curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-

  • SpringBoot项目部署到腾讯云的实现步骤

    目录 将SpringBoot项目部署到腾讯云 1.下载MySql 2.导入sql文件 3.下载JDK 4.将本地程序打包成jar 5.腾讯云部署jar 将SpringBoot项目部署到腾讯云 注意: 1.如果已经下载好MySql和JDK,可以直接跳过1.3步骤.但是不要忘记步骤2哦. 2.如果已经有Mysql但是想要换版本号,切记不要直接下载,要先把旧版本的Mysql删除干净再重新下载. 1.下载MySql 这里,我们将mysql下载到我们的/usr/local/目录下. cd /usr/loc

  • 浅谈maven 多环境打包发布的两种方式

    集合工程中 maven 的多环境打包发布 在一个项目的开发过程中,我们经常要进行 开发环境 , 测试环境, 正式环境 打包部署,如果每次打包过程中我们都是人为的 根据 不同 环境 去修改一些 配置文件 ,这样不但工作量太庞大,而且还容易出错,而maven的插件正好解决了我们的困扰. 1. maven 聚合工程的创建 创建过程直接忽略,看最终的结果图 第一种方式 2. 不同环境打包的配置 因为要发布一个webapp的主要配置文件集中在 web工程中,故而,相关的配置文件都在 ecps-manage

  • IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署

    之前博客已经谈到配置docker远程链接服务,这里再介绍如何在IDEA中配置docker,将项目部署到服务器上 前文 Docker之开启远程访问的实现 idea2021激活教程 https://www.yuque.com/docs/share/b996d27e-c888-45f2-bb1e-f6db5efe2485?# https://www.jb51.net/article/178193.htm 去插件中心安装Docker插件,安装完重启IDEA.这个简单 配置连接远程docker,打开Doc

随机推荐