- Docker 教程
- Docker - 首页
- Docker - 概述
- Docker - 在 Linux 上安装
- Docker - 安装
- Docker - Hub
- Docker - 镜像
- Docker - 容器
- Docker - 注册中心
- Docker - Compose
- Docker - 使用容器
- Docker - 架构
- Docker - 层
- Docker - 容器与主机
- Docker - 配置
- Docker - 容器与 Shell
- Docker - Dockerfile
- Docker - 构建文件
- Docker - 公共仓库
- Docker - 管理端口
- Docker - Web 服务器
- Docker - 命令
- Docker - 容器链接
- Docker - 数据存储
- Docker - 卷
- Docker - 网络
- Docker - 安全
- Docker - 工具箱
- Docker - 云
- Docker - 构建云
- Docker - 日志
- Docker - 持续集成
- Docker - Kubernetes 架构
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 托管
- Docker - 最佳实践
- Docker 设置服务
- Docker - 设置 Node.js
- Docker - 设置 MongoDB
- Docker - 设置 NGINX
- Docker - 设置 ASP.Net
- Docker - 设置 MySQL
- Docker - 设置 Go
- Docker - 设置 Rust
- Docker - 设置 Apache
- Docker - 设置 MariaDB
- Docker - 设置 Jupyter
- Docker - 设置 Portainer
- Docker - 设置 Rstudio
- Docker - 设置 Plex
- Docker 设置 - Flame
- Docker 设置 - PostgreSQL
- Docker 设置 - Mosquitto
- Docker 设置 - Grafana
- Docker 设置 - Nextcloud
- Docker 设置 - Pawns
- Docker 设置 - Ubuntu
- Docker 设置 - RabbitMQ
- Docker - 设置 Python
- Docker - 设置 Java
- Docker - 设置 Redis
- Docker - 设置 Alpine
- Docker - 设置 BusyBox
- Docker 设置 - Traefik
- Docker 设置 - WordPress
- Docker 有用资源
- Docker - 快速指南
- Docker - 有用资源
- Docker - 讨论
Docker - 概述
目前,Docker 占据容器化技术市场超过 32% 的市场份额,并且这一数字预计还会增长。一般来说,任何容器化软件都允许您在不启动整个虚拟机的情况下运行。
Docker 使重复且耗时的配置任务变得多余。这允许在桌面和云环境中快速有效地开发应用程序。但是,为了熟练掌握 Docker,重要的是要清楚地了解其底层架构和其他基础知识。
在本章中,让我们探讨 Docker 的概述,并了解 Docker 的各个组件如何工作以及相互交互。
什么是 Docker?
Docker 是一个用于开发、交付和运行应用程序的开源平台。它使应用程序更容易与基础设施分离,从而保证软件快速交付。Docker 通过协调基础设施管理与应用程序处理,缩短了代码创建和部署之间的时间。
应用程序被打包并在称为容器的松散隔离环境中运行,这些环境是 Docker 生态系统中的组成部分。由于这种隔离,更多容器可以并发地在单个主机上运行,从而提高安全性。由于它们很轻量级,容器通过封装应用程序执行的所有要求来消除对主机设置的需求。由于容器在共享环境中保持一致,因此协作非常顺畅。
Docker 为我们提供了全面的工具和平台来管理容器生命周期:
- 您可以使用容器开发应用程序并支持其组件。
- 您可以使用容器作为所有应用程序的发布和测试单元。
- Docker 允许您将应用程序无缝且一致地部署到所有环境中,无论是在本地数据中心、云平台还是混合基础设施。
为什么要使用 Docker?
快速应用程序开发和交付
Docker 通过提供以本地容器形式存在的标准化环境来加快应用程序开发周期。这些容器是 CI/CD 工作流程中不可或缺的一部分,它们确保快速且一致的应用程序交付。
考虑以下示例场景:
- 您团队中的开发人员在他们的本地系统中编写程序。他们可以使用 Docker 容器与团队成员共享他们的工作。
- 然后,他们可以使用 Docker 将他们的应用程序部署到测试环境中,在那里他们可以运行自动化或手动测试。
- 如果发现错误,他们可以在开发环境中修复它,验证构建,然后将其重新部署到测试环境中进行进一步测试。
- 测试完成后,将应用程序部署到生产环境并将功能交付给客户就像将更新的镜像推送到生产环境一样简单。
响应式部署和扩展
由于 Docker 是一个基于容器的平台,因此它促进了高度可移植的工作负载。这使您能够在各种环境中无缝运行应用程序。其可移植性和轻量级特性允许动态工作负载管理。随后,企业可以根据需求实时扩展应用程序。
最大化硬件利用率
Docker 是传统虚拟机的经济高效的替代方案。这提高了服务器容量利用率。它允许您创建高密度环境并执行更小的部署。这使企业能够以有限的资源实现更多目标。
Docker 容器与虚拟机
虚拟机 (VM) 和 Docker 容器是现代计算环境中广泛使用的两种技术,尽管它们具有不同的用途和优势。要对哪种技术适合特定用例做出明智的选择,需要了解它们之间的区别。
架构
Docker 容器 - Docker 容器轻量且可移植,它们共享主机操作系统内核。它们运行在主机操作系统之上,并封装应用程序及其依赖项。
虚拟机 - 另一方面,虚拟机在虚拟机管理程序之上模拟完整的硬件,包括客户操作系统。每个虚拟机运行自己的操作系统实例,该实例独立于主机操作系统。
资源效率
Docker 容器 - 就资源利用率而言,Docker 容器非常高效,因为它们共享主机操作系统内核,并且与虚拟机相比需要更少的资源。
虚拟机 - 虚拟机消耗更多资源,因为它们需要模拟整个操作系统,包括内存、磁盘空间和 CPU。
隔离
Docker 容器 - 容器提供进程级隔离。这意味着它们共享相同的操作系统内核,但具有单独的文件系统和网络。这是通过命名空间和控制组实现的。
虚拟机 - 相比之下,虚拟机提供更强的隔离,因为每个虚拟机都运行其内核并拥有其专用资源。因此,虚拟机更安全,但也更重。
可移植性
Docker 容器 - 只要在环境中安装了 Docker,容器就可以在不同的环境(开发或生产)中一致运行。这使得它们高度可移植。
虚拟机 - 由于底层硬件和虚拟机管理程序配置的差异,虚拟机比容器不太灵活。但是,它们可以通过磁盘映像在一定程度上实现可移植性。
启动时间
Docker 容器 - 容器启动几乎是即时的,因为它们利用主机操作系统内核。因此,它们最适合微服务架构和快速扩展。
虚拟机 - 虚拟机通常需要更长的启动时间,因为它们需要启动整个操作系统。这导致启动时间比容器慢。
用例
Docker 容器 - Docker 容器最适合微服务架构、CI/CD 管道以及需要快速部署和扩展的应用程序。
虚拟机 - 虚拟机更适合运行具有严格安全要求且需要强大隔离的遗留应用程序。
Docker 架构
Docker 使用客户端-服务器架构。Docker 客户端与 Docker 守护程序通信,后者构建、管理和分发您的 Docker 容器。Docker 守护程序完成所有繁重的工作。
Docker 客户端还可以连接到远程 Docker 守护程序,或者守护程序和客户端可以在同一台机器上运行。它们通过 REST API、UNIX 套接字或网络接口进行通信。
Docker 守护程序
Docker 守护程序(也称为 dockerd)管理 Docker 对象,例如容器、镜像、卷、网络等。它侦听对此的 Docker API 请求。为了管理 Docker 服务,它也可以与其他守护程序通信。
Docker 客户端
为了与 Docker 交互,大多数用户使用 Docker 客户端,例如 CLI。在命令行中,当您运行 Docker 命令(例如 Docker run)时,它会将命令发送到 dockerd 以执行。Docker 客户端可以与多个守护程序通信。
Docker Desktop
Docker Desktop 是访问 Docker 的一种简单方法。它是一个可以在 Windows、Mac 和 Linux 上运行的应用程序。它允许您执行所有与 Docker 相关的功能。Docker Desktop 包含守护程序、客户端、compose、Kubernetes 等。
Docker 注册中心
Docker 注册中心存储 Docker 镜像。最流行的公共 Docker 注册中心是 Docker Hub,任何人都可以使用。默认情况下,Docker 在 Docker Hub 上查找镜像。
当您执行 docker pull 或 run 命令时,dockerd 会从注册中心拉取所需的镜像。Docker push 命令也是如此。
Docker 对象
Docker 具有与之关联的镜像、容器、网络、卷、插件和其他对象,您将在整个 Docker 之旅中使用这些对象。让我们简要概述其中一些对象。
镜像
镜像是一个只读模板,其中包含 Docker 容器创建指令。镜像通常继承自另一个镜像,并进行一些额外修改。例如,您可以创建一个基于 Ubuntu 基础镜像构建的 Docker 镜像,在其之上,您有 Apache web 服务器、您的应用程序以及一些特定于您的应用程序的配置。
您可以创建自己的镜像,也可以使用其他人从注册中心创建的镜像。要构建自定义镜像,您可以使用 Dockerfile,其中包含构建镜像所需的所有指令和步骤。Dockerfile 中的一条指令是在基础镜像之上的一个镜像层。
在重建 Dockerfile 时,只有与已更改的指令关联的层才会被重建。这就是使 Docker 镜像如此轻量、快速和小巧的原因。
容器
Docker 容器是 Docker 镜像的运行实例。Docker 允许您创建、运行、终止、移动或删除容器。Docker 容器基于关联的镜像和您启动容器时提供的配置。当您停止或删除容器时,未持久保存到持久性存储(例如卷等)的更改将丢失。
创建 Docker 容器的示例命令是:
docker run -i -t ubuntu /bin/bash
当您运行此命令时,会发生以下情况:
- 如果您之前没有在本地拉取过 Ubuntu 镜像,Docker 会通过内部执行 Docker pull 命令从 Dockerhub 拉取。
- 然后,它通过内部执行 Docker create 命令创建一个新的容器。
- 作为最后一层,它为容器分配一个读写文件系统。它还会创建一个默认的网络接口。
- 容器启动后,它将执行 /bin/bash 命令。-i 和 -t 标记以交互方式运行容器,并附加一个终端,以便您运行更多命令。
网络
借助 Docker 网络,容器可以相互通信。尽管容器默认情况下是隔离的,但您可以使用 Docker 构建虚拟网络,让容器安全地相互通信。这些网络的复杂程度可以从简单到复杂不等,不同的驱动程序选项提供不同的功能。
对于基本连接,您可以使用默认的桥接网络或为您的应用程序创建自定义网络。Docker 网络简化了构建需要相互通信的服务的多容器应用程序。
存储
传统的应用程序依赖于为主机提供动力的存储系统。Docker 通过卷提供了更灵活的方法。存储在容器外部的数据目录称为卷。这样可以确保无论容器停止还是恢复,您的数据都安全无虞。
对于持久性存储需求,您可以绑定挂载主机计算机上的特定目录,或创建命名卷来管理应用程序数据。Docker 卷简化了数据管理,并通过将应用程序的数据与容器生命周期分离来确保持久性。
结论
总之,对于寻求简化应用程序开发、部署和管理的公司来说,Docker 的容器化技术是一个强大的选择。
Docker 的方法加快了开发周期,促进了可扩展性和可移植性,并最大限度地利用了硬件资源。企业可以通过使用 Docker 容器来提高其软件交付流程的敏捷性、效率和成本效益。
常见问题
Q1. Docker 的核心概念是什么?
Docker 背后的基本理念是容器化。它将您的程序及其所有依赖项编译成一个容器,这是一个自包含的实体。此容器与其他容器隔离运行,确保在不同环境中的一致行为。可以将其视为一个预配置的盒子,其中包含您的应用程序在任何地方正常运行所需的一切。
Q2. Docker 最适合用于什么?
Docker 是一个用于更快速地管理、部署和开发应用程序的出色工具。其轻量级容器促进了更轻松、更快速的构建。
此外,它们支持应用程序在各种环境中轻松扩展和迁移。此外,通过允许共享容器化应用程序,Docker 简化了团队协作。
Q3. Docker 的生命周期是什么?
Docker 容器的生命周期始于创建镜像,镜像充当蓝图。接下来,使用此镜像启动容器实例。
可以根据需要启动、停止、暂停和重新启动容器。最后,当不再需要时,可以删除容器。
Q4. Docker 是 PaaS 还是 IaaS?
Docker 不是基础设施即服务 (IaaS) 或平台即服务 (PaaS)。它专注于容器化,独特的应用程序打包和运行技术。
IaaS 提供虚拟化计算资源,而 PaaS 提供完整的开发和部署环境。Docker 与 IaaS 和 PaaS 解决方案都能很好地配合使用。
Q5. 什么是 Dockerfile?
Dockerfile 是一个文本文件,其中包含有关如何创建 Docker 镜像的指令。它指定镜像中必须存在的库、应用程序代码和操作系统。可以将其视为一本食谱,指导 Docker 如何精确地执行组件和操作,以便为您的应用程序生成可工作的容器镜像。