容器是什么?
容器是轻量级应用代码包,它还包含依赖项,例如编程语言运行时的特定版本和运行软件服务所需的库。
镜像是什么
我们都知道,操作系统分为 内核 和 用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:18.04 就包含了完整的一套 Ubuntu 18.04 最小系统的 root 文件系统。
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应该在该层构建结束前清理掉。
容器和镜像区别与联系
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等,真正的运行也是在容器中而不是镜像中,镜像相当于为容器的运行提供环境配置支持(如同C++类中定义一样,相当于容器include了该镜像的环境,然后你自己仍可以在此镜像基础上进行增加新环境配置)
为什么要使用容器?
假设您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用不止依赖于您当前的配置,还需要某些特定的库、依赖项和文件。与此同时,您的企业还拥有标准化的开发和生产环境,有着自己的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境,而不产生重新创建服务器环境的开销。因此,您要如何确保应用能够在这些环境中运行和通过质量检测,并且在部署过程中不出现令人头疼的问题,也无需重新编写代码和进行故障修复?答案就是使用容器。
容器可以确保您的应用拥有必需的库、依赖项和文件,让您可以在生产中自如地迁移这些应用,无需担心会出现任何负面影响。实际上,您可以将容器镜像中的内容,视为 Linux 发行版的一个安装实例,因为其中完整包含 RPM 软件包、配置文件等内容。但是,安装容器镜像发行版,要比安装新的操作系统副本容易得多。这样可以避免危机,做到皆大欢喜。
容器可以让工作中不同的开发环境保持一致,避免协作开发时环境不同导致的问题;并且容器中可包含程序编译需要的必须库,可以降低配置环境成本
容器与虚拟机的区别
- 容器比虚拟机更加轻量化
- 容器在操作系统级别进行虚拟化,而虚拟机在硬件级别进行虚拟化
- 容器共享操作系统内核,其占用的内存与虚拟机相比微乎其微
参考文献:什么是 Linux 容器(LXC)?一文带你快速了解容器技术 - 红帽
容器是一种轻量级的代码打包方式,包含依赖项,如运行时和库。Docker镜像是一个分层的root文件系统,用于创建容器。容器是镜像的运行时实体,类似面向对象编程中的类与对象关系。容器确保应用在不同环境中一致运行,减少了配置和迁移问题。与虚拟机相比,容器更轻量,因为它共享操作系统内核。使用容器可以简化开发环境一致性,降低配置成本,并便于应用部署。
2670

被折叠的 条评论
为什么被折叠?



