Docker 初学者:从零到在本地 10 分钟运行全栈
发布: (2026年4月24日 GMT+8 13:30)
5 分钟阅读
原文: Dev.to
Source: Dev.to
(未提供需要翻译的文本内容。如果您提供文章的其余部分,我可以为您进行翻译。)
即时运行任何服务
docker run -d -p 8080:80 nginx:latest
在命令执行后打开——你会看到 Nginx 正在运行。无需安装,无需配置,无冲突。
将自己的应用构建为镜像
docker build -t my-app:1.0 .
启动整个堆栈(app + db + cache)
docker compose up -d
Node.js 应用的 Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
提示: 在复制其余源码之前先复制 package*.json,可以让 Docker 缓存 npm ci 步骤。代码更改后,重新构建只需几秒,而不是几十秒。
构建并运行
docker build -t my-app:1.0 .
docker run -d -p 3000:3000 my-app:1.0
Python/Flask 应用的 Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
docker‑compose 示例(app + PostgreSQL + Redis)
version: "3.9"
services:
app:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://user:pass@db:5432/mydb
REDIS_URL: redis://cache:6379
depends_on:
- db
- cache
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
cache:
image: redis:7-alpine
volumes:
pgdata:
典型工作流程
docker compose up -d # start everything
docker compose down # stop everything
docker compose up -d --build # rebuild after code changes
docker compose down -v # stop + delete database data
pgdata 卷确保数据库在容器重启后仍然持久化。仅在需要全新开始时使用 -v。
常用 Docker 命令
| 命令 | 功能说明 |
|---|---|
docker run -d -p 8080:80 nginx | 运行一个容器 |
docker build -t app:1.0 . | 构建镜像 |
docker ps | 列出运行中的容器 |
docker ps -a | 列出所有容器 |
docker logs -f my-app | 实时查看容器日志 |
docker exec -it my-app sh | 在容器内部打开 shell |
docker stop my-app | 停止容器 |
docker rm my-app | 删除容器 |
docker compose up -d | 启动所有服务 |
docker compose down | 停止所有服务 |
最佳实践检查清单
- ✅ 使用 Alpine 或 Slim 基础镜像(而非默认约 1 GB 的镜像)
- ✅ 添加
.dockerignore以排除node_modules、.git、.env等 - ✅ 以非 root 用户运行容器(例如
USER node) - ✅ 通过环境变量传递密钥,切勿硬编码
- ✅ 为持久化数据配置卷(例如数据库文件)
- ✅ 添加健康检查,例如:
HEALTHCHECK CMD curl -f http://localhost:3000/health || exit 1 - ✅ 在全新机器上使用
docker compose up验证配置
故障排除技巧
- 容器立即退出 – 应用可能在启动时崩溃。使用
docker logs <container>检查日志。常见原因是缺少环境变量。 - 重启后数据库为空 – 确保为数据库数据定义了卷;否则数据保存在容器内部,容器停止后会丢失。
- 端口已被占用 – 其他进程已经绑定了主机端口。停止该进程或映射到其他主机端口,例如
-p 3001:3000。 - 镜像太大 – 切换到更小的基础镜像(
node:20-alpine),添加.dockerignore,并考虑对编译型语言使用多阶段构建。典型的缩减效果:1 GB → ~100 MB。
进一步阅读
完整指南涵盖了 Windows/macOS/Linux 的安装步骤、额外的 Python Dockerfile 示例、Docker Desktop 许可(免费 vs. 付费)、多阶段构建以及生产就绪检查清单。