Docker镜像,什么是Docker镜像,Docker基本常用命令【搜索,镜像下载,镜像删除,创建容器,导入到处镜像】及其镜像的分层

本文主要是介绍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中,每条指令都是用于完成某项特定共能得,而每条指令都会生成一个扩展镜像层。

这篇关于Docker镜像,什么是Docker镜像,Docker基本常用命令【搜索,镜像下载,镜像删除,创建容器,导入到处镜像】及其镜像的分层的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/916134

相关文章

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

C# ComboBox下拉框实现搜索方式

《C#ComboBox下拉框实现搜索方式》文章介绍了如何在加载窗口时实现一个功能,并在ComboBox下拉框中添加键盘事件以实现搜索功能,由于数据不方便公开,作者表示理解并希望得到大家的指教... 目录C# ComboBox下拉框实现搜索步骤一步骤二步骤三总结C# ComboBox下拉框实现搜索步骤一这

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空