news 2026/4/21 3:45:47

【Docker使用】从拉取到运行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Docker使用】从拉取到运行

最近我在尝试使用Docker运行LocalAI大模型服务,在这个过程中遇到了不少疑问。通过实践和查阅资料,我总结了一些经验,希望能够帮助大家更好地理解Docker的工作机制。

1. Docker镜像查找流程

当我们执行docker run命令时,Docker会按照以下步骤查找镜像:

  1. 本地查找:首先在本地镜像仓库中查找是否存在指定名称和标签的镜像。
  2. 远程拉取:如果本地没有,Docker会默认从Docker Hub(或配置的其他镜像仓库)拉取镜像。

在本文的例子中,我使用了localai/localai:master-aio-gpu-nvidia-cuda-12这个镜像。由于本地没有,所以Docker开始从远程仓库拉取。

2. 镜像参数配置详解

在运行Docker容器时,我们可以通过参数配置容器的各种行为。下面是我使用的命令及其参数说明:

dockerrun -d\--name localai\# 为容器指定一个名称--gpus all\# 允许容器使用所有GPU资源-p8080:8080\# 端口映射,将宿主机的8080端口映射到容器的8080端口-v D:/local-ai/models:/models\# 卷挂载,将宿主机的D:/local-ai/models目录挂载到容器的/models目录-eTHREADS=6\# 设置环境变量THREADS,控制线程数-eCONTEXT_SIZE=4096\# 设置上下文大小-eGPU_LAYERS=35\# 设置使用GPU的层数-eBATCH_SIZE=512\# 设置批处理大小-eMODEL_FILE=llama-2-7b-chat.Q4_K_M.gguf\# 设置模型文件localai/localai:master-aio-gpu-nvidia-cuda-12# 使用的镜像名

3. 镜像下载过程解析

当我们看到Docker开始下载镜像时,会显示多个层的下载进度。每个层都是镜像的一部分,采用分层存储的方式。

为什么有些层已经存在?

在下载过程中,你可能会注意到有些层显示"Already exists",这通常是因为:

  1. 本地已有相同层:如果你之前拉取过其他镜像,而这些镜像与当前镜像共享某些相同的层,那么这些层就已经存在于本地,无需重新下载。
  2. Docker的层复用机制:Docker镜像由多个只读层组成,不同的镜像可以共享相同的层。例如,很多基于Ubuntu的镜像都会共享相同的Ubuntu基础层。

下载的镜像存储在哪里?

Docker镜像默认存储在宿主机的特定目录中:

  • Linux系统/var/lib/docker
  • Windows系统(WSL2):通常位于WSL2子系统的/var/lib/docker目录中
  • macOS:同样位于Docker虚拟机的/var/lib/docker目录

可以通过以下命令查看Docker的存储位置:

dockerinfo|grep"Docker Root Dir"

4. 删除镜像和容器的影响

删除容器

当删除容器时,只会删除容器层(即可写层),而不会删除镜像层。这意味着:

  • 容器内的数据更改(如果不使用卷挂载)会丢失
  • 镜像本身保持不变

删除镜像

删除镜像会删除该镜像的所有层,但前提是这些层没有被其他镜像共享。如果某个层被多个镜像共享,那么删除其中一个镜像不会删除共享层。

5. 常见问题解答

Q1:为什么Docker镜像要分层存储?

A:分层存储有多个优势:

  • 节省存储空间:多个镜像可以共享相同的层
  • 加快下载速度:如果本地已有某些层,则无需重复下载
  • 提高构建效率:构建镜像时,只需要重新构建发生变化的层

Q2:如何清理不再使用的Docker资源?

A:可以使用以下命令:

# 删除所有停止的容器dockercontainer prune# 删除所有未被使用的镜像dockerimage prune -a# 删除所有未被使用的卷dockervolume prune# 删除所有未被使用的网络dockernetwork prune# 一键清理所有未被使用的资源dockersystem prune -a

Q3:如何查看镜像的层结构?

A:使用docker history命令可以查看镜像的层结构:

dockerhistorylocalai/localai:master-aio-gpu-nvidia-cuda-12

Q4:如何备份和迁移Docker镜像?

A:可以使用docker savedocker load命令:

# 将镜像保存为tar文件dockersave -o localai.tar localai/localai:master-aio-gpu-nvidia-cuda-12# 从tar文件加载镜像dockerload -i localai.tar

6. 总结

通过这次LocalAI的部署实践,我深刻理解了Docker的工作原理。分层存储机制让Docker在镜像管理上变得高效,但也带来了一些复杂性。掌握这些基本概念后,我们就能更好地使用Docker来部署和管理应用。

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

从零开始:Flutter 开发环境搭建全指南

Flutter 是 Google 推出的跨平台 UI 开发框架,可快速构建高性能、跨 iOS 和 Android 的原生应用。本文将详细讲解不同操作系统(Windows/macOS/Linux)下 Flutter 环境的完整搭建流程,涵盖基础配置、IDE 选型、环境验证等核心步骤&a…

作者头像 李华
网站建设 2026/4/20 8:35:07

net企业员工办公设备租赁借用管理系统vue

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/17 15:36:26

python爬虫python泰州市招聘房价数据分析可视化LW PPT

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/17 21:12:32

SpringCloud-04-Circuit Breaker断路器

一、概述1、分布式系统面临的问题??复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。服务雪崩:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服…

作者头像 李华
网站建设 2026/4/20 9:56:43

springboot校园快递存取件系统vue

目录具体实现截图项目介绍论文大纲核心代码部分展示可定制开发之亮点部门介绍结论源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作具体实现截图 本系统(程序源码数据库调试部署讲解)同时还支持Python(flask,django)、…

作者头像 李华
网站建设 2026/4/19 0:39:58

Conda环境迁移困难?改用PyTorch Docker镜像一劳永逸

Conda环境迁移困难?改用PyTorch Docker镜像一劳永逸 在深度学习项目开发中,你是否经历过这样的场景:同事刚提交的代码在自己机器上跑不通,报错信息五花八门——CUDA版本不匹配、cuDNN缺失、torchvision版本冲突……一番折腾后发现…

作者头像 李华