Docker守护进程的作用是什么?

29
这是Docker的架构:enter image description here我无法理解为什么需要Docker守护进程。客户端已经足够好了。客户端只需使用Unix套接字访问守护进程。它可以使用TCP,但我注意到通常客户端和守护进程都在同一台机器上!那么为什么需要两个单独的实体?
如上所述..客户端可以使用TCP与守护进程通信。那么在团队中工作的首选方式是什么?整个团队有一个守护进程,在单独的服务器上运行每个开发者的客户端?还是每个开发人员都有自己的守护进程?

3
你的错误在于:“......我注意到通常客户端和守护进程在同一台机器上!” 在大型生产系统中,这并不是真实情况。 - SiKing
4个回答

31

Docker客户端仅提供CLI,它只是一个HTTP API包装器,类似于AWS CLI。

Docker守护程序是整个操作的核心,类似于AWS本身。当您使用docker run命令启动容器时,您的Docker客户端将将该命令转换为HTTP API调用,并将其发送到Docker守护程序,Docker守护程序然后评估请求,与底层操作系统进行交互并设置您的容器。

请注意,Docker CLI可以连接到远程Docker守护程序,并且您可以配置您的Docker守护程序以使用TCP IP。

我心中的问题是,团队合作的首选方式是什么?每个开发者各自拥有一个守护程序,还是整个团队共享一个独立服务器上的守护程序,并由每个开发者运行客户端?

这取决于您,但大多数情况下,开发人员都有一个本地Docker守护程序和客户端,使用Dockerfiles构建镜像。如果他们需要共享Docker映像,则可以提供本地Docker注册表或使用公共注册表。通过利用Docker,您可以在开发者的处置下获得完全相同的开发环境。此开发环境将类似于生产环境。


Farhad 是对的。正如我所提到的……客户端可以使用 TCP 与守护程序进行通信。我心中的问题是,团队合作的首选方式是什么?一个守护程序在单独的服务器上为整个团队工作,每个开发者都运行一个客户端?还是每个开发者都有自己的守护程序。 - Apurva Singh
1
@ApurvaSingh 感谢您的澄清,已更新答案。 - Farhad Farahi

6
在团队中,最好的工作方式是什么?是在单独的服务器上为整个团队使用一个守护进程,每个开发人员运行一个客户端?还是每个开发人员都有他自己的守护进程?
每个开发人员都使用自己的Docker守护程序和容器:Docker的理念是能够指定(使用Dockerfile)一个容器,每个开发人员都可以重建并在本地使用,确保docker build会产生完全相同的镜像。 或者他们可以将Docker映像推送到其中一个镜像库,然后在自己的本地Docker守护程序实例上重用它。
但是,在任何情况下,Docker守护程序都是针对服务器的,这意味着您只有在团队访问共同的服务器时才会共享它。如果不是这种情况,他们可以在自己的工作站上安装Docker,在这种情况下,每个人都有自己的Docker守护程序。

3

Docker守护程序安装在主机上,本质上充当Docker的大脑;它代表您创建和管理Docker镜像。它的整个目的是执行客户端发出的命令。

例如,如果您为特定容器发出Docker stop命令,则守护程序将继续查找容器并停止它。

此外,每当您的容器需要访问操作系统级别的网络端口、存储卷或任何其他组件时,Docker守护程序都会提供。


2
为什么我们需要Docker守护程序? Docker守护进程位于主机(本地)上或安装在主机上。它是整个Docker的大脑。它管理所有镜像和容器。它的全部工作是从主机使用cli获取命令,并使用Docker API对Docker执行操作。
例如,如果您在cli中输入“docker stop”,那么Docker守护程序将使用该命令并在Docker上执行相应的操作。
还要注意,如果您发出访问某些未在本地机器上的映像/容器的命令,则此守护程序将接受该命令并前往Docker注册表下载并运行该映像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接