Docker 初学者教程:基础知识, Archi建筑,容器

⚡ 智能摘要

Docker 是一个容器化平台,它将应用程序及其依赖项打包到可移植、轻量级的容器中。本概述解释了 Docker 架构、安装等内容。 Ubuntu基本命令,以及容器与传统虚拟机在加快软件交付速度方面的区别。

  • 🐳 容器化: Docker 在操作系统级别进行虚拟化,因此容器共享主机内核,并且比虚拟机使用的资源更少。
  • 🧱 结 构: Docker 引擎 (dockerd)、镜像、镜像仓库和容器构成了每个 Docker 工作流背后的客户端-服务器架构。
  • 📦 图片和容器: 镜像是一个只读模板,而容器是一个运行副本,一个镜像可以启动多个容器。
  • 🗄️ 注册表: Docker Hub 存储公共和私有镜像,为您提供数百万个可直接使用的镜像,供您拉取和运行。
  • ⚙️ 安装方式: On Ubuntu 添加 Docker APT 存储库和 GPG 密钥,然后使用 apt-get 安装 docker-ce 软件包。
  • ⌨️ 核心命令: 使用命令行通过 docker pull、run、start、stop、ps、stats 和 images 命令管理容器。

面向初学者的 Docker 教程,涵盖架构、安装等内容。 Ubuntu以及基本的容器命令

Docker是现代容器化技术中最流行的平台之一。 DevOps的 以及云工作流。这篇面向初学者的 Docker 教程解释了 Docker 是什么、Docker 架构的工作原理以及如何在云端安装 Docker。 Ubuntu以及用于管理镜像和容器的基本命令。

什么是Docker?

Docker Docker 是一个用于虚拟化的软件开发平台,它允许多个操作系统在同一主机上运行。它帮助您将基础架构与应用程序分离,从而快速交付软件。与用于创建虚拟机 (VM) 的虚拟机管理程序不同,Docker 使用称为 Docker 容器的单元在系统级别执行虚拟化。

如下图所示,Docker 容器运行在宿主机操作系统之上。这提高了效率和安全性。此外,由于容器占用资源更少,因此您可以在相同的基础设施上运行比虚拟机更多的容器。

Docker 与 Hypervisor 中的虚拟化
Docker 与 Hypervisor 中的虚拟化

与可以直接与主机硬件(例如,创建更多虚拟适配器的以太网适配器)通信的虚拟机不同,Docker 容器运行在主机操作系统之上的隔离环境中。即使您的主机运行 Windows,您可以运行 Linux 借助以下方式将图像放入容器中 Hyper-V它会自动创建一个小型虚拟机来虚拟化基础镜像。

现在您已经了解了 Docker 是什么,让我们来看看团队选择它的主要原因。

为什么要使用 Docker?

以下是使用 Docker 的主要原因:

  • Docker 是一种用于虚拟化的软件,它允许多个虚拟机运行在同一个容器中。 操作系统 在同一主机上运行。
  • Docker 是一种客户端-服务器应用程序,这意味着客户端与服务器进行通信。
  • Docker 镜像充当容器的“源代码”;您可以使用它们来构建容器。
  • Docker 支持两种类型的注册表:公共注册表和私有注册表。
  • 容器是 Docker 的组织单元。简单来说,镜像是一个模板,容器是该模板的副本,因此你可以从同一个镜像运行多个容器。

这些优势源于 Docker 的设计方式。以下部分将详细介绍 Docker 架构及其核心组件。

Docker Archi质地

现在,在本 Docker 容器教程中,让我们来看看 Docker 架构的主要组成部分。

Docker Archi架构组件:引擎、镜像、注册表和容器

Docker Archi质地

Docker引擎

Docker 是一种客户端-服务器架构的应用程序,这意味着客户端会向服务器转发请求。Docker 守护进程(名为 dockerd)是 Docker 引擎,代表服务器。守护进程和客户端可以运行在同一主机上,也可以运行在远程主机上,它们通过命令行客户端二进制文件和完整的 Docker 服务进行通信。 RESTful API 与 dockerd 交互。

泊坞窗图像

Docker 镜像就像容器的“源代码”,我们用它们来构建容器。镜像可以预装软件,从而加快部署速度。它们具有可移植性,你可以使用现有的镜像,也可以构建自己的镜像。

Docker 注册表

Docker 将我们构建的镜像存储在镜像仓库中。镜像仓库分为公共仓库和私有仓库。Docker 有一个公共镜像仓库,名为 Docker中心你也可以将镜像私密地存储在 Docker Hub 上。Docker Hub 拥有数百万个镜像,你可以立即开始使用。

Docker容器

容器是 Docker 的组织单元,也是其基本概念之一。当我们构建并运行镜像时,实际上是在容器内运行它。之所以使用容器的比喻,是因为运行在其中的软件具有可移植性:你可以像货船处理真正的集装箱一样,移动、运输、修改、管理、创建或销毁它。

简单来说,镜像是模板,容器是模板的副本。您可以拥有同一镜像的多个容器(副本)。

这些不同组件之间的交互展示了 Docker 容器技术是如何协同工作的。诸如 docker pull 和 docker run 之类的命令(我们稍后会介绍)可以帮助您管理此工作流程。

考虑到架构,让我们安装 Docker,以便您可以亲自尝试这些组件。

如何在 Linux 上安装 Docker/Ubuntu

以下是在 Linux 系统上逐步安装 Docker 的过程/Ubuntu:

步骤1) 要安装 Docker,您需要 Docker 团队提供的 DEB 软件包。首先,需要一些先决条件。 Ubuntu 需要安装某些软件包。请使用以下命令进行安装。

$ sudo apt-get install \
apt-transport-https \
ca-certificates curl \
software-properties-common

*“\” 符号不是必需的,它用于换行,如果愿意,您可以在一行中编写不使用“\”的命令。

步骤2) 添加带有指纹的官方 Docker GPG 密钥。使用以下 Docker 命令输入 GPG 密钥。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

步骤3) 接下来,使用以下命令添加 Docker APT 存储库。

$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

系统可能会提示您确认是否要添加存储库并将 GPG 密钥自动添加到您的主机。lsb_release 命令应该会填充以下内容: Ubuntu 您的主机的发行版本。

步骤4) 添加 GPG 密钥后,使用以下 Docker 命令更新 APT 源。

$ sudo apt-get update

现在您可以安装 Docker 软件包本身了。

步骤5) APT 源更新完成后,即可开始安装 Docker 软件包。 Ubuntu 使用以下 Docker 命令。

$ sudo apt-get install docker-ce

上述命令会安装 Docker 和其他必需的软件包。在 Docker 1.8.0 之前,软件包名称为 lxc-docker;在 Docker 1.8 到 1.13 之间,软件包名称为 docker-engine。

注意: Docker for Windows 过程需要在牛奶或乳清产品在管式降膜蒸发器中浓缩至约XNUMX%固体含量之前,进行初始的热处理和巴氏杀菌步骤。 Windows 10 Pro 或 Enterprise 版本 14393,或 Windows 运行 Server 2016 RTM。

如何使用基本 Docker 命令来使用 Docker

以下是如何使用 Docker 的一些基本命令。

如前所述,安装 Docker 后最基本的命令是 docker info。

$ sudo docker info

你应该会得到类似以下的结果。

使用基本的 Docker 命令操作 Docker,并显示 docker info 输出

如上面的 Docker 示例所示,我们可以看到有关 Docker 容器的信息:有多少容器正在运行、暂停或停止,以及已下载了多少镜像。现在让我们获取第一个镜像。

$ sudo docker pull alpine

通过此命令,我们告诉 Docker 下载 alpine 镜像,从公共注册表中拉取最新版本(默认情况下已设置)。

*alpine 是一个基于 Alpine Linux 的最小 Docker 镜像,具有完整的软件包索引,大小仅为 5 MB。

如果要将镜像作为容器运行,可以使用以下命令。

$ sudo docker run -i -t alpine /bin/bash

运行该命令会直接进入 Alpine 终端。`-i` 标志会保持容器内的标准输入 (STDIN) 开放,即使您未连接到该容器;这种持久的标准输入是实现交互式 shell 的一半要素。`-t` 标志是另一半要素,它指示 Docker 为容器分配一个伪终端 (pseudo-tty)。两者结合,我们就可以在新容器中获得交互式 shell。我们使用简单的 `exit` 命令退出容器。

现在,在本 Docker 基础教程中,我们可以尝试运行一个 Ubuntu 图片。

$ sudo docker run -it ubuntu /bin/bash

请注意,Docker 会先检查本地是否存在镜像,如果不存在,则会自动从镜像库拉取镜像。现在,我们又可以运行交互式 shell 了。我们还可以在运行容器时为其命名。

$ sudo docker run –-name our_container -it ubuntu /bin/bash

然后我们再次退出。我们也可以运行之前创建的容器,而无需交互式 shell。

$ sudo docker start container_name

我们通过输入 docker stop container_name 来停止容器。

$ sudo docker stop container_name

如果我们想查看所有正在运行的容器,只需运行以下命令。

$ docker ps

对于所有容器,我们在同一命令的末尾添加“-a”,例如 docker ps -a。该命令显示容器 ID、它使用的镜像、创建时间、运行状态、暴露的端口以及一个随机生成的名称,以便于管理。

运行容器时,我们经常需要知道它们正在使用多少资源。为此,我们可以使用以下命令。

$ docker stats

您还可以查看已下载到本地的图片及其相关信息。

$ sudo docker images

上面 Docker 示例中的命令会显示每个 Docker 镜像,并带有显示镜像版本、唯一镜像 ID、创建日期和镜像大小的标签。

要了解容器为何是一项如此巨大的改进,了解虚拟化的发展历程会有所帮助。

什么是虚拟化?

以前,部署服务既缓慢又麻烦。开发人员编写代码,然后运维团队将其部署到裸机上,他们必须密切关注库版本、补丁和语言编译器,以确保代码能够正常运行。如果出现错误或漏洞,整个流程就得重新开始:开发人员修复问题,运维团队再重新部署。

随着虚拟机管理程序的出现,情况有所改善。虚拟机管理程序可以运行多个虚拟机。 虚拟机或者,也可以在同一主机上运行多个虚拟机,这些虚拟机可能正在运行,也可能处于关闭状态。虚拟机大大缩短了部署代码和修复 bug 的等待时间,但真正改变游戏规则的是 Docker 容器。

Docker 的流行也得益于能够大规模管理容器的编排工具,例如: Kubernetes在继续之前,这里快速列出一些最重要的 Docker 命令。

重要的 Docker 命令

以下是重要的 Docker 命令:

命令 描述
码头工人信息 信息司令部
码头工人拉 下载图片
docker run -i -t 镜像名称/bin/bash 将镜像作为容器运行
docker 启动我们的容器 启动容器
docker stop 容器名称 停止容器
码头工人 所有正在运行的容器列表
码头工人统计 容器信息
码头图片 下载的图像列表
Docker 清理 终止所有正在运行的容器。

另外,请阅读这些内容。 Docker 工作面试问题及答案 适合应届毕业生和经验丰富的专业人士。

常见问题

Docker 容器与宿主机共享操作系统内核,仅隔离应用程序,因此体积小巧,启动只需几秒。而虚拟机则捆绑了完整的客户操作系统,这导致其体积更大、启动速度更慢、资源消耗更高。

Dockerfile 是一个纯文本脚本,其中包含诸如 FROM、RUN、COPY 和 CMD 之类的指令。Docker 读取这些指令来自动构建镜像。每一行都会添加一个镜像层,使你可以在任何机器上复现相同的环境。

Docker Compose 使用单个 YAML 文件定义和运行多容器应用程序。您只需描述一次每个服务、网络和卷,然后使用 `docker compose up` 命令启动所有内容。它非常适合本地开发和测试连接的服务。

Docker 构建并运行单个容器,而 Kubernetes Kubernetes 负责协调集群中的多个容器。它还具备自动扩展、自愈和负载均衡功能。实际上,Docker 负责打包应用程序,而 Kubernetes 则负责在生产环境中对其进行管理。

Docker Engine 是基于 Apache 2.0 许可证的免费开源软件。Docker Desktop 对个人用户、教育机构和小型企业免费开放,但大型企业需要付费订阅。Docker Hub 提供免费和付费的镜像托管方案。

Docker 可以在 Linux 上原生运行,并受到支持。 Windows 和 macOS 通过 Docker Desktop。 Windows 在Mac系统上,Docker使用轻量级虚拟机来运行容器所需的Linux内核。大多数容器镜像都是基于Linux的。

AI 助手可以根据纯文本提示生成 Dockerfile、docker-compose 文件和 CLI 命令。它们还能读取构建日志和容器错误,解释错误原因并提供修复建议。运行前务必检查生成的配置,确保镜像标签、路径和安全设置正确。

是的。 GitHub 副驾驶 ChatGPT 可以根据简短的注释或描述生成 Dockerfile 和 Compose 文件。它们可以加快样板代码的编写速度,但您应该验证基础镜像、版本和最佳实践,因为生成的代码片段可能使用过时的默认值。

总结一下这篇文章: