Docker用了有一阵了,有些东西当时查了好久才搞明白,这里汇总一下。
问题背景
上个月要把一个 Flask 项目容器化,Dockerfile 写完 build 完 1.2G,push 到私服半天。后来用多阶段构建 + slim 基础镜像,压缩到 89MB,部署时间从 5 分钟缩到 30 秒。
先确认环境没问题
# Ubuntu/Debian
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# 验证
docker --version
docker run hello-world排查过程
按这个顺序排查,大部分问题都能定位:
- 第1步:docker build 的时候加上 --no-cache 能避免缓存导致的诡异问题
- 第2步:别用 latest 标签,出问题你都不知道是哪个版本
- 第3步:docker system prune -a 清理空间很好用,但注意别把有用的镜像删了
- 第4步:多阶段构建能大幅减小镜像体积,从 800MB 压到 100MB 以内不是梦
修复后的代码
# Dockerfile 示例
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]常见问题
docker build 特别慢怎么办?
几个思路:1) 换国内镜像源;2) .dockerignore 排除 node_modules 等;3) 合理利用缓存层,把不常变的放前面;4) 考虑用 BuildKit(DOCKER_BUILDKIT=1)
容器里时区不对怎么改?
最简单的方法:Dockerfile 里加 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,或者启动时 -e TZ=Asia/Shanghai
容器重启后数据丢了?
没挂 volume 呗。用 -v /host/path:/container/path 或者 named volume。数据库这类有状态的必须挂卷,别偷懒。
以上就是我这段时间用 Docker 的总结,欢迎交流。
0 条评论 欢迎参与讨论