Docker 已经成为现代软件开发和部署的标配工具。它通过容器化技术,让应用的构建、分发和运行变得标准化和可重复。本文将从零开始,带你掌握 Docker 的核心概念和实战技巧。
什么是 Docker
Docker 是一个开源的容器化平台,它让开发者可以将应用及其依赖打包到一个轻量级、可移植的容器中。容器与虚拟机不同,它共享宿主机的内核,因此启动速度快、资源占用少。
"Build once, run anywhere" — 一次构建,随处运行。这是 Docker 的核心理念。
安装 Docker
在 macOS 和 Windows 上,推荐使用 Docker Desktop。Linux 用户可以通过包管理器安装:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
docker --version
docker run hello-world
编写 Dockerfile
Dockerfile 是构建 Docker 镜像的蓝图。以下是一个 Node.js 应用的 Dockerfile 示例:
# 使用官方 Node.js 镜像作为基础
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY package*.json ./
RUN npm ci --only=production
# 复制应用代码
COPY . .
# 暴露端口
EXPOSE 3000
# 启动应用
CMD ["node", "server.js"]
Docker Compose
当你的应用由多个服务组成时(如 Web 服务 + 数据库 + 缓存),Docker Compose 可以帮你统一编排:
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
- redis
db:
image: postgres:15
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
pgdata:
常用命令
docker build -t myapp .— 构建镜像docker run -p 3000:3000 myapp— 运行容器docker-compose up -d— 启动所有服务docker-compose down— 停止并移除所有容器docker logs -f container_name— 查看实时日志
最佳实践
- 使用多阶段构建(multi-stage build)减小镜像体积
- 使用 .dockerignore 排除不必要的文件
- 尽量使用 alpine 基础镜像
- 不要在镜像中存储敏感信息,使用环境变量或 secrets
- 合理利用构建缓存,将不常变化的层放在前面
总结
Docker 容器化是现代开发者的必备技能。从本地开发到生产部署,Docker 提供了一致、可靠的运行环境。掌握了本文的内容,你已经具备了在实际项目中使用 Docker 的基础能力。