当前位置: 首页 > article >正文

Docker | 通过commit操作实例来认识镜像底层实现的原理以及学会打包镜像

镜像底层实现的原理

    • docker 镜像
      • 镜像是什么?
      • 分层的镜像
      • UnionFS(联合文件系统)
      • 为什么Docker镜像要采用这种分层结构呢?
      • 打包镜像 docker commit ⭐⭐
        • ubuntu安装vim

docker 镜像

镜像是什么?

是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。
只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。

分层的镜像

在这里插入图片描述
通过上述 得知 镜像是分层的

UnionFS(联合文件系统)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

为什么Docker镜像要采用这种分层结构呢?

镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。
比如说有多个镜像都从相同的base镜像构建而来,那么Docker Host只需在磁盘上保存一份base镜像;同时内存中也只需加载一份base镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打包镜像 docker commit ⭐⭐

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

ubuntu安装vim
  1. 从Hub上下载ubuntu镜像到本地并成功运行
docker run ubuntu
  1. 原始的默认Ubuntu镜像是不带着vim命令的
root@d594d28e292d:/# vim --help
bash: vim: command not found
root@d594d28e292d:/#
  1. 外网连通的情况下,安装vim
docker?容器内执行上述两条命令:
apt-get update   # 更新包管理工具
apt-get  -y install vim  # 安装所需要的vim

在这里插入图片描述
在这里插入图片描述

  • 测试
    在 a.txt 输入语句 使用cat输出命令
    在这里插入图片描述
  1. 安装完成后,commit我们自己的新镜像
[root@localhost zyan]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED       STATUS       PORTS     NAMES
d594d28e292d   ubuntu    "bash"    5 hours ago   Up 5 hours             magical_knuth

[root@localhost zyan]#  docker commit -m='+vim' -a='zyan' d594d28e292d zyan/hgubuntu:1.1
sha256:ca7abefb7af77901ddb84af423a3f7e50d6a30807224670e3239487120899f04

[root@localhost zyan]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED       STATUS       PORTS     NAMES
d594d28e292d   ubuntu    "bash"    5 hours ago   Up 5 hours             magical_knuth


[root@localhost zyan]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
zyan/hgubuntu   1.1       ca7abefb7af7   31 seconds ago   191MB
ubuntu          latest    59ab366372d5   2 weeks ago      78.1MB
redis           6.0.8     16ecd2772934   4 years ago      104MB

在这里插入图片描述
5. 启动我们的新镜像并和原来的对比

在这里插入图片描述
在这里插入图片描述


http://www.kler.cn/a/371050.html

相关文章:

  • 【Leetcode 热题 100】295. 数据流的中位数
  • 基于Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用-以ENSO预测为例讲解
  • Termora跨平台 SSH/SFTP/Terminal 客户端工具
  • Winforms开发基础之非主线程操作UI控件的误区
  • Webpack和Vite的区别
  • 八股学习 Redis
  • 前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML
  • 【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型
  • static函数和友元
  • Linux云计算 |【第五阶段】ARCHITECTURE-DAY5
  • 【华为HCIP实战课程十八】OSPF的外部路由类型,网络工程师
  • df -h 和df -i 的区别
  • pip命令行安装pytest 一直报错
  • springboot075电影评论网站系统设计与实现(论文+源码)_kaic
  • Bash、sh 和 Shell都弄混了?
  • 软考架构师论文范文(游戏后端)
  • 为 Python 项目配置 Git 忽略文件的实用指南
  • SSA-CNN-LSTM-MATT多头注意力机制多特征分类预测
  • vue2项目在发布后更新,提示用户刷新页面
  • MySQL史上最全总结
  • Go语言中数据类型与变量的用法
  • 算法训练(leetcode)二刷第十天 | 150. 逆波兰表达式求值、*239. 滑动窗口最大值、*347. 前 K 个高频元素
  • 明日周刊-第25期
  • Hash表算法
  • Python——自动化发送邮件
  • python数据处理及可视化