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. 付费)、多阶段构建以及生产就绪检查清单。

阅读完整文章于 trackstack.tech

0 浏览
Back to Blog

相关文章

阅读更多 »

用 Zig 编写 C 编译器 (2025)

介绍 这是一系列我在开发 paella(https://github.com/asibahi/paella)时撰写的文章,遵循了 Nora Sandler 的《Writing a C Compiler》(https://...)的思路。

Pygame Snake,第2部分

介绍 在第一部分,我们建立了一个基本的 pygame 窗口,拥有 1000 × 1000 像素的画布和一个 50 × 50 像素的方块,该方块持续移动。对于贪吃蛇游戏 w...

Pygame 贪吃蛇,第1部分

介绍 Pygame 是一个让我们使用 Python 创建 2D 游戏的模块。它是学习编程概念的好方法,经典游戏 Snake 也是一个很好的例子。