閱讀585 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《第一本Docker書(修訂版)》——2.9 Docker守護進程

本節書摘來自異步社區《第一本Docker書(修訂版)》一書中的第2章,第2.9節,作者:【澳】James Turnbull(詹姆斯•特恩布爾)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

2.9 Docker守護進程

安裝完Docker後,需要確認Docker的守護進程是否運行。Docker以root權限運行它的守護進程,來處理普通用戶無法完成的操作(如掛載文件係統)。docker程序是Docker守護進程的客戶端程序,同樣也需要以root身份運行。用戶可以使用docker daemon命令控製Docker守護進程。

注意
在Docker 1.8之前,Docker守護進程是通過-d標誌來控製的,而沒有docker daemon子命令。
當Docker軟件包安裝完畢後,默認會立即啟動Docker守護進程。守護進程監聽/var /run/docker.sock這個Unix套接字文件,來獲取來自客戶端的Docker請求。如果係統中存在名為docker的用戶組的話,Docker則會將該套接字文件的所有者設置為該用戶組。這樣,docker用戶組的所有用戶都可以直接運行Docker,而無需再使用sudo命令了。

警告
前麵已經提到,盡管docker用戶組方便了Docker的使用,但它畢竟是一個安全隱患。因為docker用戶組對Docker具有與root用戶相同的權限,所以docker用戶組中應該隻能添加那些確實需要使用Docker的用戶和程序。
2.9.1 配置Docker守護進程
運行Docker守護進程時,可以用-H標誌調整守護進程綁定監聽接口的方式。

可以使用-H標誌指定不同的網絡接口和端口配置。例如,要想綁定到網絡接口,命令如代碼清單2-46所示。

代碼清單2-46 修改Docker守護進程的網絡

$ sudo docker daemon -H tcp://0.0.0.0:2375
這條命令會將Docker守護進程綁定到宿主機上的所有網絡接口。Docker客戶端不會自動監測到網絡的變化,需要通過-H選項來指定服務器的地址。例如,如果把守護進程端口改成4200,那麼運行客戶端時就必須指定docker -H :4200。如果不想每次運行客戶端時都加上-H標誌,可以通過設置DOCKER_HOST環境變量來省略此步驟,如代碼清單2-47所示。

代碼清單2-47 使用DOCKER_HOST環境變量

$ export DOCKER_HOST="tcp://0.0.0.0:2375"
警告
默認情況下,Docker的客戶端-服務器通信是不經認證的。這就意味著,如果把Docker綁定到對外公開的網絡接口上,那麼任何人都可以連接到該Docker守護進程。Docker 0.9及更高版本提供了TLS認證。在本書第8章介紹Docker API時讀者會詳細了解如何啟用TLS認證。
也能通過-H標誌指定一個Unix套接字路徑,例如,指定unix://home/docker/ docker.socket,如代碼清單2-48所示。

代碼清單2-48 將Docker守護進程綁定到非默認套接字

$ sudo docker daemon -H unix://home/docker/docker.sock
當然,也可以同時指定多個綁定地址,如代碼清單2-49所示。

代碼清單2-49 將Docker守護進程綁定到多個地址

$ sudo docker daemon -H tcp://0.0.0.0:2375 -H unix://home/docker/
  docker.sock```
提示
如果你的Docker運行在代理或者公司防火牆之後,也可以使用HTTPS_PROXY、HTTP_ PROXY和NO_PROXY選項來控製守護進程如何連接。
還可以使用-D標誌來輸出Docker守護進程的更詳細的信息,如代碼清單2-50所示。

代碼清單2-50 開啟Docker守護進程的調試模式

``$ sudo docker daemon -D``
要想讓這些改動永久生效,需要編輯啟動配置項。在Ubuntu中,需要編輯/etc /default/docker文件,並修改DOCKER_OPTS變量。

在Fedora和Red Hat發布版本中,則需要編輯/usr/lib/systemd/system/ docker. service文件,並修改其中的ExecStart配置項。或者在之後的版本中編輯/etc/ sysconfig/docker文件。

注意
在其他平台中,可以通過適當的init係統來管理和更新Docker守護進程的啟動配置。
**2.9.2 檢查Docker守護進程是否正在運行**
在Ubuntu中,如果Docker是通過軟件包安裝的話,可以運行Upstart的status命令來檢查Docker守護進程是否正在運行,如代碼清單2-51所示。

代碼清單2-51 檢查Docker守護進程的狀態

```javascript
$ sudo status docker
docker start/running, process 18147

此外,還可以用Upstart的start和stop命令來啟動和停止Docker守護進程,如代碼清單2-52所示。

代碼清單2-52 用Upstart啟動和停止Docker守護進程

$ sudo stop docker
docker stop/waiting
$ sudo start docker
docker start/running, process 18192

在Red Hat和Fedora中,隻需要用service命令就可以完成同樣的工作,如代碼清單2-53所示。

代碼清單2-53 在Red Hat和Fedora中啟動和停止Docker

$ sudo service docker stop
Redirecting to /bin/systemctl stop  docker.service
$ sudo service docker start
Redirecting to /bin/systemctl start  docker.service

如果守護進程沒有運行,執行docker客戶端命令時就會出現類似代碼清單2-54所示的錯誤。

代碼清單2-54 Docker守護進程沒有運行的錯誤

2014/05/18 20:08:32 Cannot connect to the Docker daemon. Is 'docker -d'
  running on this host?

注意
在Docker 0.4.0版本以前,docker客戶端命令有“獨立模式”(stand-alone),在“獨立模式”下,客戶端不需要運行Docker守護進程就可以獨立運行。不過現在這種模式已經被廢棄了。

最後更新:2017-06-01 15:01:25

  上一篇:go  《第一本Docker書(修訂版)》——2.10 升級Docker
  下一篇:go  《第一本Docker書(修訂版)》——2.8 二進製安裝