第 1 课:安装 Docker,让第一个容器跑起来
Docker 零基础 · 第一阶段
适合 macOS 和 Windows 初学者
本课只完成一件事:在 macOS 或 Windows 上启动 Docker,并亲手运行一个容器。
本课完成标准
完成后,你应该满足三个条件:
- Docker Desktop 正在运行。
docker version能看到 Client 和 Server。docker run --rm hello-world显示 Hello from Docker!。
1. Docker 解决什么问题?
假设你做了一道菜,想让朋友在另一座城市吃到完全一样的味道。只发一张“做法”不够,因为朋友的食材、锅具和调料可能不同。
Docker 的思路是:
把程序运行需要的文件、依赖和启动方式按统一标准准备好,再拿到另一台电脑或服务器上运行。
你的 FastAPI 项目需要:
- Python
- 第三方库
- 项目代码
- 配置文件
- 启动命令
以后我们会把这些内容装进 Docker,尽量减少“我的电脑能运行,服务器却不能运行”的问题。
本课暂时不学习:
- Dockerfile
- Docker Compose
- Docker 网络
- 数据卷
- 阿里云服务器
这些内容会在后面的课程中逐步学习。
2. 本课只认识 4 个词
Docker Desktop
Docker Desktop 是 macOS 和 Windows 上安装的 Docker 管理应用。
它的作用是:
- 启动 Docker 后台
- 管理镜像和容器
- 让终端中的
docker命令可以正常工作
可以把 Docker Desktop 理解成 Docker 的“总控制台”。
镜像 Image
镜像是一个准备好的应用包。
它里面可以包含:
- Python
- FastAPI
- Nginx
- 项目代码
- 启动程序
镜像本身还没有运行,可以类比成手机 App 的安装包。
容器 Container
容器是镜像启动以后产生的运行实例。
可以这样理解:
| Docker 概念 | 手机 App 类比 |
|---|---|
| 镜像 | App 安装包 |
| 容器 | 已经打开运行的 App |
同一个镜像可以启动多个容器。
端口 Port
端口是访问程序的入口编号,可以理解成“门牌号”。
例如:
- 浏览器访问本机的 8080 端口
- Docker 把 8080 转发给容器内部的 80 端口
- 浏览器就能看到容器里的网页
端口不是文件夹,也不是密码。
3. 安装或启动 Docker Desktop
macOS
- 打开 Finder → 应用程序,寻找 Docker。
- 如果已经安装,双击启动。
- 如果没有安装,打开 Docker 官方 Mac 安装页。
- Apple silicon(M 系列芯片)选择 Apple silicon 版本;Intel 电脑选择 Intel 版本。
- 打开下载的 DMG,把 Docker 拖入 Applications。
- 第一次启动时接受协议、选择推荐设置并完成系统授权。
- 等待菜单栏的 Docker 图标显示正常运行。
第一次启动可能需要几十秒。
你的学习环境之前检测到是 Apple silicon(arm64),因此应选择 Apple silicon 版本。
docker --version有输出,只能说明命令行工具存在,不能证明 Docker 后台引擎已经启动。
Windows
-
打开 PowerShell,执行:
wsl --version -
如果没有版本信息,用管理员 PowerShell 执行:
wsl --install -
按提示重启电脑。
-
安装 Docker Desktop。
-
安装时保留 Use WSL 2 instead of Hyper-V。
-
从开始菜单启动 Docker Desktop。
-
等待状态显示 Docker 已经运行。
如果 Windows 提示开启硬件虚拟化或重启,请按提示完成。
不要在 Docker Desktop 尚未启动时反复执行安装命令。
4. Client 和 Server 是什么?
你之前输入:
docker --version
能看到版本号是正常的,但这条命令只检查“命令行工具”是否存在。
Docker 实际上分成两部分:
Client Server / Engine
命令行客户端 请求 → 真正运行容器的后台
Client
Client 可以理解成“遥控器”。
你在终端输入:
docker run ...
就是在使用 Client 发出请求。
Server / Docker Engine
Server,也叫 Docker Engine,是被遥控的后台。
它负责:
- 下载镜像
- 创建容器
- 启动容器
- 停止容器
- 管理容器网络
执行:
docker version
正常结果类似这样:
Client:
Version: ...
Server:
Engine:
Version: ...
如果只有 Client,没有 Server,通常说明 Docker Desktop 没有完全启动。
解决方法:
- 打开 Docker Desktop。
- 等待它显示运行正常。
- 重新执行
docker version。 - 如果仍然报错,把完整输出发给老师。
5. 运行第一个容器
现在运行 Docker 官方提供的测试镜像。
它不是 FastAPI,也不是 MySQL,只是用来证明 Docker 的完整链路已经工作。
docker run --rm hello-world
这条命令可以拆成三部分:
| 命令部分 | 含义 |
|---|---|
docker run | 根据镜像创建并启动容器 |
--rm | 容器执行结束后自动删除 |
hello-world | 要使用的镜像名称 |
第一次运行时,Docker 会从镜像仓库下载 hello-world 镜像。
看到:
Hello from Docker!
表示以下链路全部成功:
终端 Client
↓
Docker Server
↓
下载镜像
↓
启动容器
↓
容器执行程序
↓
输出欢迎信息
6. 运行一个网页容器
刚才的 hello-world 显示一次文字就结束了。
现在使用 Nginx 镜像启动一个会持续运行的网页容器。你暂时只需要把 Nginx 理解成“别人已经做好的网页程序”。
docker run -d --name docker-basics -p 127.0.0.1:8080:80 nginx:alpine
命令解释
-d
让容器在后台运行,终端仍然可以继续输入命令。
--name docker-basics
给容器起名字,后面查看或停止时更方便。
-p 127.0.0.1:8080:80
把电脑的 8080 端口连接到容器的 80 端口,并且只允许本机访问。
nginx:alpine
要启动的镜像名称。Alpine 是一种体积较小的 Linux 基础环境。
浏览器访问
打开:
应该看到:
Welcome to nginx!
也可以在 macOS Terminal 中执行:
curl http://127.0.0.1:8080
Windows PowerShell 建议执行:
curl.exe http://127.0.0.1:8080
端口映射参考 Docker 官方端口发布文档。
7. 查看、停止和删除容器
查看正在运行的容器
docker ps
查看容器日志
docker logs docker-basics
停止容器
docker stop docker-basics
这相当于关闭一个正在运行的 App。
查看所有容器
docker ps -a
-a 表示包括已经停止的容器。
删除已经停止的容器
docker rm docker-basics
停止或删除容器,不会自动删除 nginx:alpine 镜像。
再次回顾:
- 镜像像安装包
- 容器像运行中的 App
- 删除容器不等于删除镜像
8. 常见问题排查
问题一:只有 Client,没有 Server
先确认 Docker Desktop 已打开,并等待它完全启动。
然后重新执行:
docker version
这不是 FastAPI 项目问题,而是 Docker 后台没有连接。
问题二:Cannot connect to the Docker daemon
这句话的白话意思是:
命令行找不到 Docker 后台。
排查顺序:
- 启动 Docker Desktop。
- 等待状态显示运行正常。
- 关闭并重新打开 Terminal 或 PowerShell。
- 再执行
docker version。
问题三:端口已经被占用
如果 8080 被其他程序占用,可以换电脑端口:
docker run -d --name docker-basics-2 -p 127.0.0.1:18080:80 nginx:alpine
然后打开:
左边的电脑端口可以更换,右边容器内部的 80 端口不需要更换。
问题四:网页打不开
依次执行:
docker ps
docker logs docker-basics
docker ps -a
把完整输出发给老师。
不要直接执行网上看到的“清理所有 Docker 内容”命令,因为可能误删其他项目的镜像、容器或数据。
9. 本课只需要记住的 6 句话
- Docker Desktop 是 macOS/Windows 上的 Docker 管理应用。
- Client 是你输入命令的一端。
- Server/Engine 是真正运行容器的后台。
- 镜像是准备好的应用包。
- 容器是镜像运行起来后的实例。
- 端口是访问程序的入口编号。
更多术语可以查看 Docker 小白术语速查表(该文档未包含在本次导入的课程文件中)。
现在不需要记住:
- Dockerfile
- Docker Compose
- Registry
- 数据卷
- Docker 网络
10. 一分钟自测
问题 1
以下哪句话正确?
- A. 镜像像安装包,容器像已经打开运行的 App
- B. 镜像和容器完全是同一个东西
- C. Server 只是 Docker 的网页文档
正确答案:A。
问题 2
如果只有 Client,没有 Server,最先做什么?
- A. 重新安装 FastAPI
- B. 启动 Docker Desktop 并等待后台运行
- C. 删除所有镜像
正确答案:B。
本课通关证据
请执行以下三条命令:
docker version
docker run --rm hello-world
docker ps -a
然后把完整输出发给老师。
如果三条命令成功,并且你能用自己的话解释“镜像、容器、Client、Server”,第 1 课就完成了。
下一课:第 2 课:用 Dockerfile 构建 FastAPI 镜像
官方资料
遇到任何不理解的词或报错,都可以继续问我。请注明 macOS 还是 Windows,并贴完整命令和完整输出。
想系统学习这门课程?
你已阅读完本文。需要更完整的知识体系,可以继续了解「Vibe Coding 实战课程」。
查看课程详情