springboot项目打包镜像中的Dockerfile文件

在讲Dockerfile文件之前应该先讲下maven的一个插件叫:dockerfile-maven-plugin。他们是组合一起用的

一、dockerfile-maven-plugin

该maven插件可以实现由java源代码直接到docker镜像,配置了dockerfile-maven-plugin插件的maven工具就像是一个管道,一端输入Java源代码, 另一端直接输出docker镜像。在dockerfile-maven-plugin插件出现之前,还有一个maven插件是docker-maven-plugin,是由同一个作者创造,两个 插件的设计思想是有差别的,前者需要独立编写Dockerfile文件,后者允许没有Dockerfile文件,所有的docker相关配置都写在pom文件的plugin中,这样使maven插件显得很笨重,并且如果脱离了这个maven插件还得重写编写Dockerfile,不够灵活。

因此,推荐使用maven插件:dockerfile-maven-plugin

查看pom中插件

<!--指定一个名字而已~-->
<properties>
<docker.image.prefix>xuxiaoxiao</docker.image.prefix>
</properties> <build>
<finalName>eureka-server</finalName>
<plugins>
<!--Docker打包镜像 插件-->
<plugin>
<!--三个坐标定位dockerfile插件-->
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.7</version>
<configuration>
<!--这里指定打包镜像的名称-->
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin> </plugins>
</build>

二、Dockerfile文件

先贴出,上一篇博客Dockerfile文件完整版,再来一个一个分析。

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

1、FORM,这是引入一个父镜像,在此基础上进行添加只读层。之前我写过,镜像可以理解成由一层层只读层组成,FORM下面的命令,可以理解就是在已有的只读层,添加只读层。FORM可以有多个,但最上面的一定是FROM命令。

2、VOLUME,配置一个具有持久化功能的目录,主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp。该步骤是可选的。

通俗解释:默认情况下,容器不使用任何 volume,此时,容器的数据被保存在容器之内,它只在容器的生命周期内存在,会随着容器的被删除而被删除。

因为如果你不想在容器删除后,容器的数据也被删除,那么就可以指定持久化目录。它被设计用来保存数据,而不管容器的生命周期。因此,当你删除一个容器时,Docker 肯定不会自动地删除一个volume。

3、ARG, 设置编译镜像时加入的参数。 这里的JAR_FILE就是maven插件中的<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>

4、COPY,只支持将本地文件复制到容器 ,还有个ADD更强大但复杂点。

5、ENTRYPOINT 容器启动时执行的命令。这里就是java -jar app.jar

当然Dockerfile的命令说明官网有标准文档,以后有需要会再回过来查看官方文档。

[Dockerfile官方文档] (https://docs.docker.com/engine/reference/builder/#usage)

### 参考

1、理解Docker(8):Docker 存储之卷(Volume)

```
如果一个人充满快乐,正面的思想,那么好的人事物就会和他共鸣,而且被他吸引过来。同样,一个人老带悲伤,倒霉的事情也会跟过来。

                                              ——在自己心情低落的时候,告诫自己不要把负能量带给别人。(大校8)

【Docker】(6)---Dockerfile文件的更多相关文章

  1. Docker(十)-Docker创建DockerFile文件

    制作Docker image 有两种方式: 使用 Docker container,直接构建容器,再导出成 image 使用. 是使用 Dockerfile,将所有动作写在文件中,再 build 成 ...

  2. Docker之Dockerfile文件

    Dockerfile是一堆指令,每一条指令构建一层,因此每一条指令的内容就是描述该层应当如何构建,在docker build的时候,按照该指令进行操作,最终生成我们期望的镜像文件 Dockerfile ...

  3. Centos7安装Docker 基于Dockerfile 搭建httpd运行环境

    Centos7安装Docker 基于Dockerfile 搭建httpd运行环境 docker docker搭建 docker build 本文档完成目标内容如下 使用Docker搭建http服务器一 ...

  4. ASP.NET CORE做的网站运行在docker上(不用dockerfile文件部署)

    按网上的做法用dockerfile文件是可以弄得出来的,http://www.docker.org.cn/article/119.html, 不过我想把网站文件放在外面硬盘目录,再映射进去,这样只要在 ...

  5. Docker定制容器镜像(利用Dockerfile文件)

    1.创建Dockerfile文件 新建一个目录,在里面新建一个dockerfile文件(新建一个的目录,主要是为了和以防和其它dockerfile混乱 ) [root@docker01 myfiles ...

  6. Docker镜像构建文件Dockerfile及相关命令介绍

    使用docker build命令或使用Docker Hub的自动构建功能构建Docker镜像时,都需要一个Dockerfile文件.Dockerfile文件是一个由一系列构建指令组成的文本文件,doc ...

  7. docker Dockerfile文件的编写部分命令

    镜像的构建过程:编写dockerfile文件,执行docker build 进行构建镜像,最后docker run 运行容器镜像实例. docker build -t mycentos:1.01 . ...

  8. dockerfile定制docker的脚本文件

    Dockerfile文件详解 #指定操作系统 FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image FROM centos #使用base ...

  9. Docker学习笔记-Dockerfile文件详解

    什么是Dockerfile? Docker中有个非常重要的概念叫做--镜像(Image).Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运 ...

随机推荐

  1. RESTful-2一分钟理解什么是REST和RESTful

    从事web开发工作有一小段时间,REST风格的接口,这样的词汇总是出现在耳边,然后又没有完全的理解,您是不是有和我相同的疑问呢?那我们一起来一探究竟吧! 就是用URL定位资源,用HTTP描述操作. 知 ...

  2. ImCash:论拥有靠谱数字钱包的重要性!

    数字货币被盗已经不是什么新鲜事,前有交易所币安被黑客攻击,Youbit破产,后有“钓鱼邮件“盗号木马,安全对于数字货币用户来讲至关重要. 现行市场痛点:   2017年9月以太坊Parity钱包的漏洞 ...

  3. java使用Jedis远程访问CentOs7linux时出现拒绝连接的错误

    使用Jedis出现Connection refused的解决方案 当我们利用Jedis操作服务器的Redis数据库时,需要先将远程服务器的端口(默认端口是6379)开放,命令如下:   #/sbin/ ...

  4. 关于resharper激活

    resharper 是一款非常强大的vs辅助开发插件,提供了很多快捷操作功能,本人已经离不开它了,但是resharper总会遇到lincese过期,需要激活的问题,现在提供以下方式,仅供参考 1.打开 ...

  5. Android中的数据持久化机制

    Android中几种最简单但是却最通用的数据持久化技术:SharedPreference.实例状态Bundle和本地文件. Android的非确定性Activity和应用程序生存期使在会话间保留UI状 ...

  6. SDL中按键对应的值

    想用SDL的按键检测,网上找了半天都没找到SDL中按键的值的定义,索性自己去看头文件,在SDL_keysym.h中. 其实很多键的值和它们的ASCII码是相同的. 其他更多的用法,可以参考这篇博客:h ...

  7. IDEA 使用Mybatis效率飞起来的必备工具:MybatisCodeHelperPro 最新破解版,亲测可用!

    IDEA 2018.3.5 最新版本亲测可用. Git地址:https://github.com/pengzhile/MyBatisCodeHelper-Pro-Crack/releases 下载最新 ...

  8. Python操作Excel, 开发和调用接口,发送邮件

    笔记: 上周回顾: 模块: 导入模块的顺序 lyl.py # def hhh(): pass name = 'lyl' a.py import lyl import sys from lyl impo ...

  9. JavaScript(九)

    内置对象 1.document document.referrer //获取上一个跳转页面的地址(需要服务器环境) 2.location window.location.href //获取或者重定ur ...

  10. c++链表基本操作

    #include <stdlib.h> #include <malloc.h> #include <stdio.h> typedef struct Node { i ...