有许多操作指南帖子非常棒,但有一个我找不到或根本不存在,其内容应包括:
- 对于自行托管的用户,如何配置主机操作系统(例如 Ubuntu),使其仅用于托管 Docker 容器。
- 网站运行后,针对主机操作系统应采取哪些标准操作程序(SOP),例如检查是否被入侵、如何从主机操作系统进入容器、如何存储基本信息以应对潜在问题等。
我意识到,对于不同的操作系统和网站,手册会有所不同,但其中许多内容是通用的。
由于操作系统仅用于运行一个 Docker 容器,因此会存在许多不必要的文件和服务,但哪些是多余的?是否需要图形界面(GUI)以及所有相关的工具和软件包?
一旦网站运行起来,如果发生意外导致网站宕机,必须掌握网站的详细信息,例如配置方式、从头重建的步骤、正在运行的软件版本等。其中哪些细节是至关重要的?我大概有一些想法,但很乐意听听其他人的经验和见解。
作为示例,在为我们网站制定标准操作程序(SOP)时,以下是 pstree 的输出结果对比:一个来自主机操作系统,另一个来自 Docker 容器内部。主机真的需要所有这些进程吗?在接下来的几天里,我肯定会找到答案,但也许其他人已经知道并可以与我们分享。
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─2*[agetty]
├─atd
├─containerd─┬─containerd-shim─┬─boot───runsvdir─┬─runsv───rsyslogd───2*[{rsyslogd}]
│ │ │ ├─runsv───cron
│ │ │ ├─runsv───unicorn_launche─┬─ruby─┬─ruby───22*[{ruby}]
│ │ │ │ │ ├─6*[ruby───8*[{ruby}]]
│ │ │ │ │ ├─2*[ruby───9*[{ruby}]]
│ │ │ │ │ └─5*[{ruby}]
│ │ │ │ └─sleep
│ │ │ ├─runsv─┬─redis-server───3*[{redis-server}]
│ │ │ │ └─svlogd
│ │ │ ├─runsv─┬─postmaster───9*[postmaster]
│ │ │ │ └─svlogd
│ │ │ └─runsv───nginx───5*[nginx]
│ │ └─10*[{containerd-shim}]
│ └─18*[{containerd}]
├─cron
├─dbus-daemon
├─dockerd─┬─docker-proxy───8*[{docker-proxy}]
│ ├─docker-proxy───7*[{docker-proxy}]
│ └─16*[{dockerd}]
├─irqbalance───{irqbalance}
├─lvmetad
├─lxcfs───4*[{lxcfs}]
├─networkd-dispat───{networkd-dispat}
├─polkitd───2*[{polkitd}]
├─rsyslogd───3*[{rsyslogd}]
├─sshd───sshd───sshd───bash───pstree
├─sudo───docker───11*[{docker}]
├─systemd───(sd-pam)
├─systemd-journal
├─systemd-logind
├─systemd-resolve
├─systemd-timesyn───{systemd-timesyn}
├─systemd-udevd
└─wpa_supplicant
boot───runsvdir─┬─runsv───rsyslogd───2*[{rsyslogd}]
├─runsv───cron
├─runsv───unicorn_launche─┬─ruby─┬─ruby───22*[{ruby}]
│ │ ├─6*[ruby───8*[{ruby}]]
│ │ ├─2*[ruby───9*[{ruby}]]
│ │ └─5*[{ruby}]
│ └─sleep
├─runsv─┬─redis-server───3*[{redis-server}]
│ └─svlogd
├─runsv─┬─postmaster───9*[postmaster]
│ └─svlogd
└─runsv───nginx───5*[nginx]
编辑
有关 Ubuntu 的最小化配置,请参阅:Minimal Ubuntu
注意:我目前尚未尝试过,仅做分享。
那些经过时间验证且有效的方法通常仍然适用。参见 Sam 撰写的:Discourse in a Docker container。![]()
这篇文章深入介绍了在 Docker 中使用 Discourse 的历史及其工作原理。