文章目录

  • 一、镜像的分层结构
  • 二、镜像的构建
  • 1. 从容器构建镜像(简:容器镜像) --commit命令
  • 1.1 commit 详述
  • 1.2 构建方式
  • 2. Dockerfile构建镜像
  • 2.1 Dockerfile 参数
  • 2.2 构建方式


一、镜像的分层结构

grafana 容器镜像 容器镜像构建_Docker


如上图所示:

  • 共享宿主机的kernel
  • base镜像提供的是最小的Liunx发行版
  • 同一docker主机支持运行多种Liunx发行版
  • 采用分层结构的最大好处是:共享资源

grafana 容器镜像 容器镜像构建_docker_02


grafana 容器镜像 容器镜像构建_grafana 容器镜像_03

grafana 容器镜像 容器镜像构建_Dockerfile_04

grafana 容器镜像 容器镜像构建_Docker_05

如上图所示:

  • Copy-on-Write 可写容器层
  • 容器层以下所有镜像层都只是可读的
  • docker 从上往下依次查找文件,即最上最早生效
  • 容器层保存镜像变化的部分,并不会对镜像本身进行任何修改
  • 一个镜像最多127层

例:拉取镜像部分操作

grafana 容器镜像 容器镜像构建_docker_06


grafana 容器镜像 容器镜像构建_Docker_07


grafana 容器镜像 容器镜像构建_docker_08


grafana 容器镜像 容器镜像构建_docker_09

grafana 容器镜像 容器镜像构建_grafana 容器镜像_10

二、镜像的构建

1. 从容器构建镜像(简:容器镜像) --commit命令

1.1 commit 详述

a. docker commit 构建新镜像三部曲

  • 运行容器
  • 修改容器
  • 将容器保存为新的镜像

b. 缺点

  • 效率低、可重复性若,容易出错
  • 使用者无法对镜像进行审计,存在安全隐患

1.2 构建方式

grafana 容器镜像 容器镜像构建_Docker_11

grafana 容器镜像 容器镜像构建_Dockerfile_12

grafana 容器镜像 容器镜像构建_docker_13


grafana 容器镜像 容器镜像构建_Docker_14

2. Dockerfile构建镜像

2.1 Dockerfile 参数

grafana 容器镜像 容器镜像构建_Docker_15

参数:maintainer

grafana 容器镜像 容器镜像构建_grafana 容器镜像_16

参数:ADD

grafana 容器镜像 容器镜像构建_docker_17

参数:ENV

grafana 容器镜像 容器镜像构建_Docker_18

参数:EXPOSE

grafana 容器镜像 容器镜像构建_docker_19

grafana 容器镜像 容器镜像构建_Dockerfile_20


查看端口

grafana 容器镜像 容器镜像构建_Docker_21

grafana 容器镜像 容器镜像构建_Dockerfile_22

grafana 容器镜像 容器镜像构建_Docker_23

参数:VOLUME

grafana 容器镜像 容器镜像构建_Dockerfile_24

grafana 容器镜像 容器镜像构建_Dockerfile_25


grafana 容器镜像 容器镜像构建_docker_26


grafana 容器镜像 容器镜像构建_Docker_27


grafana 容器镜像 容器镜像构建_Docker_28


grafana 容器镜像 容器镜像构建_docker_29


参数:WORKDIR

grafana 容器镜像 容器镜像构建_Dockerfile_30

参数:RUN

grafana 容器镜像 容器镜像构建_grafana 容器镜像_31


grafana 容器镜像 容器镜像构建_grafana 容器镜像_32


参数:CMD & ENTRYPOINT多个命令时仅仅执行最后一个!!!

grafana 容器镜像 容器镜像构建_Dockerfile_33


grafana 容器镜像 容器镜像构建_Dockerfile_34

输出变量

grafana 容器镜像 容器镜像构建_grafana 容器镜像_35


grafana 容器镜像 容器镜像构建_Docker_36

ENTRYPOINT

grafana 容器镜像 容器镜像构建_Docker_37


grafana 容器镜像 容器镜像构建_Docker_38


参数:Shell

grafana 容器镜像 容器镜像构建_Docker_39

2.2 构建方式

a. Dockerfile语法

  • Dockerfile由一系列指令和参数组成。每条指令都必须为大写字母,并且后面要跟随一个参数
  • Dockerfile中的指令会按照顺序从上到下执行,所以应该根据需要合理安排指令的顺序
  • 每条指令都会创建一个新的镜像层并对镜像进行提交

b. Docker大体上按照如下流程执行Dockerfile中的指令

  • Docker从基础镜像运行一个容器。
  • 执行第一条指令,对容器进行修改。
  • 执行类似docker commit的操作,提交一个新的镜像层。
  • Docker再基于刚提交的镜像运行一个新的容器。
  • 执行Dockerfile中的下一条命令,直到所有指令都执行完毕

示例一:可以清晰的知道构建镜像的具体步骤

grafana 容器镜像 容器镜像构建_docker_40


grafana 容器镜像 容器镜像构建_grafana 容器镜像_41

示例二:可以观察到资源共享

grafana 容器镜像 容器镜像构建_grafana 容器镜像_42

示例三:观察到缓存特性

grafana 容器镜像 容器镜像构建_grafana 容器镜像_43