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

Docker的镜像和容器的区别

1 Docker镜像

假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。

一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。

Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。要列出本地所有有效的镜像,可以使用命令

# docker images

镜像可以发布为不同的版本,这种机制称之为标签(Tag)。

如上图所示,neo4j镜像有两个版本:lastest版本和2.1.5版本。

可以使用pull命令加上指定的标签:

# docker pull ubuntu:14.04
# docker pull ubuntu:12.04

2 Docker容器 

Docker容器可以使用命令创建:

# docker run imagename

它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态(Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出态。

当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一个容器所做的变更只会局限于那个容器本身。

如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。

如果想更新容器到其镜像的新版本,那么必须当心,确保我们是以正确的方式构建了数据结构,否则我们可能会导致损失容器中所有数据的后果。

64字符的十六进制的字符串来定义容器ID,它是容器的唯一标识符。容器之间的交互是依靠容器ID识别的,由于容器ID的字符太长,我们通常只需键入容器ID的前4个字符即可。当然,我们还可以使用容器名,但显然用4字符的容器ID更为简便。


http://www.kler.cn/news/232530.html

相关文章:

  • 【力扣白嫖日记】SQL
  • 【GAMES101】Lecture 19 透镜
  • Vue3编写简单的App组件(二)
  • Linux系统安全之iptables防火墙
  • MATLAB实现LSTM时间序列预测
  • 7机器人位姿的数学描述与坐标变
  • windowsserver 2016 PostgreSQL9.6.3-2升级解决其安全漏洞问题
  • 后端的技术设计文档
  • 实例分割论文阅读之:FCN:《Fully Convolutional Networks for Semantica Segmentation》
  • impala与kudu进行集成
  • 【linux温故】linux调度机制
  • Ubuntu22.04 gnome-builder gnome C 应用程序习练笔记(二)
  • ArcGISPro中Python相关命令总结
  • 【RPA】智能自动化的未来:AI + RPA
  • 转融通业务是什么?好处和弊端是什么?
  • 全栈笔记_插件篇(用Volar替换Vuter)
  • Redis之基础篇
  • 【算法练习】leetcode算法题合集之其他篇
  • QT基础教程(全系列教程目录)
  • Java学习笔记------API
  • Flink Checkpoint过程
  • 一周学会Django5 Python Web开发-Django5创建项目(用命令方式)
  • Python数据分析 可视化数据Seaborn图表 这篇就够了
  • 【lesson47】进程通信之system V(共享内存)补充知识
  • PgSQL技术内幕 - case when表达式实现机制
  • 【Linux系统学习】3.Linux用户和权限
  • C++2024寒假J312实战班2.6
  • C语言冒泡排序介绍
  • 面试复盘——10
  • C++三剑客之std::any(一) : 使用