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

DevOps2026-10-01TryQuickToolBox

作为开发者,你可能遇到过环境不一致的困扰:“在我机器上能跑!”Docker 通过将应用打包到容器中解决了这个问题。本指南将解释 Docker 镜像、容器和 Compose,帮助你一致地构建、交付和运行应用。

什么是 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"]

使用以下命令构建镜像:

docker build -t my-app .

列出镜像:docker images

运行容器

从镜像启动容器:

docker run -d -p 3000:3000 --name my-container my-app

这以分离模式(-d)运行容器,映射端口 3000,并命名为 my-container。

列出运行中的容器:docker ps

停止容器:docker stop my-container

删除容器:docker rm my-container

为什么要使用 Docker Compose?

当你的应用依赖多个服务(数据库、缓存等)时,管理单个容器会变得繁琐。Docker Compose 允许你使用 YAML 文件定义和运行多容器应用。

Compose 文件示例

创建 docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

启动所有服务:docker compose up -d

停止并删除:docker compose down

开发者最佳实践

常用命令速查表

命令描述
docker build -t name .从 Dockerfile 构建镜像
docker run -p host:container image运行容器并映射端口
docker ps -a列出所有容器
docker exec -it container bash在运行中的容器内打开 shell
docker compose up启动 Compose 文件中定义的服务
docker compose logs -f跟踪所有服务的日志

常见问题

镜像和容器有什么区别?

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

什么时候应该使用 Docker Compose?

当你的应用需要多个服务(例如 Web 服务器、数据库、缓存)一起运行时,使用 Compose。它简化了开发和测试的编排。

如何在 Docker 中持久化数据?

使用卷或绑定挂载。卷由 Docker 管理并存储在专用区域;绑定挂载链接到主机目录。两者在容器重启后都能保留数据。

准备好简化你的 Docker 工作流程了吗?试试我们的 Nginx 日志分析器,快速调试容器日志。