跳到主要内容

第 1 课:安装 Docker,让第一个容器跑起来

Docker 零基础 · 第一阶段
适合 macOS 和 Windows 初学者

本课只完成一件事:在 macOS 或 Windows 上启动 Docker,并亲手运行一个容器。

本课完成标准​

完成后,你应该满足三个条件:

  1. Docker Desktop 正在运行。
  2. docker version 能看到 Client 和 Server。
  3. 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​

  1. 打开 Finder → 应用程序,寻找 Docker。
  2. 如果已经安装,双击启动。
  3. 如果没有安装,打开 Docker 官方 Mac 安装页。
  4. Apple silicon(M 系列芯片)选择 Apple silicon 版本;Intel 电脑选择 Intel 版本。
  5. 打开下载的 DMG,把 Docker 拖入 Applications。
  6. 第一次启动时接受协议、选择推荐设置并完成系统授权。
  7. 等待菜单栏的 Docker 图标显示正常运行。

第一次启动可能需要几十秒。

你的学习环境之前检测到是 Apple silicon(arm64),因此应选择 Apple silicon 版本。

docker --version 有输出,只能说明命令行工具存在,不能证明 Docker 后台引擎已经启动。

Windows​

  1. 打开 PowerShell,执行:

    wsl --version
  2. 如果没有版本信息,用管理员 PowerShell 执行:

    wsl --install
  3. 按提示重启电脑。

  4. 打开 Docker 官方 Windows 安装页。

  5. 安装 Docker Desktop。

  6. 安装时保留 Use WSL 2 instead of Hyper-V。

  7. 从开始菜单启动 Docker Desktop。

  8. 等待状态显示 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 没有完全启动。

解决方法:

  1. 打开 Docker Desktop。
  2. 等待它显示运行正常。
  3. 重新执行 docker version。
  4. 如果仍然报错,把完整输出发给老师。

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 基础环境。

浏览器访问​

打开:

http://127.0.0.1:8080

应该看到:

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 后台。

排查顺序:

  1. 启动 Docker Desktop。
  2. 等待状态显示运行正常。
  3. 关闭并重新打开 Terminal 或 PowerShell。
  4. 再执行 docker version。

问题三:端口已经被占用​

如果 8080 被其他程序占用,可以换电脑端口:

docker run -d --name docker-basics-2 -p 127.0.0.1:18080:80 nginx:alpine

然后打开:

http://127.0.0.1:18080

左边的电脑端口可以更换,右边容器内部的 80 端口不需要更换。

问题四:网页打不开​

依次执行:

docker ps
docker logs docker-basics
docker ps -a

把完整输出发给老师。

不要直接执行网上看到的“清理所有 Docker 内容”命令,因为可能误删其他项目的镜像、容器或数据。


9. 本课只需要记住的 6 句话​

  1. Docker Desktop 是 macOS/Windows 上的 Docker 管理应用。
  2. Client 是你输入命令的一端。
  3. Server/Engine 是真正运行容器的后台。
  4. 镜像是准备好的应用包。
  5. 容器是镜像运行起来后的实例。
  6. 端口是访问程序的入口编号。

更多术语可以查看 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 实战课程」。

查看课程详情