如何在 Ubuntu 20.04 上安装和使用 Docker

2023-11-15

介绍

Docker是一个应用程序,可简化管理应用程序进程的过程容器。容器允许您在资源隔离的进程中运行应用程序。它们与虚拟机类似,但容器更便携,更资源友好,并且更依赖于主机操作系统。

有关 Docker 容器的不同组件的详细介绍,请查看Docker 生态系统:常用组件简介.

在本教程中,您将在 Ubuntu 20.04 上安装和使用 Docker Community Edition (CE)。您将安装 Docker 本身,使用容器和映像,并将映像推送到 Docker 存储库。

先决条件

要学习本教程,您将需要以下内容:

  • 通过以下方式设置一台 Ubuntu 20.04 服务器Ubuntu 20.04 初始服务器设置指南,包括 sudo 非 root 用户和防火墙。
  • 一个帐户码头工人中心如果您希望创建自己的映像并将其推送到 Docker Hub,如步骤 7 和 8 所示。

第 1 步 — 安装 Docker

Ubuntu 官方存储库中提供的 Docker 安装包可能不是最新版本。为了确保我们获得最新版本,我们将从官方 Docker 存储库安装 Docker。为此,我们将添加一个新的包源,添加来自 Docker 的 GPG 密钥以确保下载有效,然后安装该包。

首先,更新现有的软件包列表:

  1. sudo apt update

接下来,安装一些必备软件包apt通过 HTTPS 使用包:

  1. sudo apt installapt-transport-https ca-证书curl软件属性-通用

然后将官方 Docker 存储库的 GPG 密钥添加到您的系统中:

  1. curl -fsSLhttps://download.docker.com/linux/ubuntu/gpg| sudoapt-keyadd -

将 Docker 存储库添加到 APT 源:

  1. sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

这还将使用新添加的存储库中的 Docker 包更新我们的包数据库。

确保您要从 Docker 存储库而不是默认的 Ubuntu 存储库进行安装:

  1. apt 缓存策略 docker-ce

尽管 Docker 的版本号可能不同,但您将看到如下输出:

apt-cache 策略 docker-ce 的输出
docker-ce:
  Installed: (none)
  Candidate: 5:19.03.9~3-0~ubuntu-focal
  Version table:
     5:19.03.9~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

请注意docker-ce尚未安装,但安装候选来自 Ubuntu 20.04 的 Docker 存储库(focal).

最后,安装 Docker:

  1. sudo apt installdocker-ce

Docker 现在应该已安装,守护进程已启动,并且该进程可以在启动时启动。检查它是否正在运行:

  1. sudo系统控制状态docker

输出应类似于以下内容,表明服务处于活动状态并正在运行:

Output
● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-05-19 17:00:41 UTC; 17s ago TriggeredBy: ● docker.socket Docs: https://docs.docker.com Main PID: 24321 (dockerd) Tasks: 8 Memory: 46.4M CGroup: /system.slice/docker.service └─24321 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

现在安装 Docker 不仅为您提供 Docker 服务(守护进程),还为您提供docker命令行实用程序或 Docker 客户端。我们将探讨如何使用docker本教程后面的命令。

步骤 2 — 不使用 Sudo 执行 Docker 命令(可选)

默认情况下,docker命令只能运行root用户或由用户在dockergroup,它是在 Docker 安装过程中自动创建的。如果您尝试运行docker命令不带前缀sudo或不在docker组,你会得到这样的输出:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

如果你想避免打字sudo每当你运行docker命令,将您的用户名添加到docker group:

  1. sudo usermod -aG docker ${USER}

要应用新的组成员身份,请注销服务器并重新登录,或键入以下内容:

  1. su - ${USER}

系统将提示您输入用户密码以继续。

确认您的用户现已添加到docker通过键入以下内容进行分组:

  1. groups
Output
sammy sudo docker

如果您需要添加用户docker您未登录的组,请使用以下方式显式声明该用户名:

  1. sudo usermod -aG docker username

本文的其余部分假设您正在运行docker以用户身份执行命令docker团体。如果您选择不这样做,请在命令前面加上sudo.

让我们探索一下docker接下来命令。

第 3 步 — 使用 Docker 命令

Using docker包括向其传递一系列选项和命令,后跟参数。语法采用以下形式:

  1. docker [option] [command] [论点]

要查看所有可用的子命令,请键入:

  1. docker

从 Docker 19 开始,可用子命令的完整列表包括:

Output
attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes

要查看特定命令可用的选项,请键入:

  1. docker docker-subcommand --help

要查看有关 Docker 的系统范围信息,请使用:

  1. docker info

让我们探索其中一些命令。我们将从处理图像开始。

第 4 步 — 使用 Docker 镜像

Docker 容器是从 Docker 镜像构建的。默认情况下,Docker 从以下位置提取这些镜像:码头工人中心,由 Docker 项目背后的公司 Docker 管理的 Docker 注册表。任何人都可以在 Docker Hub 上托管其 Docker 镜像,因此您需要的大多数应用程序和 Linux 发行版都会在那里托管镜像。

要检查是否可以从 Docker Hub 访问和下载映像,请键入:

  1. docker运行你好世界

输出将表明 Docker 工作正常:

Output
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...

Docker 最初无法找到hello-world本地镜像,因此它从 Docker Hub(默认存储库)下载了镜像。下载映像后,Docker 从映像创建一个容器,并执行容器内的应用程序并显示消息。

您可以使用以下命令搜索 Docker Hub 上可用的镜像docker命令与search子命令。例如,要搜索 Ubuntu 映像,请键入:

  1. docker搜索 ubuntu

该脚本将抓取 Docker Hub 并返回名称与搜索字符串匹配的所有图像的列表。在这种情况下,输出将类似于以下内容:

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating sys… 10908 [OK] dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 428 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 244 [OK] consol/ubuntu-xfce-vnc Ubuntu container with "headless" VNC session… 218 [OK] ubuntu-upstart Upstart is an event-based replacement for th… 108 [OK] ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ...

In the OFFICIAL柱子,OK表示由项目背后的公司构建和支持的图像。确定要使用的图像后,您可以使用以下命令将其下载到计算机上:pull子命令。

执行以下命令下载官方ubuntu图像到您的计算机:

  1. docker拉ubuntu

您将看到以下输出:

Output
Using default tag: latest latest: Pulling from library/ubuntu d51af753c3d3: Pull complete fc878cd0a91c: Pull complete 6154df8ff988: Pull complete fee5db0ff82f: Pull complete Digest: sha256:747d2dbbaaee995098c9792d99bd333c6783ce56150d1b11e333bbceed5c54d7 Status: Downloaded newer image for ubuntu:latest docker.io/library/ubuntu:latest

下载镜像后,您可以使用下载的镜像运行容器run子命令。正如你所看到的hello-world例如,如果图像尚未下载docker执行的是run子命令时,Docker 客户端将首先下载镜像,然后使用它运行容器。

要查看已下载到您的计算机的图像,请键入:

  1. docker images

输出将类似于以下内容:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB hello-world latest bf756fb1ae65 4 months ago 13.3kB

正如您将在本教程后面看到的,可以修改用于运行容器的图像并用于生成新图像,然后可以上传这些图像(pushed是技术术语)到 Docker Hub 或其他 Docker 注册表。

让我们更详细地看看如何运行容器。

第 5 步 — 运行 Docker 容器

The hello-world您在上一步中运行的容器是在发出测试消息后运行并退出的容器的示例。容器比这有用得多,而且它们可以交互。毕竟,它们类似于虚拟机,只是更加资源友好。

作为示例,让我们使用最新的 Ubuntu 映像运行一个容器。的组合-i and -t开关使您可以交互式 shell 访问容器:

  1. docker run -it ubuntu

您的命令提示符应更改以反映您现在正在容器内工作的事实,并且应采用以下形式:

Output
root@d9b100f2f636:/#

记下命令提示符中的容器 ID。在这个例子中,它是d9b100f2f636。稍后当您想要删除容器时,您将需要该容器 ID 来识别该容器。

现在您可以在容器内运行任何命令。例如,让我们更新容器内的包数据库。您不需要在任何命令前添加前缀sudo,因为你在容器内操作root user:

  1. apt update

然后在其中安装任何应用程序。让我们安装 Node.js:

  1. apt install nodejs

这会从官方 Ubuntu 存储库将 Node.js 安装到容器中。安装完成后,验证 Node.js 是否已安装:

  1. node -v

您将看到终端中显示的版本号:

Output
v10.19.0

您在容器内所做的任何更改仅适用于该容器。

要退出容器,请输入exit在提示符下。

接下来让我们看看如何管理系统上的容器。

第 6 步 — 管理 Docker 容器

使用 Docker 一段时间后,您的计算机上将有许多活动(正在运行)和非活动容器。要查看活跃的, use:

  1. docker ps

您将看到类似于以下内容的输出:

Output
CONTAINER ID IMAGE COMMAND CREATED

在本教程中,您启动了两个容器;一个来自hello-world图像和另一个来自ubuntu图像。两个容器都不再运行,但它们仍然存在于您的系统上。

要查看所有容器 - 活动和非活动,请运行docker ps-a switch:

  1. docker ps -a

您将看到与此类似的输出:

1c08a7a0d0e4        ubuntu              "/bin/bash"         2 minutes ago       Exited (0) 8 seconds ago                       quizzical_mcnulty
a707221a5f6c        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                       youthful_curie

要查看您创建的最新容器,请将其传递给-l switch:

  1. docker ps -l
  1. 容器 ID 图像命令创建状态端口名称
  2. 1c08a7a0d0e4 ubuntu“/bin/bash” 2分钟前 已退出(0) 40几秒钟前 quizzical_mcnulty

要启动已停止的容器,请使用docker start,后跟容器 ID 或容器名称。让我们启动 ID 为 Ubuntu 的容器1c08a7a0d0e4:

  1. docker start 1c08a7a0d0e4

容器将启动,您可以使用docker ps查看其状态:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "/bin/bash" 3 minutes ago Up 5 seconds quizzical_mcnulty

要停止正在运行的容器,请使用docker stop,后跟容器 ID 或名称。这次,我们将使用 Docker 为容器分配的名称,即quizzical_mcnulty:

  1. docker stop quizzical_mcnulty

一旦您决定不再需要容器,请使用docker rm命令,再次使用容器 ID 或名称。使用docker ps -a命令查找与该容器关联的容器 ID 或名称hello-world图像并将其删除。

  1. docker rm youthful_curie

您可以启动一个新容器并使用以下命令为其命名--name转变。您还可以使用--rmswitch 创建一个容器,该容器在停止时会自行删除。请参阅docker run help命令以获取有关这些选项和其他选项的更多信息。

容器可以转换为可用于构建新容器的映像。让我们看看它是如何工作的。

第 7 步 — 将容器中的更改提交到 Docker 映像

当您启动 Docker 映像时,您可以像使用虚拟机一样创建、修改和删除文件。您所做的更改将仅应用于该容器。你可以启动和停止它,但是一旦你用docker rm命令,更改将永久丢失。

本节向您展示如何将容器的状态保存为新的 Docker 映像。

在 Ubuntu 容器中安装 Node.js 后,您现在拥有一个运行映像的容器,但该容器与您用于创建它的映像不同。但您可能希望稍后重用此 Node.js 容器作为新映像的基础。

然后使用以下命令将更改提交到新的 Docker 映像实例。

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

The -mswitch 用于提交消息,帮助您和其他人了解您所做的更改,而-a用于指定作者。这container_id是您在本教程前面启动交互式 Docker 会话时注意到的那个。除非您在 Docker Hub 上创建了额外的存储库,否则repository通常是您的 Docker Hub 用户名。

例如,对于用户sammy,容器 ID 为d9b100f2f636,命令为:

  1. docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

当你commit图像,新图像将保存在您的计算机本地。在本教程的后面部分,您将学习如何将映像推送到 Docker 注册表(例如 Docker Hub),以便其他人可以访问它。

再次列出 Docker 映像将显示新映像及其派生自的旧映像:

  1. docker images

你会看到这样的输出:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB ...

在这个例子中,ubuntu-nodejs是新图像,源自现有图像ubuntu来自 Docker Hub 的图像。大小差异反映了所做的更改。在这个例子中,变化是安装了 NodeJS。因此,下次您需要使用预装 NodeJS 的 Ubuntu 来运行容器时,您可以只使用新镜像。

您还可以从Dockerfile,它允许您在新映像中自动安装软件。但是,这超出了本教程的范围。

现在让我们与其他人共享新映像,以便他们可以从中创建容器。

第 8 步 — 将 Docker 镜像推送到 Docker 存储库

从现有映像创建新映像后,下一个合乎逻辑的步骤是与选定的几个朋友、Docker Hub 上的整个世界或您有权访问的其他 Docker 注册表共享它。要将映像推送到 Docker Hub 或任何其他 Docker 注册表,您必须在那里有一个帐户。

本节向您展示如何将 Docker 镜像推送到 Docker Hub。要了解如何创建您自己的私有 Docker 注册表,请查看如何在 Ubuntu 18.04 上设置私有 Docker 注册表.

要推送您的映像,请首先登录 Docker Hub。

  1. docker login -u docker-registry-username

系统将提示您使用 Docker Hub 密码进行身份验证。如果您指定了正确的密码,身份验证应该会成功。

Note:如果您的 Docker 注册表用户名与用于创建映像的本地用户名不同,您将必须使用您的注册表用户名来标记您的映像。对于最后一步中给出的示例,您可以输入:

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

然后你可以使用以下方式推送你自己的图像:

  1. docker push docker-registry-username/docker-image-name

为了推动ubuntu-nodejs图像到sammy存储库,命令是:

  1. docker push sammy/ubuntu-nodejs

该过程在上传图像时可能需要一些时间才能完成,但完成后,输出将如下所示:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

将图像推送到注册表后,它应该列在您帐户的仪表板上,如下图所示。

New Docker image listing on Docker Hub

如果推送尝试导致此类错误,则您可能没有登录:

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

登录方式docker login并重复推送尝试。然后验证它是否存在于您的 Docker Hub 存储库页面上。

You can now use docker pull sammy/ubuntu-nodejs to pull the image to a new machine and use it to run a new container.

结论

在本教程中,您安装了 Docker,使用了映像和容器,并将修改后的映像推送到 Docker Hub。现在您已经了解了基础知识,接下来探索其他 Docker 教程在 DigitalOcean 社区中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 20.04 上安装和使用 Docker 的相关文章

随机推荐

  • Java IO 教程

    Java提供了几个类java io用于处理文本 流数据和文件系统的包 我最近提供了几个有关 Java 文件和 Java IO 的示例 这篇文章是所有 Java IO 文章的索引 Java IO 如何在 Java 中创建新文件在这篇文章中 您
  • Java Stream Collect() 方法示例

    Java Streamcollect 对流的元素执行可变归约操作 这是终端操作 什么是可变约简操作 可变归约操作处理流元素 然后将其累积到可变结果容器中 处理元素后 组合函数将合并所有结果容器以创建结果 Java Stream Collec
  • 快速初始化()

    在本 Swift 教程中 我们将讨论一个重要的概念 即 Swift init 或 Swift 初始化 初始化是当我们创建某种类型的实例时发生的事情 快速初始化 初始化是准备类 结构或枚举的实例以供使用的过程 此过程涉及为该实例上的每个存储属
  • 如何在 Debian Wheezy 上使用 Postfix 安装和配置 DKIM

    介绍 对于大多数邮件服务器管理员来说 被错误地标记为垃圾邮件发送者所带来的挫败感并不奇怪 通过排除服务器受损的可能性 错误标记通常是由以下原因之一引起的 该服务器是一个开放的邮件中继 发件人或服务器的 IP 地址已列入黑名单 服务器没有完全
  • Linux/Unix 中的 AWK 命令

    AWK 适用于模式搜索和处理 该脚本运行以搜索一个或多个文件以识别匹配模式以及所述模式是否执行特定任务 在本指南中 我们将了解 AWK Linux 命令并了解它的功能 AWK 可以执行哪些操作 逐行扫描文件 将每个输入行拆分为字段 将输入行
  • 如何在 Python 中将字符串转换为日期时间或时间对象

    介绍 蟒蛇datetime and time模块均包括strptime 将字符串转换为对象的类方法 在本文中 您将使用strptime 将字符串转换为datetime and struct time 对象 将字符串转换为datetime对象
  • 如何在 Ubuntu 18.04 上使用 Python 3 设置 Jupyter Notebook

    介绍 Jupyter笔记本是一个开源 Web 应用程序 可让您创建和共享交互式代码 可视化等 该工具可与多种编程语言一起使用 包括 Python Julia R Haskell 和 Ruby 它通常用于处理数据 统计建模和机器学习 本教程将
  • 了解 Vue.js 生命周期挂钩

    介绍 生命周期挂钩是了解您正在使用的库如何在幕后工作的窗口 生命周期钩子允许您知道组件何时被创建 添加到 DOM 更新或销毁 本文将向您介绍 Vue js 中的创建 安装 更新和销毁钩子 先决条件 要完成本教程 您需要 熟悉 Vue js
  • Java 单例类中的线程安全

    Singleton 是最广泛使用的创建型设计模式之一 用于限制应用程序创建的对象 如果是在多线程环境中使用 那么单例类的线程安全性就非常重要 在现实应用程序中 数据库连接或企业信息系统 EIS 等资源是有限的 应明智地使用以避免任何资源紧缩
  • Fail2Ban 如何保护 Linux 服务器上的服务

    介绍 SSH 是连接云服务器的事实上的方法 它耐用且可扩展 随着新的加密标准的开发 它们可用于生成新的 SSH 密钥 确保核心协议保持安全 然而 没有任何协议或软件堆栈是完全万无一失的 SSH 在互联网上如此广泛的部署意味着它代表了一种非常
  • 如何在运行 Ubuntu 的 VPS 上安装和使用 Composer

    Status 已弃用 本文介绍不再受支持的 Ubuntu 版本 如果您当前运行的服务器运行 Ubuntu 12 04 我们强烈建议您升级或迁移到受支持的 Ubuntu 版本 升级到Ubuntu 14 04 从 Ubuntu 14 04 升级
  • 如何在 Rocky Linux 9 上安装 Node.js

    介绍 Node js是用于服务器端编程的 JavaScript 运行时 它允许开发人员使用 JavaScript 创建可扩展的后端功能 这是许多人在基于浏览器的 Web 开发中已经熟悉的语言 在本指南中 您将了解在 Rocky Linux
  • Java 堆空间与堆栈 - Java 中的内存分配

    不久前我写了几篇关于Java 垃圾收集 and Java 是按值传递 之后我收到了很多电子邮件来解释Java堆空间 Java堆栈内存 Java中的内存分配它们之间有什么区别 您会在 Java Java EE 书籍和教程中看到很多对堆和堆栈内
  • Spring WebFlux - Spring 响应式编程

    Spring WebFlux是Spring 5中引入的新模块 Spring WebFlux是Spring框架中向反应式编程模型迈出的第一步 Spring 响应式编程 如果您是反应式编程模型的新手 那么我强烈建议您阅读以下文章来了解反应式编程
  • 如何在 Ubuntu 16.04 上设置 Apache 虚拟主机

    介绍 Apache Web 服务器是在互联网上提供 Web 内容的最流行的方式 它占互联网上所有活跃网站的一半以上 并且非常强大和灵活 Apache 将其功能和组件分解为可以独立定制和配置的单独单元 描述单个站点或域的基本单位称为virtu
  • Android 倒计时器示例

    在这个 android 倒数计时器示例中 我们将实现一个计时器对象来显示进度进度条 我们将在本教程中构建的应用程序是测验应用程序中的一个有用组件 其中以图形方式显示完成该级别的剩余时间 以增强用户体验 Android 倒计时器 Androi
  • 如何在 Ubuntu 18.04 上设置私有 Docker 注册表

    作者选择了阿帕奇软件基金会接受捐赠作为为捐款而写程序 介绍 Docker 注册表是一个管理存储和交付 Docker 容器镜像的应用程序 注册表集中容器映像并减少开发人员的构建时间 Docker 镜像通过虚拟化保证相同的运行时环境 但构建镜像
  • C 编程中的 fgets() 和 gets()

    介绍 我们都熟悉scanf 功能 它是适用于获取基本用户输入的主要功能 虽然scanf 在接受诸如以下输入时效果很好整数 字符 浮点数等等 在获取包含空格的字符串输入时 它肯定会落后 让我们看一个例子 include
  • Spring Bean 范围

    Spring Bean Scopes 允许我们更精细地控制 bean 实例的创建 有时我们希望将 bean 实例创建为单例 但在其他一些情况下 我们可能希望在每次请求时或在会话中创建一次 Spring Bean 范围 有五种类型春豆 sco
  • 如何在 Ubuntu 20.04 上安装和使用 Docker

    介绍 Docker是一个应用程序 可简化管理应用程序进程的过程容器 容器允许您在资源隔离的进程中运行应用程序 它们与虚拟机类似 但容器更便携 更资源友好 并且更依赖于主机操作系统 有关 Docker 容器的不同组件的详细介绍 请查看Dock