Docker 简介

你有没有想过市场上涌现 Docker 容器的原因?在 Docker 出现之前,大多数开发人员在编写代码时都会遇到一个大问题:代码在自己的电脑上可以运行,但当他们尝试在服务器上运行该代码时,却无法正常工作。这是因为应用程序需要合适的运行环境(例如合适的操作系统、库和设置)。如果你的电脑和服务器上的某些东西出现差异,就会出现问题。

为了解决这个问题,Docker 容器应运而生。Docker 是一个开源容器化平台,你可以将应用程序及其所有依赖项打包到一个名为“容器”的标准化单元中。容器是轻量级的,易于移植,并且与底层基础设施以及其他容器相互隔离。你可以在任何安装了 Docker 的机器上将 Docker 镜像运行为 Docker 容器,而无需依赖宿主机的操作系统。

Docker 有两个主要部分:Docker 引擎,它是在本地计算机和服务器上运行的二进制程序,负责处理容器的创建和管理。Docker Hub 是一个网站和云服务,方便每个人轻松共享他们的 Docker 镜像。

Docker 为何如此受欢迎?

Docker 因其对软件开发和部署的影响而广受欢迎。以下是 Docker 流行的一些主要原因:

  1. 可移植性: Docker 方便开发人员将其应用程序及其所有依赖项打包到单个轻量级容器中。它有助于确保不同计算环境中的一致性。
  2. 可重复性:将应用程序及其依赖项封装在容器中,可确保软件设置在开发、测试和生产环境中保持一致。
  3. 效率: Docker 通过其基于容器的架构优化了资源利用率。它允许开发人员在单个主机系统上运行多个独立的应用程序。
  4. 可扩展性: Docker 的可扩展性特性使得开发人员在工作负载增加时能够更轻松地处理他们的应用程序。

Docker 的关键组件

以下是 Docker 的一些关键组件:

  • Docker 引擎:Docker 引擎是 docker 的核心部分,负责处理容器的创建和管理。
  • Docker Image:Docker Image 是一个只读模板,用于创建容器,包含应用程序代码和依赖项。
  • Docker Hub:它是一个基于云的存储库,用于查找和共享容器镜像。
  • Dockerfile:是一个描述快速创建镜像步骤的文件。
  • Docker Registry:它是一个 docker 镜像的存储分发系统,您可以在其中以公共和私有模式存储镜像。

什么是 Dockerfile?

Dockerfile 使用 DSL(领域特定语言),包含生成 Docker 镜像的指令。Dockerfile 用于定义构建镜像的流程。创建应用程序时,应按顺序书写指令,因为 Docker 守护进程会从上到下运行所有 ​​ 指令。Dockerfile 是镜像的源代码。(Docker 守护进程,通常简称为“Docker”,是管理系容器的后台服务。)

  • 它是一个文本文档,包含必要的命令,执行后有助于组装 Docker 镜像。
  • Docker 镜像是使用 Dockerfile 创建的。

Dockerfile

Docker 架构以及 Docker 如何工作?

Docker 采用客户端-服务器架构。Docker 客户端与 Docker 守护进程通信,后者负责构建、运行和分发 Docker 容器。Docker 客户端与守护进程在同一系统上运行,或者我们可以将 Docker 客户端与 Docker 守护进程远程连接。借助 UNIX 套接字或网络上的 REST API,Docker 客户端和守护进程可以相互交互。要了解更多关于 Docker 工作原理的信息,请参阅Docker 架构

Architecture of Docker.png

什么是 Docker 镜像?

它是一个分层存储的文件,用于保存在 Docker 容器中执行的代码。它们是一组用于创建 Docker 容器的指令。Docker 镜像是一个可执行软件包,包含运行应用程序所需的一切。

该镜像指示容器应如何实例化,确定哪些软件组件将运行以及如何运行。Docker 容器是一个虚拟环境,它将应用程序代码与运行应用程序所需的所有依赖项捆绑在一起。应用程序可以在不同计算环境之间快速可靠地运行。

Docker 镜像的底层技术为联合文件系统(如 Overlay2、AUFS)将多层合并为一个统一的文件系统视图,使容器运行时看到完整的文件系统。

什么是 Docker 容器?

Docker 容器是镜像的运行时实例。它允许开发人员将应用程序与所需的所有组件(例如库和其他依赖项)打包在一起。Docker 容器是 Docker 镜像的实例。容器包含应用程序所需的全部工具,因此应用程序可以以隔离的方式运行。

例如,假设有一个带有 NGINX SERVER 的 Ubuntu OS 映像,当使用 docker run 命令运行该映像时,将创建一个容器,并且 NGINX SERVER 将在 Ubuntu OS 上运行, 无论 docker 引擎所在的主机运行在何种操作系统之上。

什么是 Docker Hub?

Docker Hub 是一个基于云的镜像仓库服务,用户可以随时随地通过互联网将 Docker 容器镜像推送到 Docker Hub,也可以从 Docker Hub 拉取 Docker 容器镜像。它可以轻松查找和重复使用镜像。它提供多种功能,例如,用户可以将镜像推送到私有或公共镜像仓库,并在其中存储和共享 Docker 镜像。

Docker Hub 主要由 DevOps 团队使用。它是一个开源工具,可免费用于所有操作系统。它就像一个存储空间,用于存储镜像,并在需要时拉取镜像。想要从 Docker Hub 推送/拉取镜像的人必须具备 Docker 的基础知识。

Architecture of Docker.png

Docker 命令

通过引入基本的 docker 命令,docker 成为了一款功能强大的软件,能够简化容器管理流程。它有助于确保无缝的开发和部署工作流程。以下是一些常用的 docker 命令:

Docker run:用于从镜像启动容器,并指定运行时选项和命令。
Docker pull:它将容器镜像从 Docker Hub 等容器 registry 提取到本地机器。
Docker ps:它用于显示正在运行的容器及其重要信息,如容器 ID、使用的镜像和状态。
Docker stop:它用于正常停止正在运行的容器并关闭其中的进程。
Docker start:它用于重新启动已停止的容器,并从之前的状态恢复其操作。
Docker login:它用于登录到 docker registry,从而可以访问私有存储库。

要了解有关 docker 命令的更多信息,请参阅Docker – 指令命令

Docker 引擎

Docker Engine 是一个基于客户端-服务器的应用程序。Docker 引擎包含 3 个主要组件:

  • 服务器:负责在 Docker 上创建和管理 Docker 镜像、容器、网络和卷。它被称为守护进程。
  • REST API:它指定应用程序如何与服务器交互并指示它做什么。
  • 客户端:客户端是一个 docker 命令行界面 (CLI),它允许我们使用 docker 命令与 Docker 进行交互。

Docker 容器和虚拟机之间的区别

以下是 docker 容器和虚拟机之间的区别:

Docker 容器虚拟机
Docker 容器包含二进制文件、库和配置文件以及应用程序本身。虚拟机 (VM) 在虚拟机管理程序上运行,虚拟机管理程序允许多个虚拟机与其自己的操作系统一起在一台机器上运行。
它们不包含每个容器的 guest 操作系统,而是依赖于底层操作系统内核,这使得容器变得轻量级。每个虚拟机都有自己的操作系统副本以及应用程序和必要的二进制文件,这使得它变得更大并且需要更多的资源。
容器与同一主机操作系统中的其他容器共享资源,并提供操作系统级别的进程隔离。它们提供硬件级别的进程隔离,但启动速度较慢。

Docker 的重要性

以下是关于 docker 重要性的一些见解:

  • 效率和速度:通过将具有依赖关系的应用程序打包到一致的容器中,有助于简化开发和部署工作。
  • 资源优化:它有助于有效地共享主机系统资源,从而实现更高的应用程序密度并节省成本。
  • 可扩展性和可移植性:它能够轻松扩展应用程序并确保在不同环境之间无缝移动。
  • 隔离和安全:提供高度隔离,减少冲突并增强安全性。

Docker 的优势

以下是 Docker 的一些优点:

  • 可移植性: Docker 通过创建轻量级的可移植容器,使其可以在任何机器上运行,而不受底层操作系统的限制。
  • 隔离性: Docker 通过容器提供高级别的隔离性,使应用程序能够彼此独立运行,解决一个容器不会影响其他容器的问题。
  • 可重复性: 借助 Docker,开发人员可以轻松地将其应用程序及其依赖项打包成可重用的镜像。它允许在开发、测试和生产环境中进行一致且可重复的构建。
  • DevOps 集成 :它促进了整个软件开发生命周期的协作和自动化,以处理不断增加的工作量。

Docker 的使用案例

以下是 Docker 的一些使用案例:

1.持续集成和持续部署(CI/CD):它有助于简化和自动化软件交付流程,确保更快、更可靠的发布。

示例: 在线商店工作的团队可以使用 Docker 在每次有人更改代码时自动测试和更新网站。

2. 微服务架构: 它有助于微服务的开发、部署和管理,并实现独立的扩展和维护。

示例: 一款外卖应用可以有单独的容器,用于登录、下单和追踪配送。每个部分都可以更新或修复,而不会影响其他部分。

3. 开发环境一致性: Docker 为所有开发人员提供了相同的工作环境,无论他们使用什么计算机。

示例: 在一个团队中,一个人使用 Windows,另一个人可能使用 Mac,但 Docker 确保应用程序对每个人都以相同的方式运行,避免出现“它在我的计算机上运行,​​但在其他系统上不运行”之类的错误。

4. 多云和混合云部署: Docker 可以轻松地在不同的云平台(如 AWS、Azure 或 Google Cloud)上运行您的应用程序。

示例: 借助 Docker 容器,今天使用 AWS 的企业明天可以轻松地将其应用迁移到 Google Cloud。

Docker 与 Kubernetes

以下是docker和kubernetes的区别:

特征DockerKubernetes
主要目的容器化平台容器编排平台
功能创建和管理容器管理和扩展容器化应用程序
设置复杂性设置和使用简单更复杂的设置和配置
可扩展性仅限于单节点扩展专为大规模、多节点环境而设计
联网基本网络功能具有服务发现和负载均衡的高级网络
状态管理无状态;管理单个容器有状态;管理容器集群和服务
用例开发和测试环境对可扩展性和可靠性要求较高的生产环境

要了解更多 docker 和 Kubernetes 之间的区别,请参阅此文章

参考文档

What is Docker?

用 30 天來介紹和使用 Docker 系列

作者

鹏叔

发布于

2025-04-23

更新于

2025-04-28

许可协议

评论