设为首页 收藏本站
查看: 976|回复: 0

[经验分享] 关于/var/run/docker.sock

[复制链接]

尚未签到

发表于 2019-2-20 10:30:45 | 显示全部楼层 |阅读模式
  译者按: 这篇博客介绍了什么是/var/run/docker.sock,以及如何使用/var/run/docker.sock与Docker守护进程通信,并且提供了两个简单的示例。理解这些,我们就可以运行一些能够管理Docker的Docker容器,比如Portainer、Kubernetes,是不是很神奇呢?


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

  • 译者: Fundebug
  为了保证可读性,本文采用意译而非直译。
  运行过Docker Hub的Docker镜像的话,会发现其中一些容器时需要挂载/var/run/docker.sock文件。这个文件是什么呢?为什么有些容器需要使用它?简单地说,它是Docker守护进程(Docker daemon)默认监听的Unix域套接字(Unix domain socket),容器中的进程可以通过它与Docker守护进程进行通信。
DSC0000.png


举例
  不妨看一下 Portainer,它提供了图形化界面用于管理Docker主机和Swarm集群。如果使用Portainer管理本地Docker主机的话,需要绑定/var/run/docker.sock:

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
  访问9000端口可以查看图形化界面,可以管理容器(container),镜像(image),数据卷(volume)...

Portainer通过绑定的/var/run/docker.sock文件与Docker守护进程通信,执行各种管理操作。


Docker守护进程的API
  安装Docker之后,Docker守护进程会监听Unix域套接字:/var/run/docker.sock。这一点可以通过Docker daemon的配置选项看出来(在ubuntu上执行cat /etc/default/docker ):

-H unix:///var/run/docker.sock
  注: 监听网络TCP套接字或者其他套接字需要配置相应的-H选项。
  Docker engine API v1.27 (最新版)定义的所有HTTP接口都可以通过/var/run/docker.sock调用。

运行容器
  使用Portainer的UI,可以轻松创建容器。实际上,HTTP请求是通过docker.sock发送给Docker守护进程的。可以通过curl创建容器来说明这一点。使用HTTP接口运行容器需要两个步骤,先创建容器,然后启动容器。

1. 创建nginx容器
  curl命令通过Unix套接字发送{“Image”:”nginx”}到Docker守护进程的/containers/create接口,这个将会基于Nginx镜像创建容器并返回容器的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. 启动nginx容器
  使用返回的容器ID,调用/containers//start接口,即可启动新创建的容器。

curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers/fcb6...7d65/start
  查看已启动的容器:

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运行容器其实非常简单。

Docker守护进程的事件流
  Docker的API提供了/events接口,可以用于获取Docker守护进程产生的所有事件流。负载均衡组件(load balancer)组件可以通过它获取容器的创建/删除事件,从而动态地更新配置。通过创建一个简单的容器,我们可以了解如何利用Docker守护进程的事件。

1. 运行alpine容器
  下面的命令用于运行容器,并采用交互模式(interactive mode,该模式下会直接进入容器内),同时绑定docker.sock。

docker run -v /var/run/docker.sock:/var/run/docker.sock -ti alpine sh
2. 监听Docker守护进程的事件流
  在alpine容器内,可以通过Docker套接字发送HTTP请求到/events接口。这个命令会一直等待Docker daemon的事件。当新的事件发生时(例如创建了新的容器),会看到输出信息。

curl --unix-socket /var/run/docker.sock http://localhost/events
3. 观察事件
  基于Nginx镜像运行容器之后,通过aplpine容器的标准输出可以观察到Docker daemon生成的事件。

docker run -p 8080:80 -d nginx
  可以观察到3个事件:


  • 创建容器
  • 连接默认的桥接网络(bridge network)
  • 启动容器

结论
  希望这些简单的解释可以帮助大家理解/var/run/docker.sock文件,并且明白它绑定到容器时有何作用。显然,真正的应用会使用代码而不是curl命令给Docker守护进程发送HTTP请求。
  注意: 绑定Docker套接字之后,容器的权限会很高,可以控制Docker守护进程。因此,这一点必须谨慎使用,只能用于足够信任的容器。

关于Fundebug
  Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了7亿+错误事件,得到了Google、360、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!


版权声明
  转载时请注明作者Fundebug以及本文地址:
  https://blog.fundebug.com/2017/04/17/about-docker-sock/




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674772-1-1.html 上篇帖子: 『高级篇』docker容器来说微服务导学(一) 下篇帖子: 谁用光了磁盘?Docker System命令详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表