docker系列(4) - docker镜像制作

文章目录

  • [4. docker镜像](#4. docker镜像)
    • [4.1 联合文件系统(UnionFS)](#4.1 联合文件系统(UnionFS))
    • [4.2 Docker镜像加载原理](#4.2 Docker镜像加载原理)
    • [4.3 docker commit(扩展镜像)(非常重要)](#4.3 docker commit(扩展镜像)(非常重要))
      • [4.3.1 案例](#4.3.1 案例)
        • [4.3.1.1 下载ubuntu镜像](#4.3.1.1 下载ubuntu镜像)
        • [4.3.1.2 安装vim](#4.3.1.2 安装vim)
        • [4.3.1.3 commit新的镜像](#4.3.1.3 commit新的镜像)
        • [4.3.1.3 验证新的镜像](#4.3.1.3 验证新的镜像)

4. docker镜像

4.1 联合文件系统(UnionFS)

Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加。

同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtualfilesystem)。

Union文件系统是Docker镜像的基础。

镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特点

一次同时加载多个文件系统,但是从外面看来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统包含所有的底层的文件和目录。

4.2 Docker镜像加载原理

分层构建,联合加载。

docker中的Linux文件系统由bootfs和rootfs组成。

  • bootfs
    底层的叫bootfs(引导文件系统,负责加载内核kernel),用于系统引导的文件系统,仅仅用于启动和引导用户的内核空间,在系统启动完成后会被卸载以节约内存。
  • rootfs
    上层叫rootfs(容器的),容器使用的根文件系统,如/dev,/proc等等。

和传统的linux系统不同,容器的rootfs只挂载为只读的,而传统的linux的rootfs是在自检时只读,自检完成可写可读。Docker的rootfs只读挂载。

由上边右图可知,bootfs之上,有操作系统镜像层(Debian),emacs镜像层,apache层,每1个使用到的软件都有独立的镜像层,且都是只读的,这也充分体现 了镜像的分层构建的思想,而在镜像最上层就是1个可读写层,也就是用户的所有操作只能影响可读写层,而不能影响底层镜像。启动镜像时会从下到上依次挂载启 动,这就是"联合挂载"。为了实现"联合挂载",docker采用aufs、overlayfs、devicemapper等技术来实现。
rootfs /dev /proc /bin /etc 引导系统 bootfs kernel bootloader

Docker镜像层是只读的,容器层是可写的,当容器启动时,一个新的可写层被加载到镜像的顶部。

这一层通常被称作"容器层","容器层"之下的都叫"镜像层"。

4.3 docker commit(扩展镜像)(非常重要)

docker commit,我的理解就是扩展,即在原有镜像上面增加新的层次,重新提交为新的镜像。

我们可以封装自己的镜像,将所需要的组件完整的封装在一个容器中,这样就不用每次启动太多的容器了。

复制代码
docker commit -m="描述信息" -a="作者" 容器Id 要创建的目标镜像名:[标签名]

4.3.1 案例

在ubuntu镜像基础上增加vim命令,打包成新镜像

4.3.1.1 下载ubuntu镜像

shell 复制代码
docker pull ubuntu

4.3.1.2 安装vim

shell 复制代码
# 运行
docker run -it  ubuntu

#容器内部更新包管理工具
apt-get update

#容器内安装vim
apt-get -y install vim

4.3.1.3 commit新的镜像

shell 复制代码
# 退出容器
exit

# 63f7cd116705是容器id
docker commit -m "ubuntu+vim" -a="996工具人" 63f7cd116705 996tool/ubuntu:1.0

打包镜像操作如下:

在上图中可以看到新的镜像996tool/ubuntu的包大小变成187M,原来的ubuntu大小只有72.8M。

4.3.1.3 验证新的镜像

复制代码
docker run -it 191e414428de /bin/bash
相关推荐
NiKo_W13 小时前
Linux 开发工具(1)
linux·运维·服务器
linweidong13 小时前
解锁 Ray 在 Kubernetes 上的弹性伸缩:打造高效、稳定的分布式作业
分布式·容器·kubernetes·ray·keda·autoscaling·ray推理
咖啡Beans13 小时前
Docker安装ELK(Elasticsearch + Logstash + Kibana)
后端·elasticsearch·docker
艾莉丝努力练剑13 小时前
【C++】类和对象(下):初始化列表、类型转换、Static、友元、内部类、匿名对象/有名对象、优化
linux·运维·c++·经验分享
-SGlow-14 小时前
Linux相关概念和易错知识点(45)(网络层、网段划分)
linux·运维·服务器·网络
潘潘潘潘潘潘潘潘潘潘潘潘14 小时前
【MySQL】从零开始学习MySQL:基础与安装指南
linux·运维·服务器·数据库·学习·mysql
ZzzZZzzzZZZzzzz…14 小时前
Nginx_Tomcat综合案例
运维·nginx·tomcat·负载均衡·rhce·反向代理·https加密服务
智能化咨询14 小时前
Docker 容器化部署核心实战——Nginx 服务配置与正反向代理原理解析
docker
努力努力再努力wz15 小时前
【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)
java·linux·运维·开发语言·c++
哦你看看16 小时前
linux故障排查
linux·运维·服务器