Dockerfile镜像创建

本文详细介绍了Dockerfile的概念和结构,包括如何基于Dockerfile创建镜像,以及镜像分层的原理,如AUFS、overlay/overlay2。此外,文章还探讨了CMD和ENTRYPOINT指令在Dockerfile中的使用及其区别。
摘要由CSDN通过智能技术生成

目录

一、Dockerfile概念

二、Docker镜像的创建

2.1 基于已有的镜像创建

2.2 基于本地模板创建

2.3 基于dockerfile创建

dockerfile结构

构建镜像的命令

三、镜像分层的原理

3.1 docker镜像分层(基于AUFS构建)

3.2 bootfs内核空间

3.3 rootfs内核空间

3.4 AUFS与overlay/overlay2

overlay结构

3.5 联合文件系统(UnionFS)

3.6 镜像加载原理

四、dockerfile操作指令

4.1 CMD和ENTRYPOINT介绍

exec和shell模式的区别

exec模式下传入命令

4.2  使用exec模式无法输出环境变量

4.3 shell模式


一、Dockerfile概念

Docker是一个文本文件,文件中包含了一条条的指令(instruction),用于构建镜像。每一条指定构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建

  • dockerfile是自定义镜像的一套规则
  • docker由多条指定构成,docker的每一条指令都会对应于docker镜像中的每一层

dockerfile的原理就是镜像分层。

① Dockerfile中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后将不再存在,再往后进行重新的创建与操作)。
② 镜像层将被缓存和复用(后续的镜像层将基于前面的一层,每一层都会有下面几层的缓存)
③ 当dockerfile的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了(后续操作必然更改前面的镜像层),那么对应的镜像层缓存就会失效(自动销毁)。
④ 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效(第一层不成功,那么第二层也不成功,相当于地基)。
⑤ 容器的修改并不会影响镜像,如果在某一层中添加一个文件,在下一层中删除它,镜像中依然会包含该文件。

二、Docker镜像的创建

创建镜像的三种办法

  • 基于已有镜像的创建
  • 基于本地模板创建
  • 基于Dockerfile创建

2.1 基于已有的镜像创建

原理:将容器里面运行的程序及运行环境打包生成新的镜像

docker commit [选项] [容器id] 仓库名:标签

常用选项

选项 描述
-m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行

2.2 基于本地模板创建

原理:通过导入操作系统模板文件生成新的镜像

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz
#使用wget命令导入为本地镜像

docker import debian-7.0-x86-minimal.tar.gz -- debian:v1
或
cat debian-7.0-x86-minimal.tar.gz |docker import - debian:v1
#生成镜像

docker images
#查看镜像

docker run -itd debian:v1 bash
#创建并启动容器

2.3 基于dockerfile创建

  • dockerfile是一组指令组成的文件
  • dockerfile每行支持一条指令,每条指令可携带多个参数,一条指令可以用&&方式,去写多条指令
  • dockerfile支持以"#"为开头的注释

dockerfile结构

  • 基于镜像信息(linux发行版:比如centos、ubuntu、suse、debian、alpine、redhat)
  • 维护者信息(docker search可查看)
  • 镜像操作指令(tar yum make)
  • 容器启动时执行指令(cmd [“/root/run/sh”]、entrypoint、都是系统启动时,第一个加载的程序/脚本/命令)

构建镜像的命令

可以在构建镜像时指定资源限制

在编写Docker时,需要遵守严格的格式

  • 第一行必须使用FROM指令指明所基于的镜像名
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值