什么是容器?

说明

想象一下,你正在开发一个杀手级的 Web 应用,它包含三个主要组件——一个 React 前端、一个 Python API 和一个 PostgreSQL 数据库。如果你想在这个项目上工作,你就必须安装 Node、Python 和 PostgreSQL。

如何确保你与团队中的其他开发人员使用相同的版本?或者与你的 CI/CD 系统相同?或者与生产环境中使用的版本相同?

如何确保您的应用所需的 Python(或 Node 或数据库)版本不受您机器上已有的内容影响?您如何管理潜在的冲突?

进入容器!

什么是容器?简单来说,容器是为您的应用程序的每个组件提供的隔离进程。每个组件——前端 React 应用程序、Python API 引擎和数据库——都在其自己的独立环境中运行,与您机器上的其他所有内容完全隔离。

这就是它们的伟大之处。容器具有以下特点:

  • 自包含。每个容器都拥有其运行所需的一切,不依赖于主机上的任何预安装依赖项。
  • 隔离。由于容器在隔离状态下运行,它们对主机和其他容器的影响最小,从而提高了应用程序的安全性。
  • 独立。每个容器都是独立管理的。删除一个容器不会影响其他容器。
  • 便携。容器可以在任何地方运行!在您的开发机器上运行的容器在数据中心或云端的任何地方都能以相同的方式工作!

容器与虚拟机 (VMs) 的对比

无需深入探讨,虚拟机(VM)是一个完整的操作系统,拥有自己的内核、硬件驱动程序、程序和应用程序。仅仅为了隔离一个应用程序而启动虚拟机,会带来大量的开销。

容器只是一个包含运行所需所有文件的独立进程。如果您运行多个容器,它们将共享同一个内核,从而使您能够在更少的基础设施上运行更多应用程序。

同时使用虚拟机和容器

通常,你会看到容器和虚拟机一起使用。例如,在云环境中,预配的机器通常是虚拟机。然而,不是为运行一个应用程序而预配一台机器,而是带有容器运行时的虚拟机可以运行多个容器化应用程序,从而提高资源利用率并降低成本。

试用

在这个动手实践中,您将看到如何使用 Docker Desktop GUI 运行 Docker 容器。


使用以下说明运行容器。

  1. 打开 Docker Desktop 并选择顶部导航栏上的 搜索 字段。

  2. 在搜索输入框中指定 welcome-to-docker,然后选择 拉取 按钮。

    A screenshot of the Docker Desktop Dashboard showing the search result for welcome-to-docker Docker image
  3. 镜像成功拉取后,选择 运行 按钮。

  4. 展开 可选设置

  5. 容器名称 中,指定 welcome-to-docker

  6. 主机端口 中,指定 8080

    A screenshot of Docker Desktop Dashboard showing the container run dialog with welcome-to-docker typed in as the container name and 8080 specified as the port number
  7. 选择 运行 以启动您的容器。

恭喜!您刚刚成功运行了您的第一个容器!🎉

查看您的容器

您可以通过前往 Docker Desktop 仪表板的容器视图来查看所有容器。

Screenshot of the container view of the Docker Desktop GUI showing the welcome-to-docker container running on the host port 8080

此容器运行一个显示简单网站的 Web 服务器。在处理更复杂的项目时,您将在不同的容器中运行不同的部分。例如,您可能需要为前端、后端和数据库分别运行不同的容器。

访问前端

当您启动容器时,您将容器的一个端口暴露到了您的机器上。可以将其视为创建配置,以便您能够通过容器的隔离环境进行连接。

对于此容器,前端可通过端口 8080 访问。要打开网站,请选择容器 端口 列中的链接或在浏览器中访问 http://localhost:8080

Screenshot of the landing page coming from the running container

探索您的容器

Docker Desktop 让您可以探索和与容器的不同方面进行交互。亲自试一试吧。

  1. 前往 Docker Desktop 仪表板中的 容器 视图。

  2. 选择您的容器。

  3. 选择 文件 选项卡以探索容器的隔离文件系统。

    Screenshot of the Docker Desktop Dashboard showing the files and directories inside a running container

停止您的容器

The docker/welcome-to-docker 容器持续运行,直到您停止它。

  1. 前往 Docker Desktop 仪表板中的 容器 视图。

  2. 定位您想要停止的容器。

  3. Actions 列中选择 Stop 操作。

    Screenshot of the Docker Desktop Dashboard with the welcome container selected and being prepared to stop

按照说明使用 CLI 运行容器:

  1. 打开您的命令行终端并使用 docker run 命令启动一个容器:

    $ docker run -d -p 8080:80 docker/welcome-to-docker
    

    此命令的输出是完整的容器 ID。

恭喜!您刚刚启动了您的第一个容器!🎉

查看正在运行的容器

您可以通过使用 docker ps 命令来验证容器是否正在运行:

docker ps

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

 CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                      NAMES
 a1f7a4bb3a27   docker/welcome-to-docker   "/docker-entrypoint.…"   11 seconds ago   Up 11 seconds   0.0.0.0:8080->80/tcp       gracious_keldysh

此容器运行一个显示简单网站的 Web 服务器。在处理更复杂的项目时,您将在不同的容器中运行不同的部分。例如,为 frontendbackenddatabase 使用不同的容器。

提示

docker ps 命令将显示正在运行的容器。要查看已停止的容器,请添加 -a 标志以列出所有容器:docker ps -a

访问前端

当您启动容器时,您将容器的一个端口暴露到了您的机器上。可以将其视为创建配置,以便您能够通过容器的隔离环境进行连接。

对于此容器,前端可通过端口 8080 访问。要打开网站,请选择容器 端口 列中的链接或在浏览器中访问 http://localhost:8080

Screenshot of the landing page of the Nginx web server, coming from the running container

停止您的容器

docker/welcome-to-docker 容器会继续运行,直到您停止它。您可以使用 docker stop 命令来停止容器。

  1. 运行 docker ps 以获取容器的ID

  2. 提供容器 ID 或名称给 docker stop 命令:

    docker stop <the-container-id>
    

提示

当通过ID引用容器时,您不需要提供完整的ID。您只需要提供足够多的ID部分以确保其唯一性。例如,可以通过运行以下命令来停止之前的容器:

docker stop a1f

其他资源

以下链接提供了有关容器的更多指导信息:

后续步骤

既然您已经学习了 Docker 容器的基础知识,现在是时候学习 Docker 镜像了。