参见官方文档:

docker daemon 默认是通过 uds 来listen本地的client请求, 优点是权限好控制. 只允许 root 用户在本机访问<aside> 💡 - By default, the Docker daemon listens for connections on a Unix socket to accept requests from local clients.
unix:///var/run/docker.sock to allow only local connections by the root user.</aside>
之前不太理解为啥docker要监听在: /run/docker.sock 这个地址上? 对uds有了完整的实践与测试之后, 对此有了透彻的认知.
从而也理解了为啥 如何创建Logtail配置并以DaemonSet方式采集容器文本日志\_日志服务(SLS)-阿里云帮助中心 中, 需要按照 Logtail通过/run/docker.sock访问Docker,请确保该路径存在且具备访问权限。 方式来收集日志.
镜像构建流程
Docker 镜像构建实际上是在 Docker 守护进程(Docker Daemon)上执行的。当你运行
docker build命令时,构建过程中的所有操作都是由 Docker 守护进程在服务器的沙箱环境中进行的。这个沙箱环境被称作构建上下文(build context)。这里有一些详细步骤:
- 构建上下文(Build Context)传递: 当你执行
docker build命令时,当前目录(或你指定的上下文目录)下的所有内容都会被发送给 Docker 守护进程。这就是为什么通常在最后加上一个点.来指定当前目录作为上下文。上下文中包含了Dockerfile和所有可能被Dockerfile中的指令(如COPY,ADD)引用的文件和目录。- 构建过程: Docker 守护进程接收到构建上下文后,会开始解析
Dockerfile并逐步执行里面的指令。每执行一个指令,实际上 Docker 守护进程都会创建一个临时的容器来运行这些指令,并捕获其变更作为新的镜像层。当执行完成后,这个临时容器会被删除,但是新的镜像层会被保留。—> 在执行COPY命令时,Docker不会创建一个临时的容器来执行这条命令。 Docker在处理不同类型的Dockerfile指令时,采用不同的策略:
- 对于
COPY和ADD等涉及文件复制的操作,Docker直接在镜像层上执行,不需要创建容器。- 对于
RUN指令,需要在容器环境中运行命令,因此Docker会创建一个临时容器来执行这些指令,并捕获其变更作为新的镜像层。
- 镜像层的创建: 每个
Dockerfile指令都可能创建一个新的镜像层。例如,RUN指令会运行一条命令并创建一个新层,COPY或ADD指令会将文件复制到镜像并创建新层。所有这些镜像层加起来就形成了最终的 Docker 镜像。- 运行于主机上: 虽然 Docker 守护进程可以在远程服务器上运行,但是通常情况下,它是在你的本地机器上作为一个后台服务运行的(如果你在本地机器上使用 Docker 的话)。这意味着所有构建操作都在你的机器上发生,只要你的机器上安装了 Docker。
- 隔离性: Docker 使用容器技术来保证构建过程的隔离性,确保每一次构建都在干净的环境中开始,并且构建过程中的变更不会污染宿主机或其他构建。
构建完成后,新创建的镜像会存储在本地 Docker 守护进程的镜像仓库中,你可以使用
docker images查看。如果需要,还可以将其推送到远程镜像仓库,如 Docker Hub。