在上一篇中我们提到了广义docker的概念,Docker是什么?狭义和广义上的区别,该说清的就说清-CSDN博客
广义的 "Docker" 可能包括:
Docker Engine(引擎)
Docker Compose(多容器编排)
Docker Hub(镜像仓库)
Docker Desktop(桌面端工具)
Kubernetes 集成等。
这里面有关docker引擎和docker desktop说一下。
Docker 引擎主要由以下两部分组成:
Docker 守护进程(
dockerd
)常驻后台的核心服务,负责管理容器生命周期、镜像、网络、存储等。
监听 Docker API 请求(默认通过
/var/run/docker.sock
或 TCP 端口)。
Docker 客户端(
docker
CLI)用户通过命令行工具与守护进程交互(如
docker run
、docker build
)。
也就是Docker 引擎(Docker Engine)不仅仅是守护进程(dockerd
),而是一个完整的容器运行时系统,它为容器提供了一系列核心功能和支持。docker引擎是包括守护进程和客户端(cli)的。
这里既然说了Docker 引擎是包含了客户端(cli)的,前面又说了广义的docker是包含Docker Desktop的,从字面意思上看Docker Desktop是不是也是一个客户端呢?
Docker Desktop 和 Docker Engine 中的 docker
CLI 客户端(Client)本质上是同一个工具,但它们的安装方式、运行环境以及部分功能存在差异。
特性 | Docker Desktop 中的 Client | Docker Engine 中的 Client |
---|---|---|
安装方式 | 作为 Docker Desktop 的一部分自动安装(捆绑包) | 单独安装(如 apt-get install docker-ce-cli ) |
运行环境 | 主要在 macOS/Windows 上运行 | 主要在 Linux 服务器或虚拟机中运行 |
守护进程位置 | 通过虚拟机(Linux VM)或 WSL2 运行 dockerd |
直接运行在宿主机的 Linux 内核上 |
默认通信方式 | 通过 unix:///var/run/docker.sock 转发到 Linux VM |
直接连接本地或远程 dockerd |
多平台支持 | 自动处理 macOS/Windows 与 Linux 的架构转换 | 需手动处理跨平台镜像(如 --platform linux/amd64 ) |
图形界面 | 包含 GUI(管理容器、镜像、设置等) | 仅 CLI,无图形界面 |
集成工具 | 内置 Kubernetes、Volume 管理、Dev Environments 等 | 需手动配置额外工具(如 kubectl 、docker-compose ) |
Docker Desktop 和 Docker Engine 中的 docker
CLI 客户端是同一个工具的不同分发形式,核心功能一致,但 Docker Desktop 对其进行了封装和扩展,更适合桌面用户。Engine 的客户端则更轻量,适合服务器环境。根据需求选择即可,两者命令完全兼容。
Docker 客户端可以安装在 任何能访问 Docker 守护进程的机器(包括 Docker Host 或网络内其他主机)。
针对文中列表红色字体提到的远程 dockerd
,
再即兴说一下docker cli是安装在哪里呢?其实:
Docker 客户端(docker
CLI)可以安装在 Docker 主机(Host) 上,也可以安装在 网络内的其他机器 上,具体取决于如何配置客户端与 Docker 守护进程(dockerd
)的通信方式。以下是详细说明:
默认情况:客户端与守护进程在同一台机器(Docker Host)
典型安装方式:
当在 Linux 系统上安装 Docker(如通过apt-get install docker-ce
),会同时安装:Docker 守护进程(
dockerd
):运行在后台,管理容器。Docker 客户端(
docker
CLI):通过本地 Unix 套接字(/var/run/docker.sock
)与守护进程通信。
使用示例:
直接在 Docker Host 上执行命令(如docker ps
、docker run
)。
客户端与守护进程分离(远程访问)
Docker 客户端可以安装在网络内的其他机器,通过配置连接到远程 Docker 守护进程。常见场景:
(1)通过 TCP 暴露 Docker 守护进程
(2)通过 SSH 安全连接
(3)使用 TLS 加密通信(生产环境推荐)
对于上述三种情况的典型应用场景列表:
场景 | 客户端位置 | 通信方式 | 适用环境 |
---|---|---|---|
本地开发 | Docker Host 本地 | Unix 套接字 | 个人电脑、开发机 |
远程管理 | 内网其他机器 | TCP/SSH/TLS | 团队协作、测试环境 |
CI/CD 流水线 | CI 服务器(如 Jenkins) | TLS 加密 | 生产环境 |
对于docker cli和docker 守护进程(完全可以在一台机器上安装),基本使用方法如下所示,这部分在docker的应用时再说。