安装与核心架构

前两篇把"为什么要有 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。两条路:

  1. 每条命令都加 sudo(麻烦);
  2. 把自己加进 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-网络与项目 ➡️ 镜像与容器命令实操