以下环境默认为centos7
最近切换Docker版本时发现新版本Docker的 Systemd Unit File 和之前的不太一样,通常我们知道,Docker Daemon 启动时,可以通过 --host
参数(简写为 -H
)来指定 Daemon Socket 连接的位置,比如 --host=unix:///var/run/docker.sock
表示使用一个 Unix Domain Socket;而 --host=tcp://0.0.0.0:2376
表示 Docker Daemon 监听在 2376 端口上。
而现在 Docker service的 的启动命令使用的参数为 -H fd://
,所以不太理解,查到几篇文章有所收获,特此记录。
Systemd Socket
systemd是一套用来管理主机上各个Daemon运行的工具,
开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动.
上面提到的并行很有意思, 不相干的Daemon并行启动自然没有什么问题,但倘若Daemon B依赖于Daemon A,那么它就必须等到Daemon A完成启动后才能启动,这就变成了串行.如果避免这种串行呢? 这需要了解两个Daemon的依赖性的本质.通常来说,如果Daemon B依赖Daemon A,那么就说明Daemon B(Clinet)启动时会向Daemon A(Server)发起连接.由于Daemon A和Daemon B通常在一台主机上, 因此它们之间的C-S连接通常使用Unix Socket完成.
而socket activation的思想就是: Daemon B启动时其实并不需要Daemon A真