什么是容器?

解释

想象一下,您正在开发一个令人惊艳的 Web 应用,它包含三个主要组件——一个 React 前端、一个 Python API 和一个 PostgreSQL 数据库。如果您想处理这个项目,您必须安装 Node、Python 和 PostgreSQL。

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

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

这时,容器就派上用场了!

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

以下是它们令人赞叹之处。容器:

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

容器与虚拟机 (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上访问。要打开网站,请选择容器的**端口(s)**列中的链接,或访问浏览器中的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

停止您的容器

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

  1. 转到 Docker Desktop 仪表板的**容器**视图。

  2. 找到您要停止的容器。

  3. 选择**操作**列中的**停止**操作。

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

按照说明使用 CLI 运行容器

  1. 打开您的 CLI 终端,并使用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 服务器,该服务器显示一个简单的网站。在处理更复杂的项目时,您将在不同的容器中运行不同的部分。例如,为前端后端数据库使用不同的容器。

提示

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

访问前端

启动容器时,您将容器的一个端口暴露到您的机器上。可以认为这是创建配置以允许您通过容器的隔离环境进行连接。

对于此容器,前端可在端口8080上访问。要打开网站,请选择容器的**端口(s)**列中的链接,或访问浏览器中的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. 请向docker stop命令提供容器 ID 或名称

    docker stop <the-container-id>
    

提示

当通过 ID 引用容器时,不需要提供完整的 ID。只需要提供足以使其唯一的 ID 部分即可。例如,可以通过运行以下命令停止之前的容器

docker stop a1f

其他资源

以下链接提供了关于容器的更多指导

下一步

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