为面板未自带的应用提供 Docker 托管
容器网站运行管理员已批准的镜像,以该网站自己的账户身份运行,不具备任何特权,且根文件系统为只读。您可以借此托管用本服务器未安装的语言编写的程序。
何时该用它
当您需要的运行环境不在菜单上时。
静态、PHP 和 Node.js 已覆盖人们托管的大部分内容,它们无需镜像也无需批准。容器网站用于其余情形:本服务器未提供的某种语言、某个应用所需的系统库,或一个以自带基础镜像形式交付的服务。
它也是“我能不能只跑这一个东西”的答案,而无需把服务器变成一台什么都能跑的机器。可运行内容是一份清单,而且是有人决定了清单上有什么。
批准一个镜像
由管理员添加,并带有明确的标签。
在添加镜像之前,任何内容都无法作为容器网站运行。管理员在容器镜像中批准镜像,每一条都必须带明确的标签,绝不允许 latest,这样运行的版本就不会在您不知情时改变。上游的一次重新构建不会悄然变成这里的一次部署。
这件事刻意划归管理员而非客户。镜像就是在机器上运行的代码,因此可运行什么是服务器所有者的决定,而一个自由填写的文本框会把它变成任何有账户的人的决定。
容器可以做什么
比您可能预期的要少,而这是刻意为之。
- 无特权,且根文件系统只读。若某镜像需要在启动时安装软件包或在整个文件系统中写入,则需要调整。
- 它的内存、CPU 和进程限制由 Docker 强制执行,取自该网站同一份限额。
- 它只通过 Web 服务器访问网络,使用独立的端口。没有任何东西直接把它暴露出去。
- 它以网站自身的账户身份运行,与这里的其他运行环境一样,因此网站之间的隔离墙是同一道墙。
- 只有
/data能在重启后保留。上传的文件、生成的文件、SQLite 数据库、值得保留的缓存:所有这些都应放在/data下。
最后那一条会绊倒那些在别处不加思索地运行过同一镜像的人,因为长期运行的容器会把问题藏起来,直到有什么东西重启它。请把容器视为可随时丢弃的,而把 /data 当作唯一可以立足的地面。保存一次更改就会替换正在运行的容器,因此这条规则在平常的下午同样适用,而不只是在崩溃之后。
其余一切都是同一个网站
容器站点就是一个网站,不是特例。
它拥有域名和免费证书,可以拥有邮箱、DNS 记录、计划任务和备份。环境变量以其最终生成的行形式编辑,每行一个名称和取值,因此您看到的就是容器得到的;为该网站创建的数据库,其访问方式与其他任何运行环境完全相同。
而且它是与其他运行环境一样的一种:网站可以切换到它、也可以从它切换走,无需重建,文件、名称和证书都保留。