什么是容器?
解释
想象一下,你正在开发一个很棒的 Web 应用,它有三个主要组件——一个 React 前端、一个 Python API 和一个 PostgreSQL 数据库。如果你想进行这个项目,你就必须安装 Node、Python 和 PostgreSQL。
你如何确保你使用的版本与团队中其他开发人员的版本相同?或者你的 CI/CD 系统的版本?或者生产环境中使用的版本?
你如何确保应用所需的 Python(或 Node 或数据库)版本不受你机器上已安装版本的影响?你如何管理潜在的冲突?
容器登场了!
什么是容器?简单来说,容器是你应用中每个组件的独立进程。每个组件——前端 React 应用、Python API 引擎和数据库——都在各自独立的环境中运行,与你机器上的其他任何东西完全隔离。
这就是它们厉害之处。容器是:
- 自包含的。每个容器都拥有其运行所需的一切,不依赖于宿主机上任何预先安装的依赖项。
- 隔离的。由于容器在隔离环境中运行,它们对宿主机和其他容器的影响极小,从而提高了应用程序的安全性。
- 独立的。每个容器都是独立管理的。删除一个容器不会影响任何其他容器。
- 可移植的。容器可以在任何地方运行!在你的开发机器上运行的容器,在数据中心或云中的任何地方都会以同样的方式工作!
容器与虚拟机 (VM) 的对比
简单来说,虚拟机(VM)是一个完整的操作系统,拥有自己的内核、硬件驱动程序、程序和应用程序。仅仅为了隔离一个应用程序而启动一个虚拟机,开销是很大的。
容器只是一个隔离的进程,包含了它运行所需的所有文件。如果你运行多个容器,它们都共享同一个内核,这使你能够在更少的基础设施上运行更多的应用程序。
同时使用虚拟机和容器
通常,你会看到容器和虚拟机一起使用。例如,在云环境中,分配的机器通常是虚拟机。然而,不是分配一台机器来运行一个应用程序,而是让一台带有容器运行时的虚拟机可以运行多个容器化应用程序,从而提高资源利用率并降低成本。
试一试
在这个实践环节中,你将看到如何使用 Docker Desktop 图形用户界面(GUI)来运行一个 Docker 容器。
使用以下说明来运行一个容器。
打开 Docker Desktop,并选择顶部导航栏中的搜索字段。
在搜索输入框中指定 `welcome-to-docker`,然后选择拉取 (Pull) 按钮。

镜像成功拉取后,选择运行 (Run) 按钮。
展开可选设置 (Optional settings)。
在容器名称 (Container name) 中,指定 `welcome-to-docker`。
在主机端口 (Host port) 中,指定 `8080`。

选择运行 (Run) 来启动你的容器。
恭喜!你刚刚运行了你的第一个容器!🎉
查看你的容器
你可以通过进入 Docker Desktop 仪表盘的容器 (Containers) 视图来查看你所有的容器。

这个容器运行一个 Web 服务器,显示一个简单的网站。在处理更复杂的项目时,你将在不同的容器中运行不同的部分。例如,你可能会为前端、后端和数据库运行不同的容器。
访问前端
当你启动容器时,你将容器的一个端口暴露到了你的机器上。可以把它想象成创建了一个配置,让你能够连接到容器的隔离环境中。
对于这个容器,前端可以在端口 `8080` 上访问。要打开网站,请选择你容器的端口 (Port(s)) 列中的链接,或在浏览器中访问 https://:8080。

探索你的容器
Docker Desktop 让你能够探索和与容器的不同方面进行交互。自己试试吧。
在 Docker Desktop 仪表盘中进入容器 (Containers) 视图。
选择你的容器。
选择文件 (Files) 标签页来探索你容器的隔离文件系统。

停止你的容器
`docker/welcome-to-docker` 容器会一直运行,直到你停止它。
在 Docker Desktop 仪表盘中进入容器 (Containers) 视图。
找到你想要停止的容器。
在操作 (Actions) 列中选择停止 (Stop) 操作。

按照说明使用命令行界面 (CLI) 运行容器
打开你的 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。

停止你的容器
`docker/welcome-to-docker` 容器会一直运行,直到你停止它。你可以使用 `docker stop` 命令来停止一个容器。
运行 `docker ps` 来获取容器的 ID
将容器 ID 或名称提供给 `docker stop` 命令
docker stop <the-container-id>
提示当通过 ID 引用容器时,你不需要提供完整的 ID。你只需要提供足以使其唯一的 ID 部分即可。例如,前一个容器可以通过运行以下命令来停止:
docker stop a1f
其他资源
以下链接提供了有关容器的更多指导:
后续步骤
现在你已经了解了 Docker 容器的基础知识,是时候学习 Docker 镜像了。
什么是镜像?