base镜像
base镜像有两层含义:
- 不依赖其他镜像,从scratch构建
- 其他镜像可以之为基础进行扩展
base镜像提供的都是最小安装的Linux发行版本 。
我们大部分镜像都将是基于base镜像构建的 。所以,通常使用的是官方发布的base镜像 。可以在docker hub里找到 。比如centos:https://hub.docker.com/_/centos
我们可以自己构建docker base镜像,也可以直接使用已有的base镜像 。比如centos 。我们可以直接从docker hub上拉取 。
拉取
【Docker镜像分层的原理详解】docker pull centos查看
docker images centos REPOSITORYTAGIMAGE IDCREATEDSIZEcentoslatest1e1148e4cc2c2 months ago202MB可以看到最新的centos镜像只有200mb,是不是觉得太小了?这是因为docker镜像在运行的时候直接使用docker宿主机器的kernel 。
Linux操作系统由用户空间和内核空间构成 。
内核空间是kernel,用户空间是rootfs,不同发行版的区别主要是rootfs 。比如Ubuntu 14.04使用 upstart 管理服务,apt 管理软件包;而 CentOS 7 使用 systemd 和 yum 。这些都是用户空间的不同,Kernel差别不大 。
所以Docker可以同时支持多种 Linux 镜像,模拟出不同的操作系统环境 。
base镜像只是用户空间和发行版本一致,内核空间使用的是Docker宿主机器的Kernel 。
存储结构
上文里展示了如何下载一个base镜像 。我们通常是基于这份base镜像来构建我们自己的镜像 。比如,在centos里添加一个nginx负载均衡 。首先,得需要了解镜像的结构是什么 。
官方文档: https://docs.docker.com/storage/storagedriver/
Docker镜像的分层结构
启动镜像时,一个新的可写层会加载到镜像的顶层 。这一层通常称为"容器层",之下是"镜像层" 。
容器层可以读写,容器所有发生文件变更写都发生在这一层 。镜像层只允许读取,read-only 。

文章插图
修改时复制策略(copy-on-write)
Docker通过一个修改时复制策略来保证base镜像的安全性,以及更高的性能和空间利用率 。
- 当容器需要读取文件的时候
- 当容器需要修改文件的时候
- 当容器需要删除文件的时候
当容器需要增加文件的时候
直接在最上层的容器可写层增加,不会影响镜像层 。
镜像的精简优化
优化基础镜像
基础镜像选择时,选择合适的较小的镜像,常用的 Linux 系统镜像一般有 Ubuntu、CentOs、Alpine···等
串联Dockerfile指令
在Dockerfile中,每条指令都会创建一个镜像层,从而增加镜像的大小 。当前层的修改不会影响上一层 。
- 用&&串联指令(RUN指令中)
- 安装完软件记得clean
自定义Dockerfile:
FROM ubuntu:14.04#基础源镜像MAINTAINER xiongkun#描述镜像的创建者,名称和邮箱WORKDIR /homeRUN dd if=/dev/zero of=50M.file bs=1M count=50#创建大小为50M的测试文件RUN rm -rf 50M.file#删除该文件优化后的Dockerfile:
FROM ubuntu:14.04#基础源镜像MAINTAINER xiongkun#描述镜像的创建者,名称和邮箱WORKDIR /homeRUN dd if=/dev/zero of=50M.file bs=1M count=50 && rm -rf 50M.file#创建文件,同时在该层删除该文件以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
