docker C/S模式
server-client
docker的C/S模式結構可以如下圖:
docker 的守護進程即server端運行在宿主機上,守護進程在啓動後一直在後端運行,而用戶不會直接和守護進程交互,而是和docker的客戶端即docker命令行接口交互,從用戶接受命令傳遞給守護進程。守護進程接受到命令後執行並返回運行結果。
server-RemoteAPI
除了使用docker命令行接口與server端進行通信外,還可以使用Remote API進行通信。它是一種RESTful風格的API,即可自行編寫程序與docker進行集成。這樣的C/S架構的模式如下圖:
C/S模式的連接方式
docker客戶端和守護進程間通過socket進行連接,docker提供了三種連接模式:
unix:///var/run/docker.sock
tcp://host:port
fd://socketfd
其中,unix:///var/run/docker.sock
是默認的連接方式們可以通過配置修改爲其他的連接方式。
這樣意味着docker的client和server可以在一臺服務器上或不同服務器上
實驗
通過執行ps -ef | grep docker
來查看docker是否運行,如果docker在運行,name執行docker version
查看docker的版本
這裏執行的
docker version
命令就是利用docker的client端來和server端進行交互的
想要通過RemoteAPI來和docker進行交互,則通過nc -U /var/run/docker.sock
來連接docker的socket,然後通過輸入GET請求來獲取server端信息:
docker的遠程訪問
環境準備
兩臺虛擬機,安裝docker,確保docker的client和version的版本一致。
修改服務端啓動文件
在centos7下docker的啓動文件爲/etc/sysconfig/docker
,打開這個文件,加入如下的一行:
OPTIONS='--label name=docker_server_1 -H tcp://0.0.0.0:2375'
-H 在啓動中指定docker的socket連接方式,遠程連接指定tcp連接。
修改完後重啓服務端docker服務:
service docker restart
然後查看本機的ip地址,這裏我的是:192.168.177.138
,在客戶端使用curl命令進行遠程連接:
curl http://192.168.177.138:2375/info
可以看到成功顯示出了info接口的信息,且label的名字是在server端設置的label名,說明客戶端成功遠程連接了server端。
上邊的通過curl的方式連接其實是RESTfulAPI的連接,也可以通過docker的client命令行連接,同樣通過-H指定連接方式,命令如下:
docker -H tcp://192.168.177.138:2375/ info
同樣輸出了第一臺服務器docker的info信息
簡化連接命令
上述的連接命令都要使用-H來制定連接的服務端ip,docker提供了默認的環境變量DOCKER_HOST,通過設置它的值爲需要連接的服務端ip來在命令中省去-H參數,設置如下:
export DOCKER_HOST="tcp://192.168.177.138:2375/"
這樣,現在使用命令docker info
連接的就是服務端的docker的info信息了。
當使用完畢,可以將這個環境變量置空:export DOCKER_HOST=""
,這樣再連接就是本地docker了。
設置docker遠程連接的主機可以連接本機
在設置了遠程連接的服務器上運行docker info
會發現:
這時可以這樣設置,修改啓動配置文件中剛增加的OPTIONS爲:
OPTIONS='--label name=docker_server_1 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
可以看出-H指定的連接方式可以是多個
然後重啓docker服務就可以本地連接了。
本文轉自:這裏