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.hqwc.cn/news/611216.html

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

相关文章

从 SQLite 3.4.2 迁移到 3.5.0(二十)

返回:SQLite—系列文章目录 上一篇:SQLite---调试提示(十九) 下一篇:SQLite—系列文章目录 ​ SQLite 版本 3.5.0 (2007-09-04) 引入了一个新的操作系统接口层, 与所有先前版本的 SQLi…

机器学习——模型融合:Stacking算法

机器学习——模型融合:Stacking算法 在机器学习中,模型融合是一种常用的方法,它可以提高模型的泛化能力和预测性能。Stacking算法(又称为堆叠泛化)是一种强大的模型融合技术,它通过组合多个基本分类器的预…

一文破解Promise难题:Promise机制深入剖析与实例

Promise 是 JavaScript 中用于处理异步操作的一种重要机制。Promise 用于解决 JavaScript 中异步操作的复杂性,通过状态管理、链式调用、错误处理等功能,实现代码的清晰、有序与可维护,避免回调地狱,提升异步编程的效率与体验。 …

【Nacos】Nacos最新版的安装、配置过程记录和踩坑分享

Nacos是什么?有什么功能?大家可以自行联网(推荐 https://cn.bing.com/)搜索,这里就不做介绍了。 简单的看了下官网,安装最新版的Nacos(v2.3.2)需要使用到JDK(1.8.0&…

Java基础07--多线程-网络编程-Java高级

一、多线程 1.认识多线程 ①线程 ②多线程 2.创建线程方式 ①方式一:继承Thread类 1.让子类继承Thread线程类 2.重写run方法,就是这个线程执行会执行的操作。 3.创建继承Thread的子类对象就代表一个线程 4.启动线程:.start()-自动执行run方法 注意&am…

Qlik Sense : Crosstable在数据加载脚本中使用交叉表

什么是Crosstable? 交叉表是常见的表格类型,特点是在两个标题数据正交列表之间显示值矩阵。如果要将数据关联到其他数据表格,交叉表通常不是最佳数据格式。 本主题介绍了如何逆透视交叉表,即,在数据加载脚本中使用 L…

C++11的更新介绍(初始化、声明、右值引用)

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 C11小故事: 19…

【MCU开发规范】:MCU的性能测试

MCU的性能测试 前序性能评判方法MIPSCoreMark EEMBC其他参考 前序 我们平时做MCU开发时,前期硬件选型(选那颗MCU)基本由硬件工程师和架构决定,到软件开发时只是被动的开发一些具体功能,因此很少参与MCU的选型。 大部分…

windows环境下实现ffmpeg本地视频进行rtsp推流

摘要:有时候服务端(如linux)或者边缘端(jetson盒子)需要接受摄像头的视频流输入,而摄像头的输入视频流一般为rtsp,测试时需要搭建摄像头环境,很不方便,因此需要对本地视频…

docker pull镜像的时候指定arm平台

指定arm平台 x86平台下载arm平台的镜像包 以mysql镜像为例 docker pull --platform linux/arm64 mysqldocker images查看镜像信息 要查看Docker镜像的信息,可以使用docker inspect命令。这个命令会返回镜像的详细信息,包括其元数据和配置。 docker i…

CDHD高创驱动器恢复出厂设置的具体方法演示

CDHD高创驱动器恢复出厂设置的具体方法演示 首先,下载并安装高创驱动器的调试软件,有需要的可以从以下链接中获取:高创CDHD伺服调试软件ServoStudio安装包-V2.38.6.30 安装完成后,打开软件,如下图所示, 如下图所示,在左侧找到配置—通信,点击连接, 如下图所示,正常情…

MySQL进阶一

目录 1.使用环境 2.条件判断 2.1.case when 2.2.if 3.窗口函数 3.1.排序函数 3.2.聚合函数 ​​​​​​​3.3.partiton by ​​​​​​​3.4.order by 4.待续 1.使用环境 数据库:MySQL 8.0.30 客户端:Navicat 15.0.12 2.条件判断 2.1.ca…