为了安全起见,运行 将可公开访问的应用程序作为 Docker 容器有用吗?

Is it useful to run publicly-reachable applications as Docker containers just for the sake of security?

docker 有很多用例,它们都与可移植性、测试、可用性等有关,这对大型企业应用程序特别有用。

考虑互联网中的单个 Linux 服务器,它充当邮件网络和应用程序服务器 - 主要供私人使用。没有集群,不需要迁移服务,没有类似的服务,可以从同一个图像创建。

在考虑安全性时,考虑将每个提供的服务包装在一个 Docker 容器中而不是直接 运行 在服务器上(在 chroot 环境中)是否有用?整个服务器,还是会用大锤敲碎坚果?

据我所知,安全性确实会提高,因为服务会真正隔离,即使获得 root 权限也无法逃脱 chroot,但维护要求会增加,因为我需要维护几个独立的操作系统(安全更新、日志分析……)。

您会提出什么建议,您在小型环境中使用 Docker 有哪些经验?

从我的角度来看,安全性是或将是 linux 容器和 Docker 的优势之一。但是要获得安全的环境并在容器内完全隔离还有很长的路要走。 Docker 和其他一些像 RedHat 这样的大合作者在保护容器方面表现出了很多努力和兴趣,并且 Docker 中的任何 public 安全标志(关于隔离)已得到修复。今天 Docker 不能替代硬件虚拟化的隔离,但是在 Hypervisors 运行 容器中工作的项目将在这方面有所帮助。这个问题更多地与提供 IAAS 或 PAAS 的公司有关,他们使用虚拟化来隔离每个客户端。

在我看来,对于您提出的案例,运行 Docker 容器中的每项服务在您的安全方案中提供了更多层。如果其中一项服务遭到破坏,将会有一把额外的锁来访问您的所有服务器和其他服务。也许服务的维护会增加一点,但如果您组织 Docker 文件以使用通用 Docker 图像作为基础,并且您(或其他人)定期更新该基础图像,您就不会不需要一一更新所有 Docker 容器。而且,如果您使用定期更新的基础映像(即:Ubuntu,CentOS),影响这些映像的安全问题将得到快速更新,您只需重建并重新启动容器即可更新它们.也许是一项额外的工作,但如果安全是重中之重,Docker 可能是一个附加值。