docker镜像相关

docker镜像相关

docker镜像相关理解

解释

镜像是一种轻量级,可执行的独立软件包,它包含运行某个软件若需要的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码,运行时需要的库,环境变量和配置文件等),这个打包好的运行环境就是image镜像文件

只有通过这个镜像文件才能生成docker容器实例

unionFS(联合文件系统)

unionFS(联合文件系统):union文件系统(unionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加 ,同时可以将不同目录挂载到同一个虚拟文件系统下(unite serversal directories into a single virtual filesystem)。union文件系统是docker进行的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像

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

镜像加载原理

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就叫unionFS

bootfs(boot file system)主要包含BootLoader和kernel,BootLoader主要是引导加载kernel,linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的linux/Unix系统是一样,包含boot加载器和内核。当boot加载完成之后胡整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs(root file system),在bootfs只剩。包含的就是典型的linux中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不懂测操作系统发行版,比如Ubuntu,centos

docker镜像要采用这种分层结构

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。

比如说有多个镜像都从相同的镜像都是从相同的base镜像构建而来,那么docker host只需在磁盘上保存一份base镜像,同志内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

重点理解

  • docker镜像层都是只读的,容器层是可写的
  • 当容器启动时,一个新的可写层被加载到镜像的顶部。
  • 这一层通常被称作"容器层","容器层"之下的都叫"镜像层"
  • 所有对容器的改动,无论是添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的

docker镜像commit 操作实例

docker commit提交容器副本使之称为一个新的镜像

dockercommit -m="提交的描述信息"-a="作者"容器id要创建的目标镜像名:标签名

案例演示

unbuntu安装vim.txt

  • 从hub上下载Ubuntu镜像到本地并成功运行
  • 原始的默认的Ubuntu镜像是不带vim命令的
  • 外网连通的情况下,安装vim
  • 安装完成之后,commit我们自己的新镜像
  • 启动我们的新镜像并和原来的对比
bash 复制代码
[root@docker ~]# docker run -it ubuntu /bin/bash
root@c9a02148fd54:/# vim a.txt
bash: vim: command not found
root@c9a02148fd54:/# apt-get update //更新包管理工具
Get:1 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Fetched 27.3 MB in 1min 39s (277 kB/s)                                                                            
Reading package lists... Done
root@c9a02148fd54:/# apt-get -y install vim   //安装vim
Reading package lists... Done
[root@docker ~]# docker commit -m="add vim cmd" -a="five" c9a02148fd54 atquiqu/myubuntu:1.1.1
[root@docker ~]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED              SIZE
atquiqu/myubuntu   1.1.1     51a655b378b4   About a minute ago   181MB
ubuntu             latest    08d22c0ceb15   6 months ago         77.8MB
[root@docker ~]# docker run -it ubuntu /bin/bash
root@5cf24ac3ec37:/# vim e.txt
bash: vim: command not found
root@5cf24ac3ec37:/# exit
exit
[root@docker ~]# docker run -it  51a655b378b4 /bin/bash
root@cffa0c9f6481:/# vim a.txt
root@cffa0c9f6481:/# cat a.txt 
hello 
root@cffa0c9f6481:/# 
总结

docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。自己再按需扩展。新镜像是从base镜像一层一层叠加生成的。没安装一个新的软件,就在现有镜像的基础上增加一层

相关推荐
XIAOHEZIcode1 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化