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

DevOps2026-10-09TryQuickToolBox

你可能听说过Docker和容器,但也许不确定它们如何融入你的日常开发工作流。或者你尝试过Docker,但镜像、容器和Compose的概念让你感到困惑。本指南将通过实际示例带你了解基础知识,让你能够在项目中高效使用Docker。

什么是Docker镜像和容器?

把Docker镜像想象成应用程序的蓝图。它包含运行代码所需的一切:操作系统、运行时、库和应用程序文件。镜像是不可变的,由Dockerfile构建而成。

容器是镜像的运行实例。当你启动容器时,Docker会从镜像创建一个隔离环境。你可以从同一个镜像运行多个容器,每个容器都有自己的状态。

关键区别

镜像 容器
只读模板 可运行实例
由Dockerfile构建 从镜像创建
存储在注册表中 在主机上运行
不可变 临时性(可停止、启动、删除)

构建你的第一个Docker镜像

让我们创建一个简单的Node.js应用并将其容器化。在项目根目录创建一个Dockerfile:

# 使用官方Node.js运行时作为父镜像
FROM node:18-alpine

# 设置工作目录
WORKDIR /app

# 复制package.json和package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm ci --only=production

# 复制其余应用代码
COPY . .

# 暴露应用运行的端口
EXPOSE 3000

# 定义运行应用的命令
CMD ["node", "server.js"]

使用以下命令构建镜像:

docker build -t my-node-app .

从镜像运行容器:

docker run -p 3000:3000 -d my-node-app

你的应用现在可以通过http://localhost:3000访问。

管理容器

以下是管理容器的一些基本命令:

使用Docker Compose简化多容器应用

真实应用通常需要多个服务:Web服务器、数据库、缓存等。使用单独的docker run命令管理这些服务很繁琐。Docker Compose允许你使用YAML文件定义和运行多容器应用。

创建一个docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

使用以下命令启动所有服务:

docker compose up -d

使用以下命令停止并删除它们:

docker compose down

开发最佳实践

常见问题

镜像和容器有什么区别?

镜像是定义应用程序及其依赖的只读模板。容器是镜像的运行实例,上面有一个可写层。

我可以在生产环境中使用Docker Compose吗?

Docker Compose主要设计用于开发和测试。对于生产环境,请考虑使用Kubernetes或Docker Swarm等编排工具。

如何在Docker中持久化数据?

使用卷或绑定挂载。卷由Docker管理,是持久化容器生成数据的首选方式。

准备好容器化你的应用了吗?如果你需要将文档或指南转换为PDF供团队使用,试试我们的Word转PDF转换器来分享精美的文档。