Docker 构建、运行、网络、拉取全链路优化
# 启用 BuildKit
export DOCKER_BUILDKIT=1
docker build -t myapp .
# daemon.json 全局启用
{
"features": {
"buildkit": true
}
}
# BuildKit 并行构建无依赖的阶段
FROM node:22-alpine AS frontend
WORKDIR /app
COPY frontend/ .
RUN npm ci && npm run build
FROM python:3.13-slim AS backend
WORKDIR /app
COPY backend/ .
RUN pip install -r requirements.txt
# 两个阶段并行构建
FROM nginx:alpine
COPY --from=frontend /app/dist /usr/share/nginx/html
COPY --from=backend /app /app
# docker run 限制
docker run -d \
--memory=512m --memory-swap=1g \
--cpus=1.0 \
--pids-limit=100 \
myapp
# Compose 限制
deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
# 限制日志大小(防止磁盘写满)
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
| 存储驱动 | 适用场景 | 性能 |
|---|---|---|
| overlay2 | Linux 4.x+(推荐默认) | 最优 |
| devicemapper | 旧内核/CentOS 7 | 较差 |
| btrfs/zfs | 特定文件系统 | 取决于配置 |
# 在 daemon.json 中配置 DNS
{
"dns": ["8.8.8.8", "1.1.1.1"]
}
# 绕过 NAT,直接使用宿主机网络栈
docker run -d --network host myapp
# 注意:仅适用于需要极致网络性能的场景
# 牺牲了网络隔离性
# /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
]
}
# 使用 docker buildx 构建多架构镜像
docker buildx create --name mybuilder --use
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest --push .