一、镜像结构

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖等打包而成

以MySQL为例:

如上图所示,镜像由多个层(Layer)构成,每个层包含不同的内容。

另外,某些层可以单独抽出,组成一个镜像,作为其他自定义镜像的基础镜像来使用。

而,每执行 Dockerfile 中一条命令,则会形成一个层(Layer)。

二、Dockerfile

1. 什么是 Dockerfile

  它本质上是一个无扩展名的文本文件,其中包含构建镜像所需的指令,每个指令执行后都会形成一个层。

2. 基本指令

更新详细语法说明,请参考:官网文档

三、示例:基于 Ubuntu 构建自定义 Java 项目镜像

1. 在 Linux 系统中 创建一个目录,此处目录名以 docker-demo 为例

mkdir docker-demo

2. 将构建 Java 项目镜像所需的文件 copy 到 docker-demo 中

此处用到了:

  1. jdk8.tar.gz
  2. docker-demo.jar
  3. Dockerfile

其中,1 为 jdk 安装包,2 为一个 SpringBoot 项目编译成的 jar 包,3 为自定义的 Dockerfile。

Dockerfile 内容如下:

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local # 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar # 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8 # 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin # 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

3. 正式构建自定义镜像

docker build -t javaweb:1.0 .

-t:指定镜像 Tag,如上命令中的 javaweb:1.0  。再次强调,tag 由两部分组成,名称:版本

最后一个 “ . ” :表示当前目录,注意,与当前指定的 Tag 之间有个空格

四、基于 Java8 镜像构建 Java 项目

  上个示例基于Ubuntu基础镜像构建自定义镜像,需要自己构建 JDK 相关内容,略显麻烦。所以大多数情况下,我们可以基于一个安装好 JDK 的镜像之上,来构建自定义镜像。

  例如,java:8-alpine 镜像就是一个他人基于基础镜像(操作系统)构建好的JDK镜像,假如我们以此为基础镜像构建自定义镜像,则可以省略 JDK 安装步骤。

  Dockerfile 将简化成这样:

# 指定基础镜像
FROM java:8-alpine # 拷贝java项目的包(为什么要考虑一下java包暂不理解,可能构建镜像后,使用的java包会被删除,或者说挪到构建的镜像中,待验证)
COPY ./docker-demo.jar /tmp/app.jar # 暴露端口
EXPOSE 8090 # 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

  接下来再次使用构建镜像的命令来构建镜像即可。

Dockerfile自定义镜像的更多相关文章

  1. 编写Dockerfile自定义镜像

    要求 编写一个Dockerfile自定义centos镜像,要求在容器内部可以使用vim和ifconfig命令,并且登入落脚点为/usr/local 编写Dockerfile FROM centos M ...

  2. DOCKER 学习笔记2 认识dockerfile自定义镜像

    Dockerfile 概念 Dockerfile 是一个文本文件,但包含所构建容器在运行时候的参数.库.资源配置.可以简单理解为我们现有的镜像,比如Centos/Nginx 但我们需要构建一个容器的时 ...

  3. 创建Python数据分析的Docker镜像+Docker自定义镜像commit,Dockerfile方式解析+pull,push,rmi操作

    实例解析Docker如何通过commit,Dockerfile两种方式自定义Dcoker镜像,对自定义镜像的pull,push,rmi等常用操作,通过实例创建一个Python数据分析开发环境的Dock ...

  4. Docker学习(六)Dockerfile构建自定义镜像

    Docker学习(六)Dockerfile构建自定义镜像 前言 通过前面一篇文章可以知道怎么去使用一个镜像搭建服务,但是,如何构造自己的一个镜像呢,docker提供了dockerfile可以让我们自己 ...

  5. Dockerfile详解,以及构建自定义镜像

    Dockerfile使用 前面的操作我们一直下载下载官方已经构建好的镜像,直接下载后就可以run,如果我们想要在镜像中添加自己的应用,比如在tomcat中添加自己的app,构建一个自定义的镜像,那么我 ...

  6. 编写 Dockerfile 生成自定义镜像

    一般情况下我们可以从公共渠道诸如 DockerHub 获取镜像上获取镜像,但是在实际生产过程中,往往需要定制化的镜像,例如修改一些配置文件,增加一些特殊的命令或软件等需求,这时就需要通过编写 Dock ...

  7. docker基本概念,创建、起动实例,保存自定义镜像等常用操作

    14年docker火了一阵,当时自学整理了一份文档,后来冷落了. 现在发现很多同事还是想学习docker,但无从下手,所以重新整理了这篇分享,10分钟就可以带你彻底理解docker,并能够创建属于自己 ...

  8. docker 笔记(基本概念、快速运行、自定义镜像)

    1.docker docker是一个打包应用的工具 非常强大,能把操作系统也打在包里,进行无差别部署和运行. 所以docker也被认为是建立在操作系统上的虚拟机.   2.基本概念 镜像(image) ...

  9. docker 14 dockerfile自定义mycentos

    Base镜像(scratch) Docker Hub中99%的镜像是通过在base镜像中安装和配置需要的软件构建出来的.也就是说base镜像是所有其他镜像的鼻祖. hub默认centos镜像是什么情况 ...

  10. Docker入门3------手动编辑自定义镜像

    手动编辑自定义镜像 查看本地现有镜像: 基于centos创建一个,会自动下载centos最新原始镜像 docker run -it --name=web centos /bin/bash 然后在容器内 ...

随机推荐

  1. 通过Terraform创建GCP Pubsub

    1 简介 Terraform是管理许多平台的基础设施的工具,如AWS.GCP和Azure.这篇文章将讲解如何通过Terraform来管理GCP Pub/Sub. 创建GCP项目请参考:初始化一个GCP ...

  2. [硬核] Bootstrap Blazor Table 综合演示例子

    知识点: 1.导入导出 2.分页功能 3.增删改查 4.批量删除 5.批量编辑(审核) 6.列排序与列搜索 7.顶部搜索实现所有列搜索 8.高级搜索实现多条件搜索 9.顶部与刷新与视图列 10.实现文 ...

  3. 又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速

    摘要:上海人工智能实验室的浦视开源算法体系(OpenMMLab)团队基于昇腾AI发布了MMDeploy 0.10.0版本,该版本已支持OpenMMLab算法仓库在昇腾异构计算架构CANN上的推理部署. ...

  4. 【公式详解】【优秀论文解读】EDPLVO: Efficient Direct Point-Line Visual Odometry

    前言 多的不说哈 2022最佳优秀论文 来自美团无人机团队 作者提出了一种使用点和线的高效的直接视觉里程计(visual odometry,VO)算法-- EDPLVO .他们证明了,2D 线上的 3 ...

  5. day05-Spring管理Bean-IOC-03

    Spring管理Bean-IOC-03 2.基于XML配置bean 2.15bean的生命周期 bean对象的创建是由JVM完成的,然后执行如下方法: 执行构造器 执行set相关方法 调用bean的初 ...

  6. Java 进阶P-2.5+P-2.6

    包 Java 包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一 ...

  7. 聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS)

    聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS) juc包下的一堆并发工具类是我们日常开发特别是面试中常被拿来问的八股文之一,为了工作也好,为了面试也罢,今天 ...

  8. JavaScript 评测代码运行速度

    一.使用 performance.now() API 在 JavaScript 中,可以使用 performance.now() API 来评测代码的运行速度.该 API 返回当前页面的高精度时间戳, ...

  9. Git03 自建代码托管平台-GitLab

    1 GitLab 简介 GitLab 是由 GitLabInc.开发,使用 MIT 许可证的基于网络的 Git 仓库管理工具,且具有wiki 和 issue 跟踪功能.使用 Git 作为代码管理工具, ...

  10. C# 委托原理刨析,外加和事件对比

    什么是委托 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用. 在实例化委托时,你可以将其实例与任何具有兼容参数和返回类型的方法进行绑定. 你可以通过委托实例调用方法. 简单的理解,委 ...