Docker Discourse 主机操作系统标准操作程序

有许多操作指南帖子非常棒,但有一个我找不到或根本不存在,其内容应包括:

  • 对于自行托管的用户,如何配置主机操作系统(例如 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:grinning:
这篇文章深入介绍了在 Docker 中使用 Discourse 的历史及其工作原理。

2 个赞