首页 > 其他分享 >Docker:镜像

Docker:镜像

时间:2024-10-25 12:52:21浏览次数:3  
标签:仓库 image hello tag 镜像 Docker docker

Docker:镜像


Docker 架构

在这里插入图片描述

Docker使用C/S架构,使用远程接口来管理容器,如上图。

为了方便程序员之间进行交流,以及一些通用容器的下载,Docker官方维护了一个巨大的仓库,称为registry镜像仓库。

在镜像仓库中,存储着大量的镜像image,镜像就是将容器打包好,当作一个容器模板,使用镜像可以大批量的产生相同的容器。

比如说有一个程序员配置了一个mysql的镜像,并上传到了registry镜像仓库,当其他人从registry下载,就可以得到一个一模一样的容器,并在内部完成mysql的开发。

镜像不是一个可以进行操作的容器,它只是一个模板,可以用镜像产生容器,随后在容器内进行具体的操作。比如说对于一个相同的mysql镜像,有的程序员用它生成容器后,在容器内部使用Java操作数据库,而有的程序员生成容器后用C++操作数据库。那么最开始这两个容器是一样的,但是当配置了Java或者C++相关的库之后,两个容器就是不同的个体了。

这很像面向对象中的类与对象,镜像是一个类,而容器是对象,不同对象内的相同成员值可能不同。

docker daemonDocker最核心的后台进程,它会接收并处理用户的命令。当用户通过镜像创建容器时,docker daemon会检测本地是否有对应的镜像,如果有就直接通过镜像创建,如果没有则会去registry下载镜像。


registry 镜像仓库

registry镜像仓库负责存储和管理镜像,并且提供了登录认证,版本控制等功能。

在这里插入图片描述

对于每个镜像,完整的镜像名称为name:tag,其中tag称为标签,可以简单的理解为版本。比如上图中,nginx镜像有两个tag,分别是1.20.11.18.1,不同版本的镜像内容不同,用户使用镜像时要指明所使用的标签tag,否则默认使用最新版。

对于每个镜像仓库,其都是由一个或多个tag共同构成的,比如ubuntu:16.04ubuntu:18.04共同构成ubuntu镜像仓库。

如果要提交自己的镜像到仓库,那么还涉及到登录之类的认证操作,对于Docker官方提供的最大镜像仓库docker hub,国内访问还是比较麻烦的,对于pull这样的拉取操作,可以通过镜像加速完成,但是对于push这样把自己的镜像提交上去,就需要科学上网了。


命令

docker login

docker login用于登录远程仓库。

语法:

docker login [option] [server]
  • server:提供远程仓库的服务,默认为dockerhub

选项:

  • -u:用户名
  • -p:密码

一般不使用-p选项显式地输入密码,如果不带-p选项,会在输入完指令后,提示再次输入密码。

在这里插入图片描述

此处我使用了国内的阿里云的容器镜像服务,所以可以不需要科学上网,就可以测试docker login。最后的registry.cn-hangzhou.aliyuncs.com,就是提供镜像仓库的服务阿里云,也就是刚才的[server]参数。


docker pull

docker pull用于拉取镜像。

语法:

docker pull [options] name[:tag]
  • name[:tag]:要拉取的镜像名称,tag指定标签,如果不指定标签,则拉取name:latest即最新版

name前面,可以添加地址,这样可以到指定的服务去拉取镜像,如果不指定,则默认到dockerhub拉取镜像。比如:

docker pull registry.cn-hangzhou.aliyuncs.com/docker-hxy/test_docker

test_docker是最终的镜像名称,而前面的一长串地址,是该仓库的服务提供方。

此处我直接使用默认的dockerhub拉取一个hello-world镜像:

docker pull hello-world

如果你尝试拉取失败了,可以去了解如何配置docker镜像加速,这可以在不科学上网的情况下,从dockerhub拉取镜像。

在这里插入图片描述

这样就拉取成功了,直接拉取hello-world,可以看到其最终其实是拉取了docker.io/library/hello-world:latest,前面的一长串是官方仓库的地址,而:latest表示默认使用了最新版。


docker push

docker push用于提交本地镜像到镜像仓库。

语法:

docker push [option] name[:tag]

示例:

在这里插入图片描述

此处把刚才的hello-world提交到我的阿里云仓库上,首先通过docker taghello-world打一个标签,主要是为了给hello-world前面加上前缀registry.cn-hangzhou.aliyuncs.com/docker-hxy/,这样才能提交到目标仓库,否则默认提交到dockerhub,后面:v1是打标签,表示这个是第一版本。

在这里插入图片描述

此时我的阿里云仓库就有了hello-world镜像仓库。


docker logout

docker logout用于登出用户。

语法:

docker logout [server]

同样的,如果不指定server,默认登出dockerhub


image 镜像

先前在讲解Docker架构时,其实已经可以了解镜像的具体功能了。其实image本质上是一个只读文件,这个文件内部包含了文件系统、库、开发工具等等内容,实例化为容器时,容器就会读取这个image,初始化一个一模一样的环境。


命令

docker images

docker images用于列出本地的所有镜像,别名docker image lsdocker image list

语法:

docker images [option] [image:tag]

在这里插入图片描述

其中image id是一个哈希值,是由镜像的内容通过哈希函数生成的,如果两个镜像内容相同,那么他们的iamge id就相同。

如果在最后加上镜像名,则可以筛选指定的镜像:

在这里插入图片描述

此处筛选出了两个redis镜像,tag不同。如果在指定具体的标签,比如redis:latest,那么就只会输出一个镜像的信息。


docker tag

docker tag用于给一个镜像打标签,别名docker image tag

语法:

docker tag source_image[:tag] target_image[:tag]
  • source_image:源镜像
  • target_image:目标镜像

在这里插入图片描述

通过docker tag可以给镜像打上一个新的标签,此处就给helllo-world镜像打了一个v1的标签。可以发现,打标签后,两者的image id是相同的,因为两者的镜像内容相同,只是名字不同。

在这里插入图片描述

docker tag还可以给镜像起别名,此处就创建了一个hello镜像,它其实就是hello-world镜像的别名。常会通过这种方式,给镜像名前面加上一串仓库路径,方便提交。


docker rmi

docker rmi用于删除镜像,别名docker image rm或者docker image remove

语法:

docker rmi [option] image [image]

可以同时删除多个镜像,只需要把镜像名依次写到指令末尾即可。

选项:

  • -f:强制删除镜像,就算镜像正在被容器使用,也强制删除

如果镜像名不指定tag,默认使用latest

在这里插入图片描述

以上示例删除了两个镜像,第一个是之前打标签的hello-world:v1,删除时显示untagged,因为它检测到这个镜像和别的镜像的image id是相同的,这只是别的镜像的一个标签。所以只是解除了一个标签,没有实际删除镜像。

第二次删除,删掉了一个test_overlay镜像,这个镜像就是一个单独的镜像,默认删除latest,删除后先进行一次untag,然后delete删除镜像。


docker save

docker save用于对镜像进行打包,别名docker image save

语法:

docker save [option] image [image]

选项:

  • -o:输出到指定文件

示例:

在这里插入图片描述

把之前生成的hello镜像打包为hello.tar压缩包,压缩好后,就可以把这个文件发送给其它主机,其他主机就可以加载相同的镜像了。


docker load

docker load用于加载镜像,别名docker image load

语法:

docker load [options]

选项:

  • -i --input:指定导入的文件
  • -q --quite:输出精简信息

在这里插入图片描述

先把之前的hello镜像删掉,随后加载hello.tar文件,最后就把一个压缩文集加载成了hello镜像。


docker image inspect

docker image inspect用于查看一个镜像的详细信息。

语法:

docker image inspect [option] image [image]

在这里插入图片描述

此处以json的格式输出了镜像hello-world的相关信息,比如说之前生成了一个hello的标签,此处RepoTags这一栏,就说明hellohello-world这两个名字指向的是同一个镜像。

再比如说最底下说明了这个镜像内部的环境是linux amd64架构。


docker history

docker history用于显示镜像的分层情况,别名docker image history

语法:

docker history [option] image
  • -H:大小和日期采用人类更加易读的形式展示
  • --no-trunc:显示全部信息,不要隔断
  • -q:只显示image id

docker为了节省镜像的消耗,对镜像采用分层结构的存储,有可能不同镜像的某一层结构式相同的,那么最后这层的内容就只会存储一份。

在这里插入图片描述

以上是ubuntu镜像的分层,可以看出该镜像共分为了六层进行存储。


docker image prune

docker image prune用于删除不使用的镜像。

语法:

docker image prune [option]

参数:

  • -a:删除所有不使用的镜像
  • -f:不提示是否删除

在查询镜像时,有可能查询到<none>

在这里插入图片描述

这种镜像既没有repository也没有tag,称为虚悬镜像,使用时间长了就可能会出现这种镜像。此时可以通过docker image prune进行删除。

在这里插入图片描述

输入指令后,其会提示是否删除[y|N],如果加上-f选项就不会进行这个询问,直接删除。执行后就把所有<none>镜像都删除了。


标签:仓库,image,hello,tag,镜像,Docker,docker
From: https://blog.csdn.net/fsdfafsdsd/article/details/143217293

相关文章

  • Docker部署及项目的生命周期
    目标了解传统项目生命周期的阶段特点了解新型项目生命周期的特点了解部署方案的一般流程1.项目生命周期​ 世间万物皆有其生命,软件项目也是如此。随着互联网的发展,软件项目的生命周期也发生了很大的变化,为了更好的让大家理解软件项目,项目生命周期有狭义(具体)、广义(缘起/缘......
  • containerd 配置镜像加速
    介绍kubernetes从v1.24开始默认使用containerd,需要修改containerd的配置文件,才能让pod的镜像加速。containerd加速配置文件路径/etc/containerd/config.toml,每次修改配置文件,都需要执行systemctlrestartcontainerd.service或servicecontainerdrestart命令重启contain......
  • 鸠摩搜书网,zlibrary镜像网站tbox国内平替网站
    鸠摩搜书网是一个专门提供电子书搜索服务的网站,以下是对其的详细介绍以及使用步骤:一、鸠摩搜书网介绍服务内容:鸠摩搜书网致力于为用户提供丰富的电子书资源搜索服务。用户可以通过该网站搜索到各种类型的电子书,包括但不限于小说、文学、科技、历史等。搜索功能:该网站拥有强大的......
  • Docker和虚拟机在资源利用上有什么区别
    Docker和虚拟机在资源利用上的主要区别包括:1.启动速度不同;2.性能开销不同;3.硬件隔离水平不同;4.资源分配策略不同;5.存储管理不同;6.网络管理不同;7.系统占用空间不同。其中,Docker以其轻量级和高效的特点被广大开发者喜欢,而虚拟机则提供了更强大的隔离性和完整的操作系统环境。1.启......
  • centos7离线安装nvidia-docker2(附安装包)
    说实话全网没有找到一个安装包,如果你刚好从我这里找到,给我留言我就能看到发给你。或者你按照我的教程使用yum离线下载也可以在自己的docker中拉取一个centos:7镜像,创建一个容器在容器中安装docker-ce#设置docker镜像源yum-config-manager\--add-repo\https://mirro......
  • 使用 docker 的方式部署 NFS server 提供文件共享能力
    目录构建NFSserver镜像准备Dockerfile准备.bashrc文件准备nfsd.sh构建镜像特权模式dockerdocker-composedockerrun的方式环境变量方式配置文件挂载方式docker-compose的方式本地挂载NFS题外话什么是Capabilities常见的Capabilities列表获取Capabilities列表方法一......
  • docker 镜像中的uid
    docker镜像中的uid在Docker镜像中,UID(用户标识符)的具体数值并不是固定的,它取决于镜像的构建方式和构建时指定的用户配置。以下是对Docker镜像中UID的详细解释:UID的分配基础镜像:当从一个基础镜像(如Ubuntu、CentOS等)构建新的Docker镜像时,该基础镜像中已经存在的用户和组会被......
  • AMD Ryzen 5700X黑苹果运行Docker和Virtualization(虚拟化)
    最近把我的AMDRyzen黑苹果系统升级到Sequoia15.01发现virtualbox不能用了,遂重新分区又安装了一个Sonoma14.7AMDRyzenRunVirtualization展示VirtualizationLimit系统要求:BigSur<=当前运行系统版本<=Sonoma虚拟化软件:virtualbox6.1.50安全要求:关闭SIP(csr-......
  • Python环境及pip镜像等
    环境管理工具venv安装python3.3版本之后自带,无需安装使用创建环境python3-mvenv/path/to/env_name激活环境cd/path/to/env_name&&source./bin/activate退出环境deactivate环境管理工具virtualenv安装pipinstallvirtualenv创建及使用环境#创建一个......
  • Nodejs版本管理及镜像配置
    pnpm安装Windows(PowerShell)Invoke-WebRequesthttps://get.pnpm.io/install.ps1-UseBasicParsing|Invoke-Expressionhttps://pnpm.io/zh/installationPOSIX系统curl-fsSLhttps://get.pnpm.io/install.sh|sh-更新pnpmself-update配置node镜像pnpmconfi......