安装与核心架构
前两篇把"为什么要有 Docker"(docker 的盒子比喻)和"Docker 与 Compose 的分工"(docker-compose)讲清楚了,但一直没碰过真机。从本篇起进入系统实操:先把 Docker 装起来,搞清楚敲下 docker run 时背后是谁在干活。
一、架构:三个角色
很多人以为 docker 命令就是 Docker 本体,其实它只是个"遥控器"。Docker 采用经典的客户端-服务端架构:
flowchart LR
A["docker 命令行<br/>(Client)"] -- "REST API<br/>(默认 unix socket)" --> B["dockerd 守护进程<br/>(Daemon)"]
B -- "pull / push" --> C["镜像仓库<br/>(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 主力场景
官方一键脚本最省事:
curl -fsSL https://get.docker.com | bash
国内服务器建议配置镜像加速(否则 pull 慢到怀疑人生),编辑 /etc/docker/daemon.json:
{
"registry-mirrors": ["https://<你的加速器地址>"]
}
然后重启服务生效:
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。两条路:
- 每条命令都加
sudo(麻烦); - 把自己加进 docker 组:
sudo usermod -aG docker $USER,重新登录生效。
安全提示
docker 组等价于无密码 root——因为可以挂载宿主机任意文件进容器。个人 VPS 无所谓,公司机器上要掂量。
三、hello-world 背后发生了什么
装完必跑的 docker run hello-world,值得把输出里的每句话看懂:
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、你自己的项目,走的都是同一条路。
四、装完先做一次体检
docker version # client 与 daemon 版本,两段都有才算装通了
docker info # daemon 全貌:容器数、镜像数、存储驱动、加速器
docker run hello-world
docker version 只显示 Client 一段、Server 那段报错,说明 daemon 没起来(Desktop 没开 / 服务没启动)——这是新手最常撞的第一堵墙。
装好环境、看懂架构,下一篇把日常最常用的一套命令(拉镜像、跑容器、看日志、进容器)一次讲透:镜像与容器命令实操。
⬅️ docker-compose 🏠 00-网络与项目 ➡️ 镜像与容器命令实操
💬 评论