什么是容器?

解释

想象一下,你正在开发一个很棒的 Web 应用,它有三个主要组件——一个 React 前端、一个 Python API 和一个 PostgreSQL 数据库。如果你想进行这个项目,你就必须安装 Node、Python 和 PostgreSQL。

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

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

容器登场了!

什么是容器?简单来说,容器是你应用中每个组件的独立进程。每个组件——前端 React 应用、Python API 引擎和数据库——都在各自独立的环境中运行,与你机器上的其他任何东西完全隔离。

这就是它们厉害之处。容器是:

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

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

简单来说,虚拟机(VM)是一个完整的操作系统,拥有自己的内核、硬件驱动程序、程序和应用程序。仅仅为了隔离一个应用程序而启动一个虚拟机,开销是很大的。

容器只是一个隔离的进程,包含了它运行所需的所有文件。如果你运行多个容器,它们都共享同一个内核,这使你能够在更少的基础设施上运行更多的应用程序。

同时使用虚拟机和容器

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

试一试

在这个实践环节中,你将看到如何使用 Docker Desktop 图形用户界面(GUI)来运行一个 Docker 容器。

使用以下说明来运行一个容器。

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

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

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

  4. 展开可选设置 (Optional settings)

  5. 容器名称 (Container name) 中,指定 `welcome-to-docker`。

  6. 主机端口 (Host port) 中,指定 `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. 选择运行 (Run) 来启动你的容器。

恭喜!你刚刚运行了你的第一个容器!🎉

查看你的容器

你可以通过进入 Docker Desktop 仪表盘的容器 (Containers) 视图来查看你所有的容器。

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

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

访问前端

当你启动容器时,你将容器的一个端口暴露到了你的机器上。可以把它想象成创建了一个配置,让你能够连接到容器的隔离环境中。

对于这个容器,前端可以在端口 `8080` 上访问。要打开网站,请选择你容器的端口 (Port(s)) 列中的链接,或在浏览器中访问 https://:8080

Screenshot of the landing page coming from the running container

探索你的容器

Docker Desktop 让你能够探索和与容器的不同方面进行交互。自己试试吧。

  1. 在 Docker Desktop 仪表盘中进入容器 (Containers) 视图。

  2. 选择你的容器。

  3. 选择文件 (Files) 标签页来探索你容器的隔离文件系统。

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

停止你的容器

`docker/welcome-to-docker` 容器会一直运行,直到你停止它。

  1. 在 Docker Desktop 仪表盘中进入容器 (Containers) 视图。

  2. 找到你想要停止的容器。

  3. 操作 (Actions) 列中选择停止 (Stop) 操作。

    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 服务器,显示一个简单的网站。在处理更复杂的项目时,你将在不同的容器中运行不同的部分。例如,为 `frontend`、`backend` 和 `database` 分别使用不同的容器。

提示

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

访问前端

当你启动容器时,你将容器的一个端口暴露到了你的机器上。可以把它想象成创建了一个配置,让你能够连接到容器的隔离环境中。

对于这个容器,前端可以在端口 `8080` 上访问。要打开网站,请选择你容器的端口 (Port(s)) 列中的链接,或在浏览器中访问 https://: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 镜像了。

什么是镜像?
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.