Docker 基础操作:一键启动数据库和服务
完成时间:约 20 分钟。读完后你能用 Docker 启动和管理本课程需要的数据库。
本课程用 Docker 来跑 PostgreSQL 数据库。你不需要手动安装数据库、配置用户密码、处理版本兼容——一行命令就搞定:
docker compose up -d还记得 CS 基础篇里的类比吗?Docker = 移动餐车,自带灶台、冰箱、食材和调料,开到哪里都能立刻营业。现在我们来学怎么”开这辆餐车”。
为什么现在就要学 Docker
Section titled “为什么现在就要学 Docker”三个理由:
- 课程需要它——项目的数据库跑在 Docker 里,不学就启动不了
- 省去安装烦恼——不用在自己电脑上装 PostgreSQL,不用配环境变量、不用管版本冲突
- 一行命令搞定——
docker compose up -d启动,docker compose down停止,就这么简单
3 个核心概念
Section titled “3 个核心概念”在动手之前,先搞清楚三个词:
1. 镜像 (Image) — 模板
Section titled “1. 镜像 (Image) — 模板”镜像就是一个”安装包”。它包含了运行某个软件需要的一切:程序本身、配置、依赖。
类比:App Store 里的 app 安装包。 你搜索”PostgreSQL 16”,下载的就是一个镜像。它还没运行,只是一个模板。
2. 容器 (Container) — 运行中的实例
Section titled “2. 容器 (Container) — 运行中的实例”容器是镜像跑起来之后的东西。一个镜像可以启动多个容器,就像一个 app 安装包可以装在好几台手机上。
类比:手机上安装好的 app。 你可以打开它、关闭它、卸载它。镜像是安装包,容器是装好的 app。
3. Docker Compose — 批量管理
Section titled “3. Docker Compose — 批量管理”Docker Compose 让你用一个配置文件同时管理多个容器。比如一个项目需要数据库 + 缓存 + 消息队列,一个命令全部启动。
类比:一键安装”全家桶”。 不用一个个去 App Store 搜索下载,点一下就把办公套件里的 Word、Excel、PPT 全装好了。
你最常用的 5 个命令
Section titled “你最常用的 5 个命令”记住这 5 个就够了,覆盖日常开发 95% 的场景:
1. docker compose up -d — 启动所有服务
Section titled “1. docker compose up -d — 启动所有服务”docker compose up -d-d 表示后台运行(detached),终端不会被占用。
什么时候用:每天开始开发前,先跑这个启动数据库。
2. docker compose down — 停止所有服务
Section titled “2. docker compose down — 停止所有服务”docker compose down停止并移除容器,但保留数据(volumes 不会被删)。
什么时候用:下班收工,或者不需要数据库的时候。
注意:
docker compose down -v会连数据一起删掉(删除 volumes)。除非你确定要清空数据库,否则不要加-v。
3. docker compose ps — 查看服务状态
Section titled “3. docker compose ps — 查看服务状态”docker compose ps列出当前项目所有容器的状态:运行中、已停止、端口映射等。
什么时候用:启动后确认数据库是不是真的在跑。
4. docker compose logs -f 服务名 — 查看日志
Section titled “4. docker compose logs -f 服务名 — 查看日志”docker compose logs -f postgres-f 表示实时跟踪(follow),新日志会持续输出。按 Ctrl + C 退出。
什么时候用:服务出问题了,看看是哪里报错。
5. docker ps — 查看所有运行中的容器
Section titled “5. docker ps — 查看所有运行中的容器”docker ps注意这个命令没有 compose,它显示的是整台电脑上所有运行中的容器,不限于当前项目。
什么时候用:想确认电脑上到底有哪些东西在跑。
docker-compose.yml 是什么
Section titled “docker-compose.yml 是什么”项目根目录有一个 docker-compose.yml 文件,它是 Docker Compose 的配置文件,定义了要启动哪些服务。
下面是一个简化的 PostgreSQL 示例:
services: postgres: image: postgres:16 ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: myapp volumes: - pgdata:/var/lib/postgresql/data
volumes: pgdata:逐行解释:
| 配置项 | 含义 |
|---|---|
services: | 定义要启动的服务列表 |
postgres: | 服务名称,你可以自己取名,后面用 docker compose logs postgres 引用它 |
image: postgres:16 | 使用 PostgreSQL 16 版本的官方镜像 |
ports: - "5432:5432" | 端口映射——把容器内的 5432 端口映射到你电脑的 5432 端口 |
POSTGRES_USER | 数据库用户名 |
POSTGRES_PASSWORD | 数据库密码 |
POSTGRES_DB | 启动时自动创建的数据库名 |
volumes: - pgdata:/var/lib/... | 把数据库文件存到一个命名卷里,容器删了数据还在 |
底部的 volumes: pgdata: | 声明这个命名卷 |
你不需要自己写这个文件,课程项目里已经准备好了。你只需要知道它在做什么。
常见问题处理
Section titled “常见问题处理”| 问题 | 原因 | 解决 |
|---|---|---|
docker compose up 报错 “port already in use” | 端口 5432 被其他程序占了 | 关掉占用端口的程序,或者修改 compose 文件里的端口映射(比如改成 "5433:5432") |
| 容器启动后立即退出 | 配置错误 | 运行 docker compose logs 服务名 查看具体错误信息 |
| ”Cannot connect to Docker daemon” | Docker Desktop 没有启动 | 打开 Docker Desktop,等它完全启动后再试 |
| 数据丢了 | 用了 docker compose down -v,-v 删除了 volumes | 下次只用 docker compose down,不加 -v 就只停服务不删数据 |
确保你已经安装了 Docker Desktop(参考环境配置篇),然后在项目根目录依次运行:
# 1. 启动服务docker compose up -d
# 2. 确认 PostgreSQL 在运行docker compose ps
# 3. 看一下数据库日志docker compose logs postgres
# 4. 停止服务docker compose down如果第 2 步看到 PostgreSQL 的状态是 running,恭喜你,Docker 这关就过了。
| 命令 | 作用 | 什么时候用 |
|---|---|---|
docker compose up -d | 后台启动所有服务 | 开始开发前 |
docker compose down | 停止所有服务 | 收工的时候 |
docker compose ps | 查看服务状态 | 确认服务是否在跑 |
docker compose logs -f 服务名 | 查看实时日志 | 排查问题 |
docker ps | 查看所有运行中的容器 | 确认电脑上跑了什么 |
记住:日常开发只需要 up 和 down,出问题了用 ps 和 logs 排查。
下一步:回到主线,开始正式课程。