跳到正文

容器

Container

中级通用

容器(Container)是由镜像创建的运行环境,让应用连同依赖以相对隔离的方式运行。它解决了开发机和服务器环境不一致的问题,例如把网站后端打包后,在测试和生产环境运行同一份镜像。

你可能会说:「我想把后端和依赖一起交给服务器运行,别再出现本地能跑、上线就缺东西的情况。」

读之前建议先了解

动手看看

构建后端与依赖后端镜像固定版本测试容器尚未创建生产容器尚未创建
1

先把网站后端和所需依赖一起构建成镜像。镜像是可复用的运行模板,还不是正在运行的应用。

要点

  1. 1

    镜像提供运行所需的内容

    你可以把镜像理解为一份可复用的运行材料,里面有应用代码和它需要的依赖。启动镜像才会产生容器;改了代码后,通常要重新构建镜像,正在运行的容器不会自动变成新版本。

  2. 2

    隔离环境但共享主机内核

    容器里的进程有自己的文件系统视图等隔离边界,但它仍依赖宿主机的操作系统内核。所以容器不是一台完整的电脑,也不是绝对的安全边界;排错时还得看宿主机资源和容器配置。

  3. 3

    数据和配置要单独安排

    容器可能被停止、删除和重新创建,所以用户上传的文件或数据库数据不能只放在容器内部的可写层。我们通常把持久数据放到外部存储,并通过环境变量等方式传入随环境变化的配置。

容易混淆的地方

镜像是用来创建容器的内容,容器才是实际运行的实例:同一份镜像可以启动多个容器。虚拟机则运行自己的操作系统内核,隔离方式和资源开销与容器不同。如果你说“把容器上传后部署”,最好先确认交付的是镜像,还是要在目标机器上启动容器。

什么时候用

适合用

  • 你做了一个带特定运行时和依赖的网站后端,想让测试环境与生产环境用同一份镜像启动。
  • 你的应用有后台任务和 API 服务,想分别启动、更新和查看它们的运行日志。

不适合用

  • 你只要发布一组静态网页文件,没有服务端进程需要运行,用静态网站托管更直接。
  • 你只是想隔离一次本地代码改动,而不需要隔离运行环境,用 Git 分支就够了。

练一练

你把图片处理服务装进容器,上线后一切正常,但每次更新容器,用户上传的原图就消失。接下来怎么改最合适?

让 AI 帮你做

请把这个图片处理后端做成可部署的容器:构建镜像,列出启动所需的环境变量和端口,并把上传文件放在容器外的持久存储。给我本地验证步骤,说明重新创建容器后如何检查文件仍在。

接下来学什么