--- title: "03-安装与核心架构" created: 2026-09-01 tags: - 项目筑基 --- # 安装与核心架构 前两篇把"为什么要有 Docker"([[01-docker|docker]] 的盒子比喻)和"Docker 与 Compose 的分工"([[02-docker-compose|docker-compose]])讲清楚了,但一直没碰过真机。从本篇起进入系统实操:先把 Docker 装起来,搞清楚敲下 `docker run` 时背后是谁在干活。 ## 一、架构:三个角色 很多人以为 `docker` 命令就是 Docker 本体,其实它只是个"遥控器"。Docker 采用经典的客户端-服务端架构: ```mermaid flowchart LR A["docker 命令行
(Client)"] -- "REST API
(默认 unix socket)" --> B["dockerd 守护进程
(Daemon)"] B -- "pull / push" --> C["镜像仓库
(Registry · Docker Hub)"] B -- "真正管理" --> D["容器 / 镜像 / 卷 / 网络"] ``` | 角色 | 是什么 | 干什么 | | --- | --- | --- | | Client(客户端) | 你敲的 `docker` 命令 | 只负责把请求发给 daemon,本身不干活 | | Daemon(守护进程) | `dockerd` 后台进程 | 真正干活的角色:拉镜像、建容器、管卷和网络 | | Registry(仓库) | Docker Hub / 阿里云 ACR 等 | 存放镜像的"应用商店",pull 从这来,push 到这去 | 所以 `docker run nginx` 的完整剧情是:client 把请求递给本机 daemon → daemon 先查本地有没有 `nginx` 镜像 → 没有就去 Docker Hub pull 下来 → 用镜像创建容器并启动。**镜像不是在你电脑上现场打包的,而是从仓库下载的别人打包好的盒子。** > 验证方法:`docker info` 能看到 daemon 状态、存储驱动、仓库地址;`ps aux | grep dockerd` 能看到守护进程本体。 ## 二、安装 ### Linux(Ubuntu / Debian)——VPS 主力场景 官方一键脚本最省事: ```bash curl -fsSL https://get.docker.com | bash ``` 国内服务器建议配置镜像加速(否则 pull 慢到怀疑人生),编辑 `/etc/docker/daemon.json`: ```json { "registry-mirrors": ["https://<你的加速器地址>"] } ``` 然后重启服务生效: ```bash sudo systemctl daemon-reload sudo systemctl restart docker ``` (再次出发组装 Docker 那段走的换源+加速路线,就是这里的完整实录。) ### Windows / macOS —— Docker Desktop 桌面系统装 Docker Desktop 即可,它把 VM、daemon、CLI 全打包好了。注意两点: - Windows 依赖 WSL2 后端,安装前先开启 WSL2; - Desktop 是给开发用的,生产服务器上跑的是原生 Linux 版 Docker。 ### 权限:为什么总有人敲 `sudo docker` daemon 默认监听 root 专属的 unix socket,普通用户跑 `docker` 会报 `permission denied`。两条路: 1. 每条命令都加 `sudo`(麻烦); 2. 把自己加进 docker 组:`sudo usermod -aG docker $USER`,重新登录生效。 > [!warning] 安全提示 > docker 组等价于无密码 root——因为可以挂载宿主机任意文件进容器。个人 VPS 无所谓,公司机器上要掂量。 ## 三、hello-world 背后发生了什么 装完必跑的 `docker run hello-world`,值得把输出里的每句话看懂: ```text Unable to find image 'hello-world:latest' locally ← daemon 本地没货 latest: Pulling from library/hello-world ← 去 Docker Hub 拉 Hello from Docker! ← 容器启动,输出这句话后退出 ``` 一句话总结:**pull(拉镜像)→ create(建容器)→ start(启动)→ 输出 → exit(退出)**。这个 5 秒的小流程就是以后所有容器的缩影——nginx、MySQL、你自己的项目,走的都是同一条路。 ## 四、装完先做一次体检 ```bash docker version # client 与 daemon 版本,两段都有才算装通了 docker info # daemon 全貌:容器数、镜像数、存储驱动、加速器 docker run hello-world ``` `docker version` 只显示 Client 一段、Server 那段报错,说明 daemon 没起来(Desktop 没开 / 服务没启动)——这是新手最常撞的第一堵墙。 --- 装好环境、看懂架构,下一篇把日常最常用的一套命令(拉镜像、跑容器、看日志、进容器)一次讲透:[[04-镜像与容器命令实操|镜像与容器命令实操]]。 --- ⬅️ [[02-docker-compose|docker-compose]] 🏠 [[00-网络与项目|00-网络与项目]] ➡️ [[04-镜像与容器命令实操|镜像与容器命令实操]]