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

作者:烟雨观春柳 时间:2023-05-01 02:45:51 

前言

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

第一:环境

1.虚拟机安装的centos7。

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

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

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

1.springboot项目代码:

层次图:

使用Docker部署打包发布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 文件作为 &ldquo;app.jar&rdquo; 添加到容器的
ENTRYPOINT执行项目 app.jar。为了缩短Tomcat 启动时间,添加一个系统属性指向 &ldquo;/dev/urandom&rdquo; 作为 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目录下。如图所示:

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

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,查看如下图:

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

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&hellip;&hellip;的步骤。

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

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

dockerfile指令

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

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

错误2:

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

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

来源:https://www.cnblogs.com/emperorking/articles/11244253.html

标签:Docker,部署,打包,发布,springboot
0
投稿

猜你喜欢

  • Linux环境(CentOS6.7 64位)下安装subversion1.9.5的方法

    2022-04-08 02:03:58
  • linux系统安装git及git常用命令

    2023-08-07 02:37:28
  • 不明黑客再袭韩国 全程解密DDoS攻击

    2009-12-08 13:19:00
  • VMWare虚拟机为Windows Server 2008设置静态IP的方法

    2023-08-28 08:16:12
  • 行业网站搜索优化与网站建设的四个特殊点

    2008-11-19 16:56:00
  • Git提交日志修改方法实例汇总

    2023-10-16 10:20:36
  • 网易网站部业务大调整:分拆资讯与产品内容

    2010-03-08 08:29:00
  • 电脑报:百度已成为一台失控的敛财机器

    2008-12-01 16:23:00
  • vmware12中安装 RedHat RHEL7.2系统的详细步骤(图文)

    2023-10-14 02:03:08
  • IBM首次涉足电子商务业务

    2009-11-17 10:24:00
  • 用Java实现Web服务器

    2007-03-26 11:00:00
  • Discuz!7.0电子商务功能详解

    2009-02-16 20:34:00
  • 探索网站编辑发展之道

    2008-02-25 13:48:00
  • 8项黄金策略增加你的反向链接

    2009-03-11 10:28:00
  • 安装Linux与Oracle数据库步骤精讲

    2009-09-09 09:08:00
  • 网页恶意代码对IE浏览器的危害及解决方法

    2007-08-06 17:41:00
  • 从模板标签看帝国ECMS和动易SiteFactory的优劣

    2009-02-24 12:39:00
  • Google Adsense 搜索联盟问答

    2008-06-08 12:37:00
  • windows2003服务器安全设置完全教程

    2010-05-11 17:51:00
  • 微软出价446亿美元洽购雅虎

    2008-02-02 10:13:00
  • asp之家 网站运营 m.aspxhome.com