一、docker镜像定义

如果我们想要定义mysql5.7镜像应该怎么做?
  • 获取基础镜像,选择一个发行版平台(unbtu、centos)
  • 在centos镜像中安装mysql5.7软件
  • 导出镜像,可以命名为mysql:5.7镜像文件
如何查看镜像的发行版本
# 查看运行镜像的id
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd9656d00ee8 nginx "/docker-entrypoint.…" 32 hours ago Up 32 hours 0.0.0.0:80->80/tcp, :::80->80/tcp nginx
# 通过exec进入正在运行容器内部
[root@localhost ~]# docker exec -it cd9656d00ee8 bash
root@cd9656d00ee8:/#
# 查看镜像使用的环境,每个镜像使用的系统环境可能不一样,这里以nginx为例使用的Debian GNU/Linux 11 (bullseye)系统,所以查看系统环境的命令如下
[root@cd9656d00ee8:/# cat /etc/os-release
从这个工程,我们可以感觉出来是一层一层添加的,docker镜像的层级概念就出来了,底层是Debian镜像,上层是nginx镜像,Debian镜像属于父类镜像

  • Docker镜像是在基础镜像之后,然后安装软件,配置软件,添加新层,构建出来。
  • 这种现象在学习dockefile的时候更为清晰。
docker为什么要分层镜像?
  • 镜像分层的好处就是资源共享,例如有多个镜像都来自于一个base镜像,那么在docker host只需要存一份base镜像就可以了
  • 内存中也只需要在家一份host,即可为多个容器服务
  • 即使多个容器共享一个base镜像,某个容器修改了base镜像的内容,例如修改/etc/下的配置文件,其他容器的/etc/下的内容也不会被修改的没修改动作只限制在单个容器内,这就是容器的写入时复制特性(Copy-on-write)

可写的容器层
当容器的启动后,一个新的可写层被加载到镜像的顶部,这层通常被称为容器层,容器层下的都称为镜像层。

所有对容器的修改操作,只会发生在容器层里,只有容器层是可写层,其余镜像层都只读。
文件操作 说明
添加文件 新文件被添加到容器层(可写层)中
读取文件 Docker会从上往下一次在各个镜像层中查找此文件。一但找到,立即将其复制到容器层,然后打开并读入内存。
修改文件 Docker会从上往下一次在各个镜像层中查找此文件。一但找到,立即将其复制到容器层,然后开始修改
删除文件 Docker会从上往下一次在各个镜像层中查找此文件。一但找到,会在容器中记录下次删除操作(只是记录操作并不会真正的执行删除)
分层管理优点
  • 只有修改的时候会对数据进行复值,这种特性叫做写时复制(Copy-on-write)。可见容器层只保存了镜像变化的部分不会对基础镜像进行任何更改。
  • 这样我们就可以解释前面的提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。
  • 大大方便了Docker镜像的分发和存储。
  • docker镜像代表一个容器文件管理系统,镜像层级技术通过联合文件系统(UnionFS)来实现的
  • 因此在多个容器无论进行任何操作都不会影响到base镜像。

补充:查看各个系统发行版的命令

# Debian GNU系统发行版
cat /etc/os-release
# centos系统发行版
cat /etc/redhat-release
# 查看ubuntu系统发行版
cat /etc/lsb-release
# 查看sesu系统发行版
cat /etc/SuSE-release

所有博客仅用于自己学习记录,如有侵权请联系删除,文章来源于公开视频资料,如有需要请移步这里:

https://www.bilibili.com/video/BV1o14y1w7b8?p=15&spm_id_from=pageDriver&vd_source=6a0e07382af7c460c1a03694e4d4f4c7

最新文章

  1. cocos2d-x 观察者设计模式
  2. BZOJ1577 USACO 2009 Feb Gold 1.Fair Shuttle Solution
  3. oracle 中的Ipad()函数
  4. [机器学习]信息&熵&信息增益
  5. 5.SpringMVC静态文件的访问
  6. JSP标准标签库(JSTL)之核心标签(下)
  7. 我遇到的CocoaPods的问题(也许后期会解决,持续更新)
  8. eclipse 恢复SVN无法还原的文件 svn使用了还原,但本地的没有提交找回没提交代码的方法
  9. 转:redis windows下的环境搭建
  10. OSG显示文字——自定义显示文字函数
  11. [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法
  12. 【LeetCode】Path Sum 2 --java 二叉数 深度遍历,保存路径
  13. hibernate 一对多关联关系(具体分析)
  14. 微信小程序学习总结(1)
  15. vue自定义日期组件
  16. JavaScript(第十四天)【面向对象和原型】
  17. 巧妙解决vue2.0关于set添加属性后视图不能更新的问题
  18. [Redis] redis的设计与实现-对象系统
  19. Java异常及错误
  20. uva 103(最长递增子序列) Stacking Boxes

热门文章

  1. 提升IIS权限
  2. 【剑指Offer】【链表】复杂链表的复制
  3. 跨域出现:XMLHttpRequest cannot load错误
  4. JS日期时间增加减少
  5. html原声启动本地服务器,用http-server启动本地服务器
  6. elementUI合并单元格
  7. file、blob、base64相互转换
  8. Qt 中文编译错误和运行显示乱码
  9. PK获取面积
  10. python菜鸟学习: 14. GUI界面化使用