dockerfile概述

一、基于dockerfile创建

1.1 什么是dockerfile

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

1.2 dockerfile的组成

Dockerfile每行支持一条指令,每条指令可携带多个参数,支特使用以“#“号开头的注释(可以通过&&写入多条命令)

1.3 dockerfile结构

 Dockerfile是由一组指令组成的文件Dockerfile结构四部分
· 基础镜像信息

· 维护者信息

· 镜像操作指令

· 容器启动时执行指令(cmd)

二、dockerfile操作指令

指令含义
from镜像指定新的镜像所基于的镜像,第一条必须为from,每创建一个镜像就需要一条from指令。(开启一个新镜像,必须写的一行指令)
maintainer名字说明镜像的维护人的信息
run命令在所基于的镜像上执行命令,并提交到新的镜像中。
CMD[“要运行的程序“,”参数1,“参数2“]指定启动容器时要运行的命令或者脚本,Dockerfile只能有—条CMD命令,如果指定多条则只能最后一条被执行。
expose指定新镜像加载到Docker时要开启的端口
ENV设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY源文件/目录 目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要Dockerfile在相同的目录中
VOLUME[“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器的用户
WORKDIR路径为后续的RUN,CMD,ENTRYPOINT指定工作目录
ONBUILD命令指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTCHECK健康检查

三、docker镜像分层

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

· Docker镜像位于bootfs内核之上
· 每一层镜像的下一层成为父镜像
· 第一层镜像成为base image(操作系统环境镜像)
· 容器层(可读可写),在最顶层( writable)
· 容器层以下都是readonly

container 读写层(执行)
image(只读)
base image:基础镜像
bootfs+rootfs+aufs/overlay2+LXC(kernel)

bootfs:主要引导加载内核kernel,linux刚启动会加载bootfs文件系统,在docker镜像的最底层是bootfs
aufs:存储引擎
overlay2:存储引擎
rootfs:个性化版本信息,统一化linux版本的操作系统
LXC:辅助docker实现虚拟化
在这里插入图片描述

3.2 涉及技术

 bootfs (boot file system) 内核空间主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。
 在linux操作系统中(不同版本的linux发行版本),linux加载bootfs时会将rootfs设置为read-only,系统自检后会将只读改为读写,让我们可以在操作系统中进行操作
rootfs (root file system)内核空间
在bootfs之上 (base images,例如centos 、 ubuntu)
包含的就是典型Linux系统中的 /dev,/proc,/bin,/etc 等标准目录和文件rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等

四、小结

4.1AUFS 与overlay/ overlay2

AUFS 与overlay/ overlay2 (docker 高版本)AUFS是一种联合文件系统。它使用同一个Linux
host上的多个目录,逐个堆叠起来,对外呈现出一个统一的文件系统。AUFS使用该特性,实现了Docker镜像的分层而docker使用了overlay/overlay2存储驱动来支持分层结构

OverlayFS将单个Linux主机上的两个目录合并成一个目录。这些目录被称为层,统一过程被称为联合挂载

overlay结构:
overlayfs在linux主机上只有两层,一个目录在下层,用来保存镜像(docker),另外一个目录在上层,用来存储容器信息

1、rootfs、基础镜像
2、lower	下层信息(为镜像层,可读)
3、upper	上层目录(容器信息,可写)
4、worker	运行的工作目录(copy-on-write写时复制-》准备容器环境)
5、merged	"视图层” (容器视图)

4.2 cmd和entrypoint区别

首先要讲一讲exec和shell的区别
exec:容器加载时使用的启动的第一个任务进程
shell:容器加载时使用的第一个bash (/bin/bash /bin/sh /bin/init)
如果 entrypoint使用了shell模式,CMD指令会被忽略。
如果entrypoint使用了exec模式,CMD指定的内容被追加为 entrypoint指定命令的参数。
如果entrypoint使用了exec模式,CMD也应该使用exec模式。
cmd是容器环境启动时默认加载的命令
entrypoint是容器环境启动时第一个加载的命令程序/脚本程序 init
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值