penglongli / blog

18 stars 1 forks source link

Docker 的 /var/run/docker.sock #52

Open penglongli opened 6 years ago

penglongli commented 6 years ago

/var/run/docker.sock 是 Docker Daemon 默认监听的 Unix 域套接字。

什么是 Unix 域套接字?

这是个好问题,套接字即我们通常说的 Socket,Unix 域套接字 可以使同一台操作系统上的两个或多个进程进行数据通信。

Internet 套接字 相比,Internet 套接字使用网络底层 TCP/IP 协议进行通信,需要显示指定 IP 地址,并且在网络里传播;Unix 域套接字的通信是在内核里而并不在网络里传播,可以在单机上用于进程间通信。

写此篇时的笔者并不太清楚套接字分为哪些种,上边描述参考了维基和别人的一些笔记

参考:

关于 /var/run/docker.sock 的使用

Docker 容器中的进程可以通过 /var/run/docker.sock 套接字文件来与 Docker Daemon 进行通信。

为什么要与 Docker daemon 进行通信?

我们每台机器上的 Docker 都是一个 C/S (client/server) 软件,我们用到的 docker ps docker images 等命令其实就是 cli。Docker daemon 与内核进行交流,创建、操作和管理容器。

详见:https://docs.docker.com/machine/overview/#whats-the-difference-between-docker-engine-and-docker-machine

/var/run/docker.sock 能用来做什么?

通常来说,我们并不需要显式知道用来做什么。

  1. docker ps/images/run....
  2. Docker API,后期会讲一些 Docker API 的东西
  3. 容器挂载 /var/run/docker.sock 文件。

容器挂载 /var/run/docker.sock 文件是做什么?

比如我们想要在一个 Docker 容器中使用 Docker 来做应用编译。常见的就是通过 Docker 跑了一个 Jenkins,然后在此容器中使用 Docker 来做应用的编译构建。