# Docker入門教程(五)Docker安全
> 【編者的話】DockOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第五篇,介紹了Docker的安全問題,依然是老話重談,入門者可以通過閱讀本文快速了解。
我們必須高度重視開源軟件的安全問題,當開發者在使用Docker時,從本地構建應用程序到生產環境部署是沒有任何差異的(譯者注:作者的言外之意是更應該重視Docker的安全問題)。當Docker被越來越多的平臺使用的時候,我們需要嚴格保證Docker作為一個項目或者平臺的安全性。
因此,我們決定在Docker系列教程的第五篇來討論Docker安全性的相關問題以及為什么會它們影響到Docker的整體安全性。由于Docker是LXC的延伸,它也很容易使用LXC的安全特性。
在本系列的[第一篇文章](http://dockerone.com/article/101)中,我們知道`docker run`命令可以用來運行容器。那運行這個命令后,Docker做了哪些具體的工作呢?具體如下:
1. `docker run`命令初始化。
2. Docker 運行 lxc-start 來執行run命令。
3. lxc-start 在容器中創建了一組namespace和Control Groups。
對于那些不知道namespace和control groups的概念的讀者,我在這里先給他們解釋一下:namespace是隔離的第一級,容器是相互隔離的,一個容器是看不到其它容器內部運行的進程情況(譯者注:namespace系列教程可以閱讀DockerOne上的[系列教程](http://dockerone.com/article/76))。每個容器都分配了單獨的網絡棧,因此一個容器不可能訪問另一容器的sockets。為了支持容器之間的IP通信,您必須指定容器的公網IP端口。
Control Groups是非常重要的組件,具有以下功能:
* 負責資源核算和限制。
* 提供CPU、內存、I/O和網絡相關的指標。
* 避免某種DoS攻擊。
* 支持多租戶平臺。
### Docker Daemon的攻擊面
Docker Daemon以root權限運行,這意味著有一些問題需要格外小心。
下面介紹一些需要注意的地方:
* 當Docker允許與訪客容器目錄共享而不限制其訪問權限時,Docker Daemon的控制權應該只給授權用戶。
* REST API支持Unix sockets,從而防止了cross-site-scripting攻擊。
* REST API的HTTP接口應該在可信網絡或者VPN下使用。
* 在服務器上單獨運行Docker時,需要與其它服務隔離。
一些關鍵的Docker安全特性包括:
1. 容器以非特權用戶運行。
2. Apparmor、SELinux、GRSEC解決方案,可用于額外的安全層。
3. 可以使用其它容器系統的安全功能。
### Docker.io API
用于管理與授權和安全相關的幾個進程,Docker提供REST API。以下表格列出了關于此API用于維護相關安全功能的一些命令。

[Docker系列教程的下一篇文章中](http://dockerone.com/article/106)我們將繼續探討[前面第二篇文章](http://dockerone.com/article/102)中所討論的Docker命令的進階。
> 出處:http://dockone.io/article/105
> 原文鏈接:[Part 5: Docker Security](http://flux7.com/blogs/docker/docker-tutorial-series-part-5-docker-security/)(翻譯:[田浩浩](https://github.com/llitfkitfk)?審校:李穎杰)