Docker镜像,什么是Docker镜像,Docker基本常用命令

docker镜像

1.1什么是镜像,镜像基础

1.1.1 镜像的简介

       镜像是一种轻量级,可执行的独立软件包,也可以说是一个精简的操作系统。镜像中包含应用软件及应用软件的运行环境,具体来说镜像包含运行某个软件所需的所有内容,包括代码,库,环境变量和配置文件等。几乎所有的应用,直接打包为Docker镜像后就可以运行。
       由于镜像运行时是容器,容器的设计初衷就是快熟和小巧,所以镜像通常都比较小,镜像中不包含内核,其共享宿主机的内核:镜像中只包含简单的shell,或者没有shell

1.1.2 镜像的仓库分类

       镜像中心中存储着大量的镜像image Repository,每个镜像仓库中包含着大量相关镜像。根据这些镜像发布者的不同,形成了四类不同的镜像仓库。
       第一类:Docker Official Image
这些是由Docker公司官方维护和支持的镜像。通常,它们提供了一系列广泛使用的基础设施组件,比如操作系统(Ubuntu、Alpine)、数据库(MySQL、Postgres)、中间件(Node.js、Python)等。这些镜像遵循最佳实践,通常被认为是使用这些软件的最安全和最稳定的方式。
       第二类:VerifiedPublisher
这些是由第三方组织或个人发布的镜像,但已经通过了Docker的验证过程。验证发布者意味着这些实体已经证明了它们是实际软件的合法发布者,从而提供了一定程度的信任和安全性。
       第三类:Sponsored OSS(Sponsored Open Source Software)
       这类仓库包含开源软件的镜像,这些软件得到了某些组织的赞助。这种类型的仓库可能会提供一些特定的优势,比如额外的维护或支持,这些都是因为有赞助商的参与。
       第四类:无认证仓库
       这些是由社区成员发布的镜像,没有经过Docker官方的任何形式的验证。虽然这类仓库可以包含大量有用和高质量的镜像,但它们也可能包含未经测试或不安全的软件,因此在使用这类镜像时需要额外小心。

1.3 docker镜像的特点

       Docker镜像都是只读的,当容器启动时,一个新的可写的镜像被加载到镜像层的顶部,这一层通常被叫做容器层,容器层之下的都叫镜像层。

1.4 为什么下载的tomcat镜像很大

1.搜索仓库,docker search tomcat
Docker镜像,什么事Docker镜像,Docker基本常用命令
2. 下载镜像 docker pull tomcat
Docker镜像,什么事Docker镜像,Docker基本常用命令
Docker镜像,什么事Docker镜像,Docker基本常用命令

docker run了啥

Docker镜像,什么事Docker镜像,Docker基本常用命令docker run 是 Docker 的一个核心命令,用于创建一个新的容器实例并运行一个命令。这个命令非常强大,因为它集创建和启动容器于一体,拥有许多可配置的选项,可以满足不同的使用场景。

3.5.1当你运行 docker run 命令时,大致发生了以下事情:

  1. 拉取镜像(如果本地不存在):如果你指定运行的镜像在本地不存在,Docker 会从配置的镜像仓库(默认是 Docker Hub)中拉取这个镜像。
  2. 创建一个新的容器:基于指定的镜像创建一个新的容器实例。这个过程包括分配文件系统、网络接口和设置初始化配置等。
  3. 分配一个文件系统:容器会被赋予其独立的文件系统,该文件系统的根目录是从镜像提供的文件层中创建的。
  4. 网络配置:根据Docker的网络配置(如桥接、主机、容器或无网络),为容器分配网络设置。
  5. 设置执行环境:根据Dockerfile中的指令或者docker run命令的选项(如环境变量、卷挂载、端口映射等),为容器设置运行时环境。
  6. 执行命令:容器启动后,它会执行Dockerfile中指定的CMD命令,或者docker run命令行中指定的命令。
  7. 运行状态:如果命令持续运行(如Web服务器),容器将保持运行状态;如果命令快速完成(如运行一个批处理任务),容器运行命令后将停止。

2.1 镜像命令

2.1.1 docker images 列表本机上的镜像

docker images命令用于列出本地主机上的所有Docker镜像。这个命令会显示镜像的仓库名(repository)标签(tag)镜像ID创建时间以及大小等信息。它是Docker日常使用中的基础命令之一,帮助用户了解当前可用的镜像资源。
用法:docker images
选项:

  • -a--all:显示所有镜像(默认隐藏的中间镜像层也会显示)。
  • --digests:显示镜像的摘要信息。
  • -f--filter:基于给定条件显示镜像。
  • --format:使用给定的Go模板格式化命令的输出。
  • --no-trunc:显示完整的镜像信息,不截断输出。
  • -q--quiet:仅显示镜像的ID
    常用示例:
    1.列出所有镜像,包括中间层镜像:docker images -a
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  1. 按照特定模式过滤镜像:docker images --filter=reference='nginx:*',这讲仅列出仓库名为nginx的镜像
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  2. 显示摘要信息:docker images --digests
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  3. 格式化输出:docker images --format 'table {{.Repository}}\t{{.Tag}}',以表格形式仅显示镜像的仓库名和标签:
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  4. 显示镜像ID (静默模式):docker image -q,这会仅列出所有镜像的ID,非常适合配合其他命令使用。
    Docker镜像,什么事Docker镜像,Docker基本常用命令

2.1.2 docker seach 镜像搜索命令

docker search 命令用于在Docker Hub上搜索镜像。这个命令允许用户查找和筛选公共镜像库中的镜像,便于用户发现和使用各种可用的Docker镜像。使用此命令,你可以基于关键字进行搜索,并通过不同的选项来细化搜索结果。
用法:docker search [OPTIONS] TERM
选项:

  • --filter-f:基于给定条件过滤搜索结果。
  • --format:使用Go模板格式化命令的输出。
  • --limit:限制返回的搜索结果数量。
  • --no-trunc:显示完整的镜像描述,不截断输出。

常用示例:

  1. 搜索Docker Hub以找到名称中包含nginx的镜像:docker search nginx
    Docker镜像,什么事Docker镜像,Docker基本常用命令
    这将列出Docker Hub上所有与nginx相关的公共镜像。
  2. 使用过滤器,列出官方(official)的镜像:docker search --filter=is-official=true nginx
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  3. 限制搜索结果的数量:docker search --limit=5 nginx
    Docker镜像,什么事Docker镜像,Docker基本常用命令
    这将只显示搜索结果中的前5个
  4. 显示完整的描述,默认情况下docker search可能会阶段镜像描述,使用docker search --no-trunc nginx 选项可以看到完整的描述
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  5. 格式化输出:docker search --format "{{.Name}}: {{.Description}}" nginx使用--format选项,你可以定制输出的格式。例如,如果你只想看到镜像名称和描述:
    Docker镜像,什么事Docker镜像,Docker基本常用命令
    小提示:
    在使用docker search时,考虑搜索结果的星标数(STARS)和是否为官方(OFFICIAL)镜像,这可以帮助你选择更受社区信任和更有保障的镜像。
    请注意,由于Docker Hub以外还有其他的Docker注册中心(如Google Container Registry, Quay.io等)docker search命令默认只在Docker Hub中搜索。
    docker search是一个实用的命令,能帮助你快速发现和评估可用的Docker镜像。通过有效地使用其提供的选项,你可以更精确地找到所需的镜像。

2.1.3 docker pull 镜像下载命令

        docker pull 命令用于从注册中心下载(拉取)一个镜像或仓库的镜像到本地。这是Docker操作中最常见的命令之一,允许用户从Docker Hub或其他Docker注册中心获取镜像。
用法:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
选项:

  • [OPTIONS] 是可选参数。
  • NAME 是镜像的名称。
  • TAG 是可选的,指定要拉取的镜像的版本标签,默认是 latest
  • @DIGEST 是可选的,指定要拉取的镜像的精确内容地址。
    常用示例:
  1. 拉取最想念版本的镜像:docker pull nginx
  2. 拉取特定版本的镜像:docker pull nginx:1.17
  3. 使用内容摘要拉取镜像:如果你知道镜像的摘要(Digest),也可以使用它来精确拉取特定的镜像,摘要通常是一个SHA256散列值,确保了拉取的镜像内容的一致性喝完整性,如docker pull nginx@sha256:25a0d4...
    注意事项:
            当使用docker pull 命令时,默认从Docker Hub拉取镜像,如果需要从其他Docker注册中心拉取镜像,需要在镜像名钱指定注册中心的地址,如docker pull myregistry.local:5000/myimage:mytag拉取镜像需要网络连接到注册中心,确保你的网络链接正常,并且在有必要时配置适当的网络代理。
            对于大型镜像拉取操作可能会耗时较长,具体时间取决于你的网络速度和镜像大小,docker pull是管理Docker镜像基础,理解并熟练使用这个命令对于有效的利用Docker很重要。

2.1.4 docker rmi 镜像删除命令

docker rmi 命令用于删除一个或多个本地的Docker镜像。当你需要清理不再需要的镜像或释放磁盘空间时,这个命令非常有用。使用此命令时,可以通过镜像的ID标签(tag)或摘要(digest)来指定要删除的镜像。
用法:
docker rmi [OPTIONS] IMAGE [IMAGE...]

  • [OPTIONS] 是可选参数。
  • IMAGE 是要删除的镜像的ID标签摘要。你可以同时指定多个镜像以用空格分隔。
    选项:
  • --force, -f:强制删除,即使有容器正在使用这个镜像。
  • --no-prune:不移除该镜像的未带标签的父镜像。
    使用实例:
  1. 删除多个镜像,通过指定镜像的标签删除镜像:docker rmi nginx:latest
  2. 删除多个镜像,通过指定镜像的ID删除镜像:docker rmi a24bb4013296
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  3. 同时删除多个镜像:你可以一次性删除多个镜像,只需将他们的标签或ID以空格分隔docker rmi nginx:latest ubuntu:latest
  4. 强制删除镜像:如果一个镜像被一个或多个容器使用,正常情况下不能删除它,使用-f或者--force选项可以强制删除docker rmi -f a24bb4013296
  5. 删除多个未被标记的镜像,未被标记的镜像既没有标签的镜像,通常是构建过程中的中间层镜像,你可以使用docker rmi $(docker images -f "danling-true" -q)命令查找并删除这些镜像。

注意

  • 删除正在使用的镜像可能会导致依赖于这个镜像的容器无法正常工作。
  • 在删除镜像前,确保没有任何容器正在使用它,除非你使用--force选项。
  • 删除镜像后,占用的磁盘空间会被释放。然而,如果其他镜像依赖于被删除镜像的层,这些共享的层不会被删除。
  • 如果你的目标是释放磁盘空间,请考虑使用docker system prune命令,它可以删除未使用的镜像、容器、网络和卷。

2.1.5 docker run创建一个新的容器并运行一个命令

docker run 命令用于创建一个新的容器并运行一个命令。这是 Docker 中最常用的命令之一,因为它结合了容器的创建和启动过程。通过 docker run,你可以基于指定的镜像启动一个或多个独立的容器环境,运行应用程序或服务。
用法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • [OPTIONS] 是可选参数,用于指定容器的配置,如端口映射、卷挂载、环境变量等。
  • IMAGE 是用于创建容器的镜像名称或ID
  • [COMMAND] 是可选的,用于指定在容器内部启动时执行的命令。
  • [ARG...] 是传递给命令的参数列表。
    选项:
  • --name:为容器指定一个名称。
  • -d, --detach:以后台模式运行容器。
  • -p, --publish:发布容器的一个或多个端口到宿主机上。
  • -v, --volume:挂载一个或多个卷。
  • --rm:容器退出时自动清理容器文件系统。
  • -e, --env:设置环境变量。
  • --network:连接容器到指定的网络。
  • --restart:设置容器的重启策略。
    使用示例:
  1. 运行一个简单的容器,以交互模式运行ubuntu镜像,并启动一个Bash终端:docker run -it ubuntu /bin/bash
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  2. 以后台模式运行容器,启动一个名为munginx的nginx容器,并在后台运行:docker run --name mynginx -d nginx
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  3. 映射端口,将容器的80端口映射到宿主机的8081端口:docker run -p 8080:80 nginx
    Docker镜像,什么事Docker镜像,Docker基本常用命令
    Docker镜像,什么事Docker镜像,Docker基本常用命令
  4. 挂载卷,宿主机的/my/data目录挂载到容器的/data目录 docker run -v /my/data:/data ubuntu
    Docker镜像,什么是Docker镜像,Docker基本常用命令
  5. 设置环境便令,使用-e选项设置容器内的环境变量docker run -e MY_ENV_VAR=value ubuntu
    6.自动清理容器,使用--rm选项,在容器退出时自动删除它docker run --rm unbuntu
    Docker镜像,什么是Docker镜像,Docker基本常用命令
    注意事项
  • 使用 -d 选项运行容器时,容器会在后台执行,你可以通过 docker logs 命令查看容器的输出。
  • 当你通过 docker run 启动容器时,如果本地不存在指定的镜像,Docker 会尝试从远程仓库拉取这个镜像。
  • --name 选项可以帮助你更容易地管理容器,但容器名称必须在 Docker 宿主机上唯一。
  • 理解并正确使用端口映射和卷挂载对于容器化应用的网络访问和数据持久化至关重要。

2.3 镜像分层

2.3.1 什么是分层

        docker镜像由一些松耦合的只读镜像组成,Docker Daemon负责堆叠这些镜像,并将他们关联为一个统一的整体,即对外表现出的一个独立的对象。
        通过docker pull命令拉取指定的镜像时,每个pull complete结尾的行就代表下载完毕了一个镜像层。
Docker镜像,什么是Docker镜像,Docker基本常用命令
Docker镜像,什么是Docker镜像,Docker基本常用命令

2.3.2 为什么分层

采用这种分层结构的优势很多,例如,每个分层都是只读的,所有对分层的修改都是以新分层的形式出现,并不会破原分层内容,再如每个分层值记录变更内容,所以有利于节省存储空间等。
不过,分层结构的最大的好处是,在不同镜像间实现资源共享,即不同镜像对相同下层镜像的复用。对于docker pull命令,其在拉取之前会先获取到其要拉区镜像的所有ImageID,然后再本地查找是否存在这些分层,如果存在,则不再进行拉取,而是共享本地的该分层。大大节省了存储空间和网络贷款,提升了拉取效率。

2.3.3 镜像层构成

每个镜像层由两个部分构成,镜像文件系统与镜像JSON文件,这两部分具有相同的imageID
镜像文件系统就是对镜像占有的磁盘空间进行管理的文件系统,拥有该镜像所有镜像层的数据内容,而镜像JSON文件则是用于描述镜像相关属性的集合,通过docker inspect[镜像]就可以直观看到

2.3.4镜像FS构成

一个docker镜像的文件系统FS由多层只读的镜像层构成,每层都完成了特定的功能。而这些只读镜像层根据其位置与功能的不通可分为两类:基础镜像层和扩展镜像成

2.3.4.1基础镜像成

所有镜像的最下层都具有一个可以看得到的基础镜像层Base Image,基础镜像层的问价那系统成为跟文件系统rootfs,而rootfs则是建立在linux系统中”看不到的“引导文件系统bootfs之上。

2.3.4.2扩展镜像成

在基础镜像层之上的镜像成为扩展镜像层,顾名思义就是对镜像层的功能扩展。在dockerfile中,每条指令都是用于完成某项特定共能得,而每条指令都会生成一个扩展镜像层。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次逻辑漏洞拿下目标站点

开局某平台登录框 可做尝试手法 1、弱口令 2、万能密码 3、复杂密码逻辑绕过 4、登录框逻辑绕过 5、登录框注入 正文 某通用平台,系xxx科技公司开发全套模板通用系统,演示站踩点弱口令,这里主要梳理踩点思路 1、某接口未授权访问读系统用户…

前端Vue自定义勾选协议组件的开发与应用

摘要: 随着前端技术的不断发展,用户体验成为了软件开发中的关键要素。在登录、注册等场景中,勾选协议是常见的需求。本文旨在介绍一款基于 Vue.js 的自定义勾选协议组件的开发与应用,该组件适用于多种场景,并且具备良…

无代理备份ESXi虚拟机

目前,虚拟机主要采用映像级备份方式,因为这样才能保证虚拟机数据的完整性,尤其是对于像VMware ESXi这样的一类虚拟机管理程序上的虚拟机。除此之外,还有一种文件级备份方法,允许颗粒备份和还原。我们区分这两种备份方法…

基于springboot实现课程答疑管理系统项目【项目源码+论文说明】

基于springboot实现课程答疑管理系统演示 摘要 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个专门适应师生交流形式的网站。本文介绍了课程答疑系统的开发全过程。通过分析企业对于课程答疑系统的需求,创建了…

vue控制台报错Duplicate keys detected: ‘xxxxx‘. This may cause an update error.解决方案

截图报错: 错误分析: 1、提示 Duplicate keys detected ,翻译为:检测到重复的密钥 2、检查 v-for 代码,具体如下: 发现问题:v-for中的key是一个相同的值 解决问题 因此处使用的是测试数据&…

论如何在小程序展示超链接在线网页

在工作中遇到一个需求&#xff0c;就是在小程序中展示超链接网页&#xff0c;起初我是直接使用web-view标签 <web-view src"https://www.baidu.com/"/>但是web-view只能在开发阶段手机上展示&#xff0c;一旦小程序发布线上&#xff0c;就会出现下面这种情况“…

Spectre漏洞 v2 版本再现,影响英特尔 CPU + Linux 组合设备

近日&#xff0c;网络安全研究人员披露了针对英特尔系统上 Linux 内核的首个原生 Spectre v2 漏洞&#xff0c;该漏洞是2018 年曝出的严重处理器“幽灵”&#xff08;Spectre&#xff09;漏洞 v2 衍生版本&#xff0c;利用该漏洞可以从内存中读取敏感数据&#xff0c;主要影响英…

html中的“居中”问题详解(超全)

html中的“居中”问题详解&#xff08;超全&#xff09; 图片居中文本居中定位居中元素居中响应式设计中的居中技巧 引言&#xff1a; 在网页设计和开发中&#xff0c;实现元素的居中是一个常见但也常被低估的挑战。无论是在传统的网页布局中还是在响应式设计中&#xff0c;居中…

实习记录小程序|基于SSM的实习记录小程序设计与实现(源码+数据库+文档)

知识管理 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕…

【强化学习实践】Gym+倒立单摆+创建自己的环境

一、Gym Gym是OpenAI开发的一个强化学习算法测试环境集合包。Gym提供了多种标准的环境&#xff0c;包括经典的游戏&#xff08;如Atari游戏&#xff09;、机器人模拟任务以及其他各种类型的问题&#xff0c;供开发者测试和训练强化学习智能体。在Gym环境中&#xff0c;开发者可…

智能工厂总体规划与实施指南

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 新书《智能物流系统构成与技术实践》人俱乐部 整版PPT和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 在制造业的智能…

Unity面经(自整)——移动开发与Shader

Unity与Android混合开发 为什么使用Flutter构建 Flutter 是 Google 的开源工具包&#xff0c;用于从单个代码库为移动、Web、桌面和嵌入式设备构建应用程序&#xff08;一套代码跨平台构建app是它最大的优点&#xff09;&#xff0c;并且可以构建高性能、稳定和丰富UI的应用程…

【数据库】GROUP BY 详解、示例、注意事项

一、基本介绍 GROUP BY 语句在 SQL 中用于将来自数据库表的记录分组&#xff0c;以便可以对每个组执行聚合函数&#xff08;如 COUNT(), MAX(), MIN(), SUM(), AVG() 等&#xff09;。使用 GROUP BY 时&#xff0c;数据库会根据一个或多个列的值将结果集分为多个分组&#xff…

基于springboot实现桂林旅游景点导游平台管理系统【项目源码+论文说明】计算机毕业设计

基于springboot实现桂林旅游景点导游平台管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了桂林旅游景点导游平台的开发全过程。通过分析桂林旅游景点导游平台管理的不足&#xff0c;创建了一个计算…

【实战JVM】打破双亲委派机制之自定义类加载器

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

线程池总结

一&#xff0c;线程池的参数介绍&#xff1a; 通过上图可知&#xff1a;ThreadPoolExecutor有7个参数 corePoolSize&#xff1a;核心线程数 举个简单的例子&#xff1a;一个奶茶店老板&#xff0c;在生意正火爆的时候发现正式员工人手不够了&#xff0c;于是他就想了个办法&a…

想走?可以!先买票--迭代器模式

1.1 乘车买票&#xff0c;不管你是谁&#xff01; 售票员检查谁没有买票&#xff0c;把车厢里的人都遍历一遍。 1.2 迭代器模式 迭代器模式&#xff08;Iterator&#xff09;&#xff0c;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示…

7-23 币值转换

题目链接&#xff1a;7-23 币值转换 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码 1. 代码实现 #include <iostream> #include <string> using namespace std;string numStr[] { // 0-9对应的字符串&#xff08;字符串是方便string&#xff09;"a…

LLM - 大语言模型(LLM) 的 应用技术

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137503579 大语言模型(LLM) 的应用技术范围非常广泛,即: LangChain:开发框架,专为大型语言模型设计,以提高开发人工智能应用的效率,允许开发者将语言模…

Day16_学点儿JavaEE_实践_基于IDEA2023的简易JavaWeb项目、Tomcat输出乱码解决

0 JavaWeb项目目录 └──JavaWeb├──resources│ └──db.properties├──src│ └──com.sdust.web│ ├──servlet│ │ └──StudentServlet│ ├──pojo│ │ └──Student│ └──util│ └──JDBCUtil├──web│ ├──st…