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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费领!赛盈分销联合UseePay发布《2024全球户外家居电商市场分析报告》

随着全球化的浪潮愈演愈烈,家居行业正在经历着深刻的变革与转型。过去几年,随着消费升级和科技创新的推动,家居行业呈现出以下几个明显趋势: 智能化与互联网家居 智能家居产品不断涌现,人们对于智能、便捷的家居生活…

Nacos 入门篇---服务端如何处理客户端的服务注册请求?(三)

一、引言 ok呀,上个章节我们讲了Nacos客户端的服务自动注册,今天我们来看看服务端接收到了客户端的服务注册请求,服务端都做了哪些事情~ 二、目录 目录 一、引言 二、目录 三、回顾上节内容: 四、Nacos 服务代码入…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码: import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …

改进 Elastic Agent 和 Beats 中的事件队列

作者:Fae Charlton, Alexandros Sapranidis 内部改进如何降低 Elastic 8.13 中的内存使用。 在 8.12 版本中,我们引入了性能预设 —— 一种更简单的方法,用于调整 Elastic Agent 和 Beats 以适应各种场景。这提高了常见环境的性能&#xff0…

喜讯|我司再次获得国家发明专利,硬核科技研发成果呈加速度增长

热烈祝贺 璞华软件成功获得国家发明专利 我司自主研发成果《一种工伤案件裁决书的生成方法及装置》(专利号:ZL 2019 1 1170975.8)成功获得国家发明专利,2024年4月成功获得专利证书。 发明人:高志凯;杨德…

微商商城源码小程序好用么?

商城APP作为电子商务行业的重要组成部分,已经成为了人们购物的主要方式之一。为了在竞争激烈的市场中脱颖而出,开发一款专业且思考深度的商城APP方案显得尤为关键。本文将从专业性和思考深度两个方面,探讨商城APP的开发方案。 一、专业性的重…

BGI | STCellBin:动植物组织细胞分割

简介 STCellbin 利用细胞核染色图像作为桥梁来获取与空间基因表达图谱对齐的细胞膜/壁染色图像。通过采用先进的细胞分割技术,可以获得准确的细胞边界,从而获得更可靠的单细胞空间基因表达谱。此次更新的增强功能为细胞内基因表达的空间组织提供了宝贵的…

uc网盘推广拉新渠道

​近期,UC网盘拉新项目在收益上展现出了一些明显的优势,这些优势对于推广者来说是非常吸引人的。以下是对这些优势的详细分析: 上手容易:与其他项目相比,UC网盘的报备审核过程相对宽松,速度也更快。在快节奏…

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey

Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey PDF: https://arxiv.org/pdf/2403.14608.pdf 1 概述 大型模型在多个领域取得了显著进展,但它们的大规模参数带来了高昂的计算成本。这些模型需要大量资源来执行,尤其是在针…

【python】__name__函数的用法详解!

上一篇中,说到了__init__函数的使用,__init__函数是在类中实现,它在创建对象时自动执行,用于初始化对象的属性。今天我们来说一下__name__函数,__name__函数的主要作用为: 1.执行python脚本 2.导入到别的…

哪种裤子比较百搭?显高显瘦的男生裤子分享

选到合适的裤子才能穿得好看以及舒服。可是市面上也出现了不少各种裤子质量达不到标准的负面新闻,为了能够选到合适的裤子,我自费购买了多个品牌的裤子测评。之后我知道很多网红品牌为了压低成本,用料和做工都很差,于是我总结了五…

Python和Java哪个更适合后端开发?

Python和Java都是强大的后端开发语言,它们各自有鲜明的特点和适用场景。选择哪一个更适合后端开发,主要取决于具体的项目需求、团队技术栈、个人技能偏好以及长期发展考虑等因素。 下面是两者在后端开发中的优势和劣势: 「Python&#xff1…

TCP/IP协议—TCP

TCP/IP协议—TCP TCP协议TCP通信特点TCP技术概念TCP定时器 TCP头部报文TCP连接三次握手(建立连接)四次挥手(释放连接)连接状态 TCP协议 传输控制协议(TCP,Transmission Control Protocol)是一种…

《柳叶刀》子刊:突破性临床试验,证实粪菌移植治疗帕金森病的潜力

帕金森病(Parkinson’s Disease,PD),是一种复杂的神经退行性疾病,也是世界上第二常见的神经退行性疾病,仅次于阿尔茨海默病(AD),影响着约1%-2%的65岁及以上老人。随着全球…

Ribbon-负载均衡原理解析(案例)

简介:负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同…

明厨亮灶厨师帽佩戴检测的难点与优化方式 Yolov5+bytetrack

随着国家一系列食品安全政策的出台,厨房的安全卫生问题逐渐被人们重视。其中,工作人员是否佩戴厨师帽是很关键的一环。人们希望能通过一种方式实现自动化的检测,但目前市场上大部分“明厨亮灶系统”或“未佩戴厨师帽检测系统”都无法满足用户…

【UE5.1】使用MySQL and MariaDB Integration插件——(1)连接MySQL

效果 步骤 1. 在虚幻商城下载“MySQL and MariaDB Integration”插件 2. 购买安装后,我们将插件添加到一个新工程中,打开新工程可以看到已经添加了插件 3. 新建一个蓝图,选择父类为“MySQLDBConnectionActor” 这里命名为该蓝图为“BP_MySQL…

腾讯测试岗位的面试经历与经验分享【一面、二面与三面】

腾讯两个月的实习一转眼就结束了,回想起当时面试的经过,感觉自己是跌跌撞撞就这么过了,多少有点侥幸.马上腾讯又要来校招了,对于有意愿想投腾讯测试岗位的同学们,写了一些那时候面试的经历和自己的想法,算不上经验,仅供参考吧! 一面 — —技术基础,全面…

linux 自定义命令/别名

参考资料 Linux(Ubuntu)自定义命令的使用Linux/Ubuntu系统自定义Shell命令Ubuntu/Linux 操作系统 自定义命令 目录 一. 为路径取别名二. 修改.profile文件2.1 .profile简介2.2 需求2.3 修改.profile文件 三. 创建软链接 一. 为路径取别名 ⏹需求:有一个work文件夹…

API网关工具Kong或nginx ingress实现对客户端IP的白名单限制,提高对外服务的访问安全

一、背景 部署在生产环境的应用,供内部服务调用外,还需要暴露外网访问。 比如consul ui管理界面,我们需要给到开发和测试人员,观察服务的注册情况。 再比如前端页面和后端接口在一起的服务,后端接口供内部服务接口调用…