Docker 容器简单介绍
Docker 技术简介
在开始 k8s 之前基本绕不过的就是 Docker,Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
- 镜像(
Image
):Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。 - 容器(
Container
):镜像(Image
)和容器(Container
)的关系,就像是面向对象程序设计中的类
和实例
一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 - 仓库(
Repository
):仓库(Repository
)类似Git的远程仓库,集中存放镜像文件。
Docker与虚机的对比
- docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。
- docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性能损耗,性能优于通过Hypervisor层与内核层的虚拟化。
- docker更轻量,docker的架构可以共用一个内核与共享应用程序库,所占内存极小。
- 高可用和可恢复性:docker对业务的高可用支持是通过快速重新部署实现的。
- 快速创建、删除:虚拟化创建是分钟级别的,Docker容器创建是秒级别的,Docker的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间。
- 交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化;Docker在Dockerfile中记录了容器构建过程,可在集群中实现快速分发和快速部署。
Docker 使用流程
容器镜像将应用运行环境,包括代码、依赖库、工具、资源文件和元信息等,打包成一种操作系统发行版无关的不可变更软件包。容器镜像打包了整个容器运行依赖的环境,以避免依赖运行容器的服务器的操作系统,从而实现 “build once,run anywhere”。
- 首先开发者在开发环境机器上开发应用并制作镜像。Docker执行命令,构建镜像并存储在机器上。
- 开发者发送上传镜像命令。Docker收到命令后,将本地镜像上传到镜像仓库。
- 开发者向生产环境机器发送运行镜像命令。生产环境机器收到命令后,Docker会从镜像仓库拉取镜像到机器上,然后基于镜像运行容器。
docker运行时的替代引擎
Docker 虽然在容器运行时领域占据着主导地位,但并非唯一选择。近年来,随着容器技术的不断发展,涌现出了多种可替代 Docker 的容器运行时引擎,例如:
- containerd:由 Docker 公司开发的轻量级容器运行时,专注于容器的运行和管理,支持多种容器标准,包括 OCI 和 CRI。containerd 通常与其他工具(如 CRI-O、Podman)结合使用,提供完整的容器编排和管理功能。
- rkt:由 CoreOS 开发的容器运行时,以安全性和稳定性著称,支持多种容器标准,包括 OCI 和 AppContainer。rkt 采用基于 AppArmor 的安全策略,并提供多种安全增强功能。
- CRI-O:由 Kubernetes 社区开发的容器运行时,专门为 Kubernetes 设计,支持 OCI 标准。CRI-O 通常与 Kubernetes 结合使用,提供高效的容器管理和编排功能。
- Kata Containers:最初由 Intel 开发的轻量级虚拟机管理器 Clear Container 项目为前身,后属于 OpenStack 基金会发布的开源容器项目,可用于运行容器。Kata Containers 旨在提供与 Docker 兼容的容器运行环境,同时兼顾安全性和性能。
- Firecracker:由亚马逊开发的微型虚拟机管理器,可用于运行容器。Firecracker 旨在提供高密度的容器运行环境,并降低容器运行时的资源消耗。
- gVisor:由谷歌开发的沙盒环境,可用于运行容器。gVisor 旨在提供高度隔离的容器运行环境,并增强容器的安全性和可靠性。
- Podman:Podman 是一款由 Red Hat 开发的开源容器运行时,它与 Docker 兼容,并提供类似的命令行工具。Podman 的优势在于其易用性,但它不如 containerd 功能丰富。
选择合适的容器运行时引擎取决于用户的具体需求。以下是一些需要考虑的因素:
- 性能:不同的容器运行时引擎在性能方面存在差异。如果您需要高性能的容器运行时,可以考虑使用 runc 或 Kata。
- 资源消耗:一些容器运行时引擎比其他容器运行时引擎消耗更多的资源。如果您需要在资源受限的环境中运行容器,可以考虑使用 runc 或 cri-o。
- 隔离性:一些容器运行时引擎提供了更强的隔离性。如果您需要在容器之间提供更强的隔离,可以考虑使用 Kata 或 Firecracker。
- 兼容性:如果您需要与现有工具或平台兼容,请确保您选择的容器运行时引擎受支持。
Docker Book相关
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))