开发者的Docker:从零到工作容器

Docker是软件开发中使用最广泛的容器化工具。以下是从零知识到工作开发环境的实用指南。

Docker实际上解决什么

经典的开发者问题:”在我的机器上可以运行。”Docker通过将应用程序及其整个环境(操作系统库、运行时、依赖项、配置)打包成容器来解决这个问题,该容器在任何安装了Docker的机器上运行都完全相同。对于开发:你的本地环境与生产环境匹配。对于部署:相同的容器镜像在CI、预演和生产中运行。对于入职:新开发者运行一个命令而非20步设置文档。

核心概念

镜像:从Dockerfile构建的文件系统和运行时环境的快照。容器:镜像的运行实例——你可以从同一镜像运行许多容器。Dockerfile:构建镜像的指令脚本(FROM、RUN、COPY、EXPOSE、CMD)。注册表:镜像的存储库——Docker Hub是公共注册表,私有注册表存在于企业使用。卷:在容器重启后仍然存在的持久存储。网络:容器如何与彼此和外部世界通信。

一个工作示例

简单的Node.js应用Dockerfile:

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

构建:docker build -t my-app .
运行:docker run -p 3000:3000 my-app
-p 3000:3000将你机器上的3000端口映射到容器中的3000端口。应用程序现在可以在localhost:3000访问。

多服务应用程序的Docker Compose

大多数应用程序有多个服务(网络应用、数据库、缓存)。Docker Compose让你一起定义和运行它们。最小的docker-compose.yml:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: password
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

运行全部:docker compose up。停止全部:docker compose down。数据库数据跨重启保留在pgdata卷中。

常见开发模式

实时重载的卷挂载:docker run -v $(pwd):/app my-app将你的本地目录挂载到容器中——代码更改无需重建即可反映。环境变量:使用--env-file .env将本地变量传递给容器。多阶段构建:在一个镜像(node、python)中构建并将结果复制到更小的运行时镜像中以减少生产镜像大小。Docker Desktop(Mac/Windows)提供开发期间管理容器和镜像的图形界面。

上一篇 Docker for Developers: From Zero to Working Container
下一篇 TypeScript in 2026: Why It Won and What You Still Need to Learn