【云原生|Docker系列3】Docker镜像构建与实战:从拉取到自定义

📅 发布时间:2026/7/14 17:27:42
【云原生|Docker系列3】Docker镜像构建与实战:从拉取到自定义 1. Docker镜像基础从拉取到运行第一次接触Docker镜像时我把它理解成一个软件安装包——但这个安装包有点特殊它不仅包含软件本身还把运行环境也打包进去了。比如你想运行一个MySQL服务传统方式需要先安装操作系统、配置依赖库、设置配置文件而用Docker只需要一条命令docker pull mysql。拉取镜像的完整过程是这样的当你在终端输入docker pull ubuntu:22.04时Docker客户端会先检查本地是否有该镜像如果没有会默认从Docker Hub相当于应用商店下载下载过程中会显示分层下载的进度条最后将各层组合成完整的镜像我常用这个命令查看镜像详情docker inspect ubuntu:22.04输出结果会显示镜像的创建时间、环境变量、启动命令等元数据这对排查问题特别有用。2. 镜像加速与配置技巧在国内直接拉取镜像可能会很慢就像我最初用时经常遇到超时问题。后来发现配置镜像加速器能极大改善体验这里分享我的配置方法创建或修改daemon.json文件sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://registry.docker-cn.com, https://docker.mirrors.ustc.edu.cn ] } EOF重启服务生效sudo systemctl daemon-reload sudo systemctl restart docker验证加速是否生效可以执行docker info | grep Mirrors如果看到配置的镜像地址说明加速成功。我实测下来下载速度从原来的几十KB/s提升到了10MB/s以上。3. 构建自定义镜像实战去年我负责将一个Python数据分析项目容器化这个经历让我深刻理解了Dockerfile的重要性。下面通过一个Flask应用的例子详解构建过程首先准备项目结构/flask-demo ├── app.py ├── requirements.txt └── Dockerfile编写app.pyfrom flask import Flask app Flask(__name__) app.route(/) def hello(): return Hello, Docker!关键步骤是Dockerfile# 使用官方Python镜像作为基础 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 先复制依赖文件这层可以缓存 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 再复制应用代码 COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD [gunicorn, --bind, 0.0.0.0:5000, app:app]构建镜像docker build -t flask-demo:v1 .构建优化技巧把变化频率低的指令放前面如安装依赖使用.dockerignore排除不需要的文件多阶段构建可以减小镜像体积4. 镜像管理与安全实践随着使用深入我发现镜像管理是个技术活。有一次测试环境磁盘突然满了排查发现是积累了上百个无用镜像。现在我的管理策略是定期清理无用镜像# 删除所有悬空镜像 docker image prune # 删除指定镜像 docker rmi flask-demo:v1给镜像打标签推送到私有仓库docker tag flask-demo:v1 my-registry.com/flask-demo:v1 docker push my-registry.com/flask-demo:v1安全扫描使用Trivy工具docker scan flask-demo:v1镜像分层原理特别有意思每个Dockerfile指令都会创建一个新层。通过docker history命令可以看到docker history flask-demo:v1输出会显示各层大小和创建它的指令这正是Docker高效利用存储的关键。