跳转到内容

Docker 基础操作:一键启动数据库和服务

完成时间:约 20 分钟。读完后你能用 Docker 启动和管理本课程需要的数据库。

本课程用 Docker 来跑 PostgreSQL 数据库。你不需要手动安装数据库、配置用户密码、处理版本兼容——一行命令就搞定:

Terminal window
docker compose up -d

还记得 CS 基础篇里的类比吗?Docker = 移动餐车,自带灶台、冰箱、食材和调料,开到哪里都能立刻营业。现在我们来学怎么”开这辆餐车”。


三个理由:

  1. 课程需要它——项目的数据库跑在 Docker 里,不学就启动不了
  2. 省去安装烦恼——不用在自己电脑上装 PostgreSQL,不用配环境变量、不用管版本冲突
  3. 一行命令搞定——docker compose up -d 启动,docker compose down 停止,就这么简单

在动手之前,先搞清楚三个词:

镜像就是一个”安装包”。它包含了运行某个软件需要的一切:程序本身、配置、依赖。

类比:App Store 里的 app 安装包。 你搜索”PostgreSQL 16”,下载的就是一个镜像。它还没运行,只是一个模板。

2. 容器 (Container) — 运行中的实例

Section titled “2. 容器 (Container) — 运行中的实例”

容器是镜像跑起来之后的东西。一个镜像可以启动多个容器,就像一个 app 安装包可以装在好几台手机上。

类比:手机上安装好的 app。 你可以打开它、关闭它、卸载它。镜像是安装包,容器是装好的 app。

Docker Compose 让你用一个配置文件同时管理多个容器。比如一个项目需要数据库 + 缓存 + 消息队列,一个命令全部启动。

类比:一键安装”全家桶”。 不用一个个去 App Store 搜索下载,点一下就把办公套件里的 Word、Excel、PPT 全装好了。


记住这 5 个就够了,覆盖日常开发 95% 的场景:

1. docker compose up -d — 启动所有服务

Section titled “1. docker compose up -d — 启动所有服务”
Terminal window
docker compose up -d

-d 表示后台运行(detached),终端不会被占用。

什么时候用:每天开始开发前,先跑这个启动数据库。

2. docker compose down — 停止所有服务

Section titled “2. docker compose down — 停止所有服务”
Terminal window
docker compose down

停止并移除容器,但保留数据(volumes 不会被删)。

什么时候用:下班收工,或者不需要数据库的时候。

注意:docker compose down -v 会连数据一起删掉(删除 volumes)。除非你确定要清空数据库,否则不要加 -v

3. docker compose ps — 查看服务状态

Section titled “3. docker compose ps — 查看服务状态”
Terminal window
docker compose ps

列出当前项目所有容器的状态:运行中、已停止、端口映射等。

什么时候用:启动后确认数据库是不是真的在跑。

4. docker compose logs -f 服务名 — 查看日志

Section titled “4. docker compose logs -f 服务名 — 查看日志”
Terminal window
docker compose logs -f postgres

-f 表示实时跟踪(follow),新日志会持续输出。按 Ctrl + C 退出。

什么时候用:服务出问题了,看看是哪里报错。

5. docker ps — 查看所有运行中的容器

Section titled “5. docker ps — 查看所有运行中的容器”
Terminal window
docker ps

注意这个命令没有 compose,它显示的是整台电脑上所有运行中的容器,不限于当前项目。

什么时候用:想确认电脑上到底有哪些东西在跑。


项目根目录有一个 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:声明这个命名卷

你不需要自己写这个文件,课程项目里已经准备好了。你只需要知道它在做什么。


问题原因解决
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(参考环境配置篇),然后在项目根目录依次运行:

Terminal window
# 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查看所有运行中的容器确认电脑上跑了什么

记住:日常开发只需要 updown,出问题了用 pslogs 排查。


下一步:回到主线,开始正式课程。