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

哈哈,红叉叉忽略就行了,我的环境问题,无所谓。
代码:pom.xml
4.0.0 org.springframework.boot spring-boot-starter-parent 2.2.0.BUILD-SNAPSHOT com.king springdocker 0.0.1-SNAPSHOT springdocker Demo project for Spring Boot UTF-8 UTF-8 springdemo 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine junit junit org.springframework.boot spring-boot-maven-plugin com.spotify docker-maven-plugin 0.4.3 ${docker.image.prefix}/${project.artifactId} src/main/docker / ${project.build.directory} ${project.build.finalName}.jar spring-snapshots Spring Snapshots https://repo.spring.io/snapshot true spring-milestones Spring Milestones https://repo.spring.io/milestone spring-snapshots Spring Snapshots https://repo.spring.io/snapshot true spring-milestones Spring Milestones https://repo.spring.io/milestone
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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





