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

news2024/11/15 17:54:00

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.coloradmin.cn/o/1606092.html

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

相关文章

ThingsBoard自定义需求生成告警规则以及清除告警规则

上一章已对基础的生成告警规则进行了介绍,如想查看基础,请查看下面的文章 ThingsBoard实现告警规则创建并生成报警信息-CSDN博客文章浏览阅读991次,点赞9次,收藏25次。发起者警报发起者是警报的实体例如:如果收到来自…

Golang基础-13

Go语言基础 介绍 并发 channel goroutine 互斥锁 读写锁 原子操作 select 超时处理 sync包 runtime包 介绍 本文介绍Go语言中 channel、goroutine、互斥锁、读写锁、原子操作、select、超时处理、sync包、runtime包等相关知识。 并发 进程是是最小的资源管理单元…

ArcGIS多数据框联动批量出图

这次内容是《ArcPy结合数据驱动模块的批量制图》课程的新增内容。学完这个课程大家对arcgis的数据驱动页面的批量出图应该是驾轻就熟,不管是无编程的完全基于ArcGIS数据驱动模块批量出图还是结合ArcPy的Mapping模块批量出图(arcpy.mapping)。…

MercadoLibre(美客多)入仓预约系统操作流程-自动化约号(开篇)

目录 一、添加货件信息 二、输入货件信息 三、选择发货 四、填写交货日期 五、注意事项 MercadoLibre(美客多)于2021年10月18号上线了新预约入仓系统,在MercadoLibre美客多平台上,新入仓预约系统是一项非常重要的功能&#x…

【技巧】win11 删除网络中心中多余的以太网信息

因为网络环境的变化,系统在识别网络时会出现“以太网1”,“以太网2”,“以太网3”的情况。虽然不影响使用,但是对于一些强迫症来说很不友好,通过以下方式删除: 1、Win R 打开,运行,…

「 安全工具介绍 」软件成分分析工具Black Duck,业界排名TOP 1的SCA工具

在现代的 DevOps 或 DevSecOps 环境中,SCA 激发了“左移”范式的采用。提早进行持续的 SCA 测试,使开发人员和安全团队能够在不影响安全性和质量的情况下提高生产力。前期在博文《「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到…

open Gauss 数据库-05 openGauss数据库备份恢复指导手册

发文章是为了证明自己真的掌握了一个知识,同时给他人带来帮助,如有问题,欢迎指正,祝大家万事胜意! 目录 前言 openGauss数据库备份恢复 1 实验介绍 1.1 关于本实验 1.2 实验目的 2 实验前提 3 物理备份和恢复…

Day3 权限管理

Day3 权限管理 这里会总结构建项目过程中遇到的问题,以及一些个人思考!! 学习方法: 1 github源码 文档 官网 2 内容复现 ,实际操作 项目源码同步更新到github 欢迎大家star~ 后期会更新并上传前端项目 创建管理员…

技术周刊的转变:如何平衡热爱与现实?

大家好,我是那个自己打脸自己的猫哥,本来说周刊不做订阅制的,现在却推出了订阅专栏。今天想为自己辩护一下,同时聊聊技术周刊今后的发展计划。 首先回顾一下我过去的想法吧,然后再解释为什么会突然出现转变。 出于对…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天,StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型,并没有说明发布日期。模型还没发布,但API先来…

Python | Leetcode Python题解之第28题找出字符串中的第一个匹配项的下标

题目: 题解: class Solution:def strStr(self, haystack: str, needle: str) -> int:# Func: 计算偏移表def calShiftMat(st):dic {}for i in range(len(st)-1,-1,-1):if not dic.get(st[i]):dic[st[i]] len(st)-idic["ot"] len(st)1re…

JS-39-underscore01-初识underscore

一、underscore简介 前面我们已经讲过了,JavaScript是函数式编程语言,支持高阶函数和闭包。 函数式编程非常强大,可以写出非常简洁的代码。例如Array的map()和filter()方法: use strict; var a1 [1, 4, 9, 16]; var a2 a1.ma…

数据结构书后习题

p17 1&#xff0c; 个人解答&#xff1a; int DeleteMinElem(SqList &L,int &min) {int j 0;if (L.length 0){printf("error!");return 0;}int min L.data[0];for (int i 1; i < L.length; i){if (L.data[i] < min){min L.data[i];j i;}}L.dat…

电工与电子技术选择题填空题计算题复习题含参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 电工与电子技术复习题 一 . 单选题&#xff08;共 33 题&a…

[渗透测试学习] TwoMillion-HackTheBox

TwoMillion-HackTheBox 信息搜集 nmap扫描一下 nmap -sV -v 10.10.11.221扫描结果 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 3851/tcp f…

SAP 技巧:如何查询TCODE的节点路径。

目录 SAP 技巧&#xff1a;如何查询TCODE的节点路径。 步骤一&#xff1a;在命令栏里输入&#xff1a;Search_SAP_Menu 会弹出以上页面&#xff0c;然后输入你想查询的T-code。回车。 步骤二&#xff1a;找到正确路径&#xff0c; SAP 技巧&#xff1a;如何查询TCODE的节点路…

0418WeCross搭建 + Caliper测试TPS

1. 基本信息 虚拟机名称&#xff1a;Pure-Ununtu18.04 WeCross位置&#xff1a;/root/wecross-demo 2. 搭建并启动WeCross 参考官方指导文档 https://wecross.readthedocs.io/zh-cn/v1.2.0/docs/tutorial/demo/demo.html 访问WeCross网页管理平台 http://localhost:8250/s/…

变频超声波驱鸟器,变电站驱鸟

随着春夏季来临&#xff0c;各种鸟类活动也愈发频繁。这一时期&#xff0c;变电站内有很多中大型鸟类&#xff0c;选择在户外架空高压裸导线龙门架、主变进线支撑架等重要设备上筑巢停留&#xff0c;它们筑巢所用的枝干和各类杂物&#xff0c;时常会掉落&#xff0c;引发设备短…

SQL Server Management Studio 显示行号

前言 在使用 SQL Server Management Studio (SSMS) 进行数据库管理和查询时&#xff0c;能够看到代码的行号是非常有用的。这可以帮助您更容易地定位代码错误、讨论特定的代码行&#xff0c;或者在执行长查询时快速找到特定行。在本文中&#xff0c;我将向您展示如何在 SSMS 中…

怎么你出的MES方案像屎一样?

最近在一个群里面&#xff0c;大家普遍感受到制定MES技术方案变得越来越困难&#xff0c;客户也变得越来越挑剔&#xff0c;方案的复杂度也在不断增加。在竞标过程中&#xff0c;各方技术水平的差距变得越来越小&#xff0c;这让人们感到相当困扰。考虑到这一问题&#xff0c;我…