本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第五篇 Part 5: Docker Security 。
该系列所有文章将参考其他学习资料翻译,也会加入自己的学习作为部分注解。如有错误,欢迎指正。
题外话:本文所讲的是传统意义上的 Docker 安全,关于未来 Docker 的安全可以参考这篇文章。
安全问题必须要被高度重视,无论是开发环境还是生产环境。如今 Docker 已经被部署在越来越多的地方,Docker 作为项目和平台的安全性也越来越要被重视。
因此,本系列教程关键的第五章用来讨论 Docker 可能面临的安全问题以及它们是如何影响到 Docker 整体的安全性的。但并不是说 Docker 本身不安全:Docker 是建立在 LXC 的基础上的,因此 Docker 继承了 LXC 绝大部分安全优势。
前文中提到 docker run
是用来运行容器的,那么 docker run
之后到底发生了什么?
docker run
命令初始化 lxc-start
命令。 lxc-start
创建一系列的 namespaces 和 CGroups 进行资源限制。 namespace 是虚拟化的第一层,用于容器以及容器内之间互相隔离。所有的容器都有独立的网络栈、一个容器也无法访问到另一个容器的 Socket 端口。如果你希望容器之间通过网络互访的话,就要开启 Docker 的端口映射功能,或者为容器指定公网 IP。
CGroup 有如下的特点:
对于 namespace 和 CGroups 不熟悉的童鞋可以参考这么几篇文章:
Docker 基础技术:Linux Namespace(上)
Docker 基础技术:Linux Namespace(下)
Docker 基础技术:Linux CGroupDocker daemon 使用 root 权限运行,肯定需要有许多地方需要特别注意,例如:
chmod +s
。 本图中列举了几个用于维护和授权的安全性 Docker API。
本专栏将会在以后的文章中慢慢介绍现在的 Docker API。