溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于/var/run/docker.sock

發(fā)布時(shí)間:2020-07-28 08:14:25 來源:網(wǎng)絡(luò) 閱讀:666 作者:Fundebug 欄目:云計(jì)算

譯者按: 這篇博客介紹了什么是/var/run/docker.sock,以及如何使用/var/run/docker.sock與Docker守護(hù)進(jìn)程通信,并且提供了兩個(gè)簡(jiǎn)單的示例。理解這些,我們就可以運(yùn)行一些能夠管理Docker的Docker容器,比如Portainer、Kubernetes,是不是很神奇呢?

  • 原文: About /var/run/docker.sock

  • 譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯。

運(yùn)行過Docker Hub的Docker鏡像的話,會(huì)發(fā)現(xiàn)其中一些容器時(shí)需要掛載/var/run/docker.sock文件。這個(gè)文件是什么呢?為什么有些容器需要使用它?簡(jiǎn)單地說,它是Docker守護(hù)進(jìn)程(Docker daemon)默認(rèn)監(jiān)聽的Unix域套接字(Unix domain socket),容器中的進(jìn)程可以通過它與Docker守護(hù)進(jìn)程進(jìn)行通信。

關(guān)于/var/run/docker.sock

舉例

不妨看一下 Portainer,它提供了圖形化界面用于管理Docker主機(jī)和Swarm集群。如果使用Portainer管理本地Docker主機(jī)的話,需要綁定/var/run/docker.sock:

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

訪問9000端口可以查看圖形化界面,可以管理容器(container),鏡像(image),數(shù)據(jù)卷(volume)...

關(guān)于/var/run/docker.sock
Portainer通過綁定的/var/run/docker.sock文件與Docker守護(hù)進(jìn)程通信,執(zhí)行各種管理操作。

Docker守護(hù)進(jìn)程的API

安裝Docker之后,Docker守護(hù)進(jìn)程會(huì)監(jiān)聽Unix域套接字:/var/run/docker.sock。這一點(diǎn)可以通過Docker daemon的配置選項(xiàng)看出來(在ubuntu上執(zhí)行cat /etc/default/docker ):

-H unix:///var/run/docker.sock

注: 監(jiān)聽網(wǎng)絡(luò)TCP套接字或者其他套接字需要配置相應(yīng)的-H選項(xiàng)。

Docker engine API v1.27 (最新版)定義的所有HTTP接口都可以通過/var/run/docker.sock調(diào)用。

運(yùn)行容器

使用Portainer的UI,可以輕松創(chuàng)建容器。實(shí)際上,HTTP請(qǐng)求是通過docker.sock發(fā)送給Docker守護(hù)進(jìn)程的??梢酝ㄟ^curl創(chuàng)建容器來說明這一點(diǎn)。使用HTTP接口運(yùn)行容器需要兩個(gè)步驟,先創(chuàng)建容器,然后啟動(dòng)容器。

1. 創(chuàng)建nginx容器

curl命令通過Unix套接字發(fā)送{“Image”:”nginx”}到Docker守護(hù)進(jìn)程的/containers/create接口,這個(gè)將會(huì)基于Nginx鏡像創(chuàng)建容器并返回容器的ID。

curl -XPOST --unix-socket /var/run/docker.sock -d ‘{“Image”:”nginx”}’ -H ‘Content-Type: application/json’ http://localhost/containers/create

輸出返回了容器ID:

{“Id”:”fcb65c6147efb862d5ea3a2ef20e793c52f0fafa3eb04e4292cb4784c5777d65",”Warnings”:null}
2. 啟動(dòng)nginx容器

使用返回的容器ID,調(diào)用/containers/<ID>/start接口,即可啟動(dòng)新創(chuàng)建的容器。

curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/fcb6...7d65/start

查看已啟動(dòng)的容器:

docker ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fcb65c6147ef nginx “nginx -g ‘daemon …” 5 minutes ago Up 5 seconds 80/tcp, 443/tcp ecstatic_kirch
...

可知,使用docker.sock運(yùn)行容器其實(shí)非常簡(jiǎn)單。

Docker守護(hù)進(jìn)程的事件流

Docker的API提供了/events接口,可以用于獲取Docker守護(hù)進(jìn)程產(chǎn)生的所有事件流。負(fù)載均衡組件(load balancer)組件可以通過它獲取容器的創(chuàng)建/刪除事件,從而動(dòng)態(tài)地更新配置。通過創(chuàng)建一個(gè)簡(jiǎn)單的容器,我們可以了解如何利用Docker守護(hù)進(jìn)程的事件。

1. 運(yùn)行alpine容器

下面的命令用于運(yùn)行容器,并采用交互模式(interactive mode,該模式下會(huì)直接進(jìn)入容器內(nèi)),同時(shí)綁定docker.sock。

docker run -v /var/run/docker.sock:/var/run/docker.sock -ti alpine sh
2. 監(jiān)聽Docker守護(hù)進(jìn)程的事件流

在alpine容器內(nèi),可以通過Docker套接字發(fā)送HTTP請(qǐng)求到/events接口。這個(gè)命令會(huì)一直等待Docker daemon的事件。當(dāng)新的事件發(fā)生時(shí)(例如創(chuàng)建了新的容器),會(huì)看到輸出信息。

curl --unix-socket /var/run/docker.sock http://localhost/events
3. 觀察事件

基于Nginx鏡像運(yùn)行容器之后,通過aplpine容器的標(biāo)準(zhǔn)輸出可以觀察到Docker daemon生成的事件。

docker run -p 8080:80 -d nginx

可以觀察到3個(gè)事件:

  • 創(chuàng)建容器
  • 連接默認(rèn)的橋接網(wǎng)絡(luò)(bridge network)
  • 啟動(dòng)容器

結(jié)論

希望這些簡(jiǎn)單的解釋可以幫助大家理解/var/run/docker.sock文件,并且明白它綁定到容器時(shí)有何作用。顯然,真正的應(yīng)用會(huì)使用代碼而不是curl命令給Docker守護(hù)進(jìn)程發(fā)送HTTP請(qǐng)求。

注意: 綁定Docker套接字之后,容器的權(quán)限會(huì)很高,可以控制Docker守護(hù)進(jìn)程。因此,這一點(diǎn)必須謹(jǐn)慎使用,只能用于足夠信任的容器。

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了7億+錯(cuò)誤事件,得到了Google、360、金山軟件、百姓網(wǎng)等眾多知名用戶的認(rèn)可。歡迎免費(fèi)試用!

關(guān)于/var/run/docker.sock

版權(quán)聲明

轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:

https://blog.fundebug.com/2017/04/17/about-docker-sock/

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI