时间:2021-05-02
base镜像
base镜像有两层含义:
所以,base镜像一般都是各种Linux发行版本的Docker镜像,比如:Ubuntu,Debian或者CentOS等。
base镜像提供的都是最小安装的Linux发行版本。
我们大部分镜像都将是基于base镜像构建的。所以,通常使用的是官方发布的base镜像。可以在docker hub里找到。比如centos:https://hub.docker.com/_/centos
我们可以自己构建docker base镜像,也可以直接使用已有的base镜像。比如centos。我们可以直接从docker hub上拉取。
拉取
查看
? 1 2 3 docker images centos REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 1e1148e4cc2c 2 months ago 202MB可以看到最新的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镜像的安全性,以及更高的性能和空间利用率。
从最上层的镜像层开始往下找,找到后读取到内存中,若已经在内存中,可以直接使用。换句话说,运行在同一台机器上的Docker容器共享运行时相同的文件。
从上往下查找,找到后复制到容器层,对于容器来说,可以看到的是容器层的这个文件,看不到镜像层里的文件,然后直接修改容器层的文件。
从上往下查找,找到后在容器中记录删除,并不是真正的删除,而是软删除。这导致镜像体积只会增加,不会减少。
当容器需要增加文件的时候
直接在最上层的容器可写层增加,不会影响镜像层。
镜像的精简优化
优化基础镜像
基础镜像选择时,选择合适的较小的镜像,常用的 Linux 系统镜像一般有 Ubuntu、CentOs、Alpine···等
串联Dockerfile指令
在Dockerfile中,每条指令都会创建一个镜像层,从而增加镜像的大小。当前层的修改不会影响上一层。
具体实例如下:
自定义Dockerfile:
? 1 2 3 4 5 6 7 8 9 FROM ubuntu:14.04 #基础源镜像 MAINTAINER xiongkun #描述镜像的创建者,名称和邮箱 WORKDIR /home RUN dd if=/dev/zero of=50M.file bs=1M count=50 #创建大小为50M的测试文件 RUN rm -rf 50M.file #删除该文件优化后的Dockerfile:
? 1 2 3 4 5 6 7 FROM ubuntu:14.04 #基础源镜像 MAINTAINER xiongkun #描述镜像的创建者,名称和邮箱 WORKDIR /home RUN dd if=/dev/zero of=50M.file bs=1M count=50 && rm -rf 50M.file #创建文件,同时在该层删除该文件以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://segmentfault.com/a/1190000021225614
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
jenkins构建Docker镜像实例详解前言:jenkins有Docker镜像,而之前我们说过使用jenkins打包Docker镜像,那么可否用jenkins
一、概述 docker中的镜像采用分层构建设计,每个层可以称之为“layer”,这些layer被存放在了/var/lib/docker
镜像也是docker的核心组件之一,镜像时容器运行的基础,容器是镜像运行后的形态。总体来说,镜像是一个包含程序运行必要以来环境和代码的只读文件,它采用分层的文件
前言我们平常在对程序进行Docker镜像打包的时候总会有些困惑,到底是将最终的镜像分层打包最后汇总成程序的镜像(也就是一层一层的From)合适,还是说直接将程序
Docker私有镜像库Docker私有镜像库与阿里云对象存储OSS镜像管理是Docker的核心,为了满足企业或组织内部分享镜像,Docker官方在Github上