Docker之 - 使用镜像和仓库(一)

简介: 上一篇文章中,我们学习了包括 docker run 在内的许多对容器进行操作的基本指令,那么在本节中,我们主要探讨 Docker 镜像的一些概念,比如什么是镜像,如何对镜像进行管理,如何修改镜像,如何创建、存储、共享自己创建的镜像等,那么就开始我们的学习

什么是Docker镜像

Docker 镜像是由文件系统叠加而成,最底端是一个引导文件系统,也就是bootfs,这很像典型的 Linux/Unix 的引导文件系统。Docker 用户永远不会和引导文件系统有什么交互。实际上,一个容器启动后,它就会被移入内容,而引导文件系统则会被卸载,从而留出更多的空间。(感觉有点像古代的餐馆招待?负责引导顾客进入餐馆,自己的工作就算是完成了)

传统的Linux 引导过程中,root文件系统最先以只读的方式加载,当引导结束后,会切换为读写模式。但是在Docker 中,root文件系统永远只是只读状态,并且使用联合加载的技术一次同时加载多个文件系统。联合加载会将各层系统文件叠加在一起,最终的文件系统包含底层的文件和目录。

联合加载:联合加载指的是一次同时加载多个文件系统,但是外面看起来只有一个文件系统。

Docker 将这样的文件系统成为镜像。一个镜像可以放到另一个镜像的顶部。位于下面的镜像称为父镜像,一次类推,知道镜像栈的最底部,最底部的镜像称为基础镜像。最后,当一个镜像启动容器时,Docker会在镜像的最顶层加载一个文件系统。我们想在 Docker 中运行的程序就是在这个读写层中执行的。

用一幅图来表示一下:


70.jpg

列出 Docker 镜像

我们先从如何列出系统中的 Docker 镜像来开始,可以使用 docker images 命令来实现,如下


71.jpg

可以看到,我们已经获取了一个镜像列表。那么,这些镜像是从哪来的呢?我们执行 docker run 命令时,同时进行了镜像下载

镜像从仓库下载下来。镜像保存在仓库中,而仓库存在于 Registry 中。默认的 Registry 是由 Docker 公司运行的公共 Registry 服务,即 Docker Hub。需要进行ID的注册


72.jpg


Docker Registry 的代码是开源的,你也可以拥有自己的Registry。

在 Docker Hub (或者是你自己运营的 Docker Registry)中,镜像是保存在仓库中的,可以将镜像仓库想象成类似于Git 仓库的东西。它包括镜像、层、以及包括镜像的元数据。

仓库可以包含很多镜像,你可以使用docker pull来拉取仓库中的镜像,如下


73.jpg


Git 拉取代码的指令是 git pull ,这样就很相似了。

再来使用 docker images 看一下现在有哪些镜像

74.jpg


因为我的 Docker Hub 仓库中只有一个 ubuntu 的镜像,所以图中标红的这个镜像是我们刚从 Docker Hub 上下载下来的。

tag 标签

为了区分同一个仓库中的不同镜像,Docker 为我们提供了 tag 这个标签,每个镜像在列出来的时候都带有一个标签,如12.10、 12.04等,这种标签机制使得一个仓库中允许存储多个镜像。

我们可以在仓库后面加一个冒号:标签名 的方式来指定该仓库中的某一个镜像,例如 docker run -t -i --name new_container ubuntu:12.04 /bin/bash



75.jpg


Docker 会自动帮我们切换到 Ubuntu 的环境下,当然,这种方式创建了一个交互式任务。

在构建容器时指定仓库的标签也是一个好习惯,这样便可以准确的指定容器来源于哪里。

Docker Hub

Docker Hub 有两种仓库,一种是用户仓库,一种是顶层仓库。用户仓库是由开发人员自己创建的,顶层仓库是由Docker Hub 内部人员管理。

用户仓库的命名由两部分构成,如 cxuan/ubuntu

  • 用户名 例如 : cxuan
  • 仓库名 例如 : ubuntu

相对的,顶层仓库的命名就比较严谨,如 ubuntu 仓库。顶层仓库由 Docker 公司和选定的优质基础镜像厂商来管理,用户可以基于这些镜像构建自己的镜像。

用户镜像都是由爱好者社区自己提供的,没有经过 Docker 公司的认证,所以需要自己承担相应的风险。

拉取镜像

还记得docker run 的启动过程吗?再来一下这张图回顾一下


76.jpg


其实也可以通过 docker pull 命令先预先拉取镜像到本地,使用 docker pull 命令可以节省从一个新镜像启动一个容器所需要的时间。下面就来领取一下fedora基础镜像( fedora 是 Fedora 优质厂商提供的基础镜像 )


77.jpg


可以使用 docker images 查看新镜像是否拉取到本地,不过我们这次只希望看到 fedora 的镜像,那么你可以使用这个命令: docker images fedora


78.png


可以看到我们已经把 fedora 镜像拉取到了本地

            </div>
目录
相关文章
|
SQL 监控 NoSQL
架构师第一课,一文带你玩转 ruoyi 架构
我理解的架构/框架应该有以下功能: 1.满足日常开发功能,如单点登陆、消息队列、监控等; 2.规范开发者的开发,指定代码格式、注释等; 3.提高开发效率,提供一系列的封装方法,并减少bug的产生率。 下文将详细介绍ruoyi框架。
8500 1
架构师第一课,一文带你玩转 ruoyi 架构
|
域名解析 运维 关系型数据库
3步!完成WordPress博客迁移与重新部署
服务器到期后,该如何迁移、重新部署WordPress博客呢?
3步!完成WordPress博客迁移与重新部署
|
存储 缓存 前端开发
如何优化 SSR 应用以减少服务器压力
优化SSR应用以减少服务器压力,可采用代码分割、缓存策略、数据预加载、服务端性能优化、使用CDN、SSR与SSG结合、限制并发请求、SSR与CSR平滑切换、优化前端资源及利用框架特性等策略。这些方法能有效提升性能和稳定性,同时保证用户体验。
440 4
|
7月前
|
监控 网络协议 Linux
硬件厂商的MIB文档详解 | 如何查询OID? | MIB Browser实战指南-优雅草卓伊凡
硬件厂商的MIB文档详解 | 如何查询OID? | MIB Browser实战指南-优雅草卓伊凡
911 12
硬件厂商的MIB文档详解 | 如何查询OID? | MIB Browser实战指南-优雅草卓伊凡
|
10月前
|
人工智能 API 开发工具
【重磅发布】 免费领取阿里云百炼AI大模型100万Tokens教程出炉,API接口实战操作,DeepSeek-R1满血版即刻体验!
阿里云百炼是一站式大模型开发及应用构建平台,支持开发者和业务人员轻松设计、构建大模型应用。通过简单操作,用户可在5分钟内开发出大模型应用或在几小时内训练专属模型,专注于创新。
3287 89
【重磅发布】 免费领取阿里云百炼AI大模型100万Tokens教程出炉,API接口实战操作,DeepSeek-R1满血版即刻体验!
|
9月前
|
数据可视化 JavaScript 前端开发
低代码神速开发:ToolJet 计算巢部署宝典 🚀
ToolJet 是一款开源低代码开发平台,支持可视化构建 Web 应用,提供多数据源连接、团队协作、灵活部署及自定义插件扩展等功能。基于 AGPL v3 开源协议,社区活跃度高(GitHub 25k+ Stars)。用户可通过计算巢快速部署 ToolJet 社区版。
|
11月前
|
安全 数据安全/隐私保护 Docker
docker私有仓库harbor安装
通过以上步骤,您可以成功在企业内部安装和配置Harbor私有仓库,方便地管理和分发Docker镜像。Harbor不仅提供了基础的镜像管理功能,还增强了安全性、身份管理和审计功能,使其成为企业级容器镜像管理的理想选择。
526 22
|
9月前
|
Ubuntu 安全 Linux
宝塔Linux面板安装教程
这是一篇关于宝塔Linux面板安装教程的文章,支持CentOS/Ubuntu/Deepin/Debian/Fedora系统。文章详细列出了各系统的安装脚本命令,并提供更新升级脚本、安装后操作指南及注意事项。重点包括开放必要端口、解决权限问题、查看安装日志以及推荐的安全设置,如启用登录限制和定期更新面板。若遇问题可参考宝塔官方论坛或寻求技术支持。
771 0
|
机器学习/深度学习 数据采集 传感器
基于深度学习的图像识别技术在自动驾驶中的应用研究####
本文旨在探讨深度学习技术,特别是卷积神经网络(CNN)在自动驾驶车辆图像识别领域的应用与进展。通过分析当前自动驾驶技术面临的挑战,详细介绍了深度学习模型如何提升环境感知能力,重点阐述了数据预处理、网络架构设计、训练策略及优化方法,并展望了未来发展趋势。 ####
460 6
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
3843 2