【说人话】Docker中容器和镜像的关系

2024-01-06 05:40

本文主要是介绍【说人话】Docker中容器和镜像的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接如下,本篇文章根据自己的理解,重新整合了文章中的精华部分:

Docker中容器和镜像的关系【通俗易懂】:https://blog.51cto.com/zhaoshilei/2474706

自己初学Docker时,身为小白的自己对Docker中的容器与镜像感到迷惑,二者的关系经常傻傻分不清楚,参考了官方文档与各路大佬的博客文章后,有了些许的认识:

首先要知道一个完整的docker由以下4部分组成:

  • Docker Client客户端

  • Docker Daemon守护进程

  • Docker Image镜像

  • Docker Container容器

另外,整个Docker的生命周期是由三部分组成的:镜像(image) + 容器(container)+ 仓库(repository)

docker镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为Union FS(Union file system 统一文件系统),镜像可以基于dockerfile构建,dockerfile是一个描述文件,里面包含了若干条密令,每条命令都会对基础文件系统创建新的层次结构。

有了上面的基本知识后,再结合下面的这张图就可以理清二者的关系啦:

在这里插入图片描述

结合上面的图,我们很容易得到如下结论:

Docker容器 = 镜像 + 读写层

容器是由镜像实例化而来的。

简单来说,镜像文件,容器是进程。

容器是基于镜像创建的, 即容器中的进程依赖镜像中的文件。

上面三句话可以按照下面的文字去理解:

docker的镜像概念类似虚拟机的镜像。它是一个只读模版,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

docker利用容器来运行应用,即docker容器是 由docker镜像创建的运行实例。

docker容器类似虚拟机,可以执行包含启动(start)、停止(stop)、重启(restart)、删除(remove)等操作。每个容器间又是相互隔离的。其中,每一个容器会运行特定的应用,当然每个容器还包含特定应用的代码及所需的依赖文件。

因此,我们可以把容器看作是一个小型简易版的linux环境(包含root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

上面提到过,docker的生命周期由三个部分组成——镜像、容器与仓库,其中最核心的两个部分为镜像(image)与容器(container)

我们可以认为镜像运行起来就是容器。为什么这么说呢?

这是因为docker提供了一个很简单的机制来创建镜像或更新现有的镜像。用户甚至可以从其他人那里下载一个已经做好的镜像直接使用(镜像是只读的,可以理解为静态文件)。而容器相对于镜像来说它是动态的,容器在启动时创建了一层可写层作为最上层,因此容器基于镜像而又不同于镜像,容器的心脏是镜像,而四肢则是自定义的。

在容器服务运行的过程中,容器会基于原始镜像有所改变,比如安装了程序,添加了某些文件,当然也可以提交回去(commit)成为镜像。举个简单的例子:比如某个镜像只包含一个完整的ubuntu操作系统,那么基于该镜像的某个容器可以在此基础上安装substrate工具开发区块链,而基于该镜像的另一个容器则可以安装nginx服务器,对个人域名进行反向代理。


读到这,相信你对Docker中容器与镜像的关系就略懂一二了吧

这篇关于【说人话】Docker中容器和镜像的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575366

相关文章

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

debian12安装docker的实现步骤

《debian12安装docker的实现步骤》本文主要介绍了debian12安装docker的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录步骤 1:更新你的系统步骤 2:安装依赖项步骤 3:添加 docker 的官方 GPG 密钥步骤

SpringIOC容器Bean初始化和销毁回调方式

《SpringIOC容器Bean初始化和销毁回调方式》:本文主要介绍SpringIOC容器Bean初始化和销毁回调方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录前言1.@Bean指定初始化和销毁方法2.实现接口3.使用jsR250总结前言Spring Bea

Gradle在国内配置镜像加速的实现步骤

《Gradle在国内配置镜像加速的实现步骤》在国内使用Gradle构建项目时,最大的痛点就是依赖下载贼慢,甚至卡死,下面教你如何配置国内镜像加速Gradle下载依赖,主要是通过改写repositori... 目录引言一、修改 build.gradle 或 settings.gradle 的 reposito

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ