开发者 Docker 指南:镜像、容器与 Compose

DevOps2026-10-02TryQuickToolBox

你可能听说过 Docker 以及它如何简化开发工作流程。但当你第一次遇到像 镜像、容器 和 Docker Compose 这样的术语时,可能会感到不知所措。本指南将去芜存菁,向你展示如何在项目中有效使用 Docker。

什么是 Docker,为什么你需要关注它?

Docker 是一个平台,它将你的应用程序及其依赖项打包成一个称为容器的标准化单元。容器轻量、可移植且相互隔离。它们通过确保你的应用在任何地方都以相同方式运行,解决了经典的“在我机器上能跑”的问题。

与虚拟机不同,容器共享宿主操作系统内核,因此启动更快、效率更高。这就是 Docker 成为现代开发和部署流水线中流砥柱的原因。

镜像 vs. 容器:构建模块

镜像是一个只读模板,包含你的应用程序代码、运行时、库和设置。容器是镜像的运行实例。可以把镜像看作类,容器看作对象。

你使用 Dockerfile 创建镜像。以下是一个 Node.js 应用的简单示例:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Dockerfile 中的每一行都会创建一个层。层会被缓存,因此当只有后续步骤发生变化时,重新构建会更快。

常用 Docker 命令

Docker Compose:管理多容器应用

现实世界的应用通常需要多个服务:Web 服务器、数据库、缓存。Docker Compose 允许你通过单个 YAML 文件定义并运行多容器应用。

以下是一个包含 PostgreSQL 和 Redis 的 Node.js 应用的 docker-compose.yml:

version: '3.8'
services:
  web:
    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:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
  cache:
    image: redis:7
volumes:
  pgdata:

运行 docker compose up,所有服务将一起启动。depends_on 确保数据库和缓存在 Web 服务之前启动。

关键 Compose 命令

开发最佳实践

何时使用 Docker(何时不用)

当你需要跨团队的一致环境、轻松的依赖管理或微服务时,Docker 表现出色。对于简单的静态网站或脚本,它可能过于复杂。根据项目的复杂性和部署需求进行评估。

常见问题

镜像和容器有什么区别?

镜像是静态模板;容器是该镜像的运行实例。你可以从同一个镜像运行多个容器。

单个容器需要 Docker Compose 吗?

不需要,对于单个容器,你可以使用 docker run。当你需要多个服务相互通信时,Compose 才派上用场。

如何在 Docker 中持久化数据?

使用卷或绑定挂载。卷由 Docker 管理,非常适合数据库;绑定挂载将主机目录映射到容器中,对开发很有用。

准备好优化你的 Docker 化应用了吗?如果你在容器内处理 Nginx 日志,试试我们的 Nginx 日志分析器 来快速解析和分析日志。