【说人话】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

相关文章

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

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

Docker镜像pull失败两种解决办法小结

《Docker镜像pull失败两种解决办法小结》有时候我们在拉取Docker镜像的过程中会遇到一些问题,:本文主要介绍Docker镜像pull失败两种解决办法的相关资料,文中通过代码介绍的非常详细... 目录docker 镜像 pull 失败解决办法1DrQwWCocker 镜像 pull 失败解决方法2总

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

使用国内镜像源优化pip install下载的方法步骤

《使用国内镜像源优化pipinstall下载的方法步骤》在Python开发中,pip是一个不可或缺的工具,用于安装和管理Python包,然而,由于默认的PyPI服务器位于国外,国内用户在安装依赖时可... 目录引言1. 为什么需要国内镜像源?2. 常用的国内镜像源3. 临时使用国内镜像源4. 永久配置国内镜

如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件

《如何使用Docker部署FTP和Nginx并通过HTTP访问FTP里的文件》本文介绍了如何使用Docker部署FTP服务器和Nginx,并通过HTTP访问FTP中的文件,通过将FTP数据目录挂载到N... 目录docker部署FTP和Nginx并通过HTTP访问FTP里的文件1. 部署 FTP 服务器 (