news 2026/7/14 17:27:32

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【云原生|Docker系列3】Docker镜像构建与实战:从拉取到自定义

1. Docker镜像基础:从拉取到运行

第一次接触Docker镜像时,我把它理解成一个"软件安装包"——但这个安装包有点特殊,它不仅包含软件本身,还把运行环境也打包进去了。比如你想运行一个MySQL服务,传统方式需要先安装操作系统、配置依赖库、设置配置文件,而用Docker只需要一条命令:docker pull mysql

拉取镜像的完整过程是这样的:当你在终端输入docker pull ubuntu:22.04时:

  1. Docker客户端会先检查本地是否有该镜像
  2. 如果没有,会默认从Docker Hub(相当于应用商店)下载
  3. 下载过程中会显示分层下载的进度条
  4. 最后将各层组合成完整的镜像

我常用这个命令查看镜像详情:

docker inspect ubuntu:22.04

输出结果会显示镜像的创建时间、环境变量、启动命令等元数据,这对排查问题特别有用。

2. 镜像加速与配置技巧

在国内直接拉取镜像可能会很慢,就像我最初用时经常遇到超时问题。后来发现配置镜像加速器能极大改善体验,这里分享我的配置方法:

  1. 创建或修改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
  1. 重启服务生效:
sudo systemctl daemon-reload sudo systemctl restart docker

验证加速是否生效可以执行:

docker info | grep Mirrors

如果看到配置的镜像地址,说明加速成功。我实测下来,下载速度从原来的几十KB/s提升到了10MB/s以上。

3. 构建自定义镜像实战

去年我负责将一个Python数据分析项目容器化,这个经历让我深刻理解了Dockerfile的重要性。下面通过一个Flask应用的例子,详解构建过程:

  1. 首先准备项目结构:
/flask-demo ├── app.py ├── requirements.txt └── Dockerfile
  1. 编写app.py:
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, Docker!"
  1. 关键步骤是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"]
  1. 构建镜像:
docker build -t flask-demo:v1 .

构建优化技巧

  • 把变化频率低的指令放前面(如安装依赖)
  • 使用.dockerignore排除不需要的文件
  • 多阶段构建可以减小镜像体积

4. 镜像管理与安全实践

随着使用深入,我发现镜像管理是个技术活。有一次测试环境磁盘突然满了,排查发现是积累了上百个无用镜像。现在我的管理策略是:

  1. 定期清理无用镜像:
# 删除所有悬空镜像 docker image prune # 删除指定镜像 docker rmi flask-demo:v1
  1. 给镜像打标签推送到私有仓库:
docker tag flask-demo:v1 my-registry.com/flask-demo:v1 docker push my-registry.com/flask-demo:v1
  1. 安全扫描(使用Trivy工具):
docker scan flask-demo:v1

镜像分层原理特别有意思:每个Dockerfile指令都会创建一个新层。通过docker history命令可以看到:

docker history flask-demo:v1

输出会显示各层大小和创建它的指令,这正是Docker高效利用存储的关键。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 17:27:15

Navicat for Mac完整破解指南:三合一方案实现永久试用

Navicat for Mac完整破解指南&#xff1a;三合一方案实现永久试用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还在为Navi…

作者头像 李华
网站建设 2026/7/14 17:26:53

智能养殖大棚物联网系统UML建模实战:从用例图到状态图的完整设计流程

1. 智能养殖大棚物联网系统需求分析在开始UML建模之前&#xff0c;我们需要先明确系统的功能需求。智能养殖大棚物联网系统主要解决传统养殖中人工监测效率低、响应不及时的问题。系统硬件由搭载树莓派的巡检机器人、各类环境传感器和摄像头组成&#xff0c;软件部分则需要实现…

作者头像 李华
网站建设 2026/7/14 17:25:00

医疗AI幻觉问题解析:错误类型、评估工具与预防方法

这次我们来看一个很有意思的话题&#xff1a;AI医生答错了&#xff0c;但错在哪里&#xff1f;这涉及到医疗AI领域一个关键问题——AI幻觉&#xff08;AI Hallucination&#xff09;。阿里达摩院在医疗AI领域有不少投入&#xff0c;但即便是先进的AI模型&#xff0c;在医疗诊断…

作者头像 李华
网站建设 2026/7/14 17:23:40

别踩2026挑选会议纪要工具的误区,过来人整理的实操选购经验

先回答用户真正关心的问题 2026挑选会议纪要工具&#xff0c;最常见的误区是跟风追网红工具&#xff0c;为用不上的全功能付费&#xff0c;最后反而花更多时间改纪要。我作为长期测试AI效率工具的运营博主&#xff0c;亲测了目前主流的五款会议纪要工具&#xff0c;整理了可复…

作者头像 李华
网站建设 2026/7/14 17:20:38

从源码到服务:在Linux上深度定制PostgreSQL 12.4的编译安装与安全配置

1. 为什么选择源码编译安装PostgreSQL&#xff1f; 很多运维工程师习惯直接使用yum或apt安装PostgreSQL&#xff0c;但源码编译安装能带来三个关键优势&#xff1a; 深度定制 、 性能优化 和 安全增强 。以PostgreSQL 12.4为例&#xff0c;通过源码编译可以精确控制功能模…

作者头像 李华
网站建设 2026/7/14 17:20:18

OpenClaw框架下AI角色构建与SOUL.md文件实战指南

1. OpenClaw与AI角色构建概述OpenClaw作为新一代AI开发框架&#xff0c;其核心设计理念是将传统AI助手从"功能执行者"升级为"人格化角色"。这个转变的关键在于SOUL.md文件的运用——它不再是一堆冰冷的能力描述&#xff0c;而是让AI拥有独特声音、态度和性…

作者头像 李华