Docker镜像深入理解

选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。

Docker镜像深入理解

Docker architecture

到目前为止,您已经看到Docker镜像是从 Dockerfile 构建的。一个镜像由多个层组成,它包含Docker容器中执行的代码。您可以构建自定义镜像,将其定制为最适合您的需求,或者您可以使用 docker pull image_name 将镜像从 docker hub 下载到您的主机,然后使用 docker run 运行它,就像您在 hello-world 示例中所做的那样。现在我们将深入研究 Docker 镜像的各个方面。

 

使用Docker镜像

Docker运行前需要在本地有对应的镜像。如果镜像不存在,docker 将尝试从镜像存储库(docker 注册表)下载它。

1、 从 Docker 注册中心获取镜像

使用 docker pull 命令从 docker hub 下载镜像。

docker pull nginx:latest

由于没有指定任何注册表 url,它将从 Docker Hub 中提取。但是,如果您将自定义注册表用作 docker pull myregistry.local:5000/testing/test-image

之前解释过,一个镜像是由多层存储组成的。您还可以在上面的控制台日志中看到 docker 正在逐层下载,而不是作为单个镜像文件。这优化了 docker 存储并能够在本地重用已经可用的层。

2、运行Dcoker镜像

从技术上讲,您运行一个使用 docker run 从镜像创建的容器。执行以下命令以在 bash shell 中以交互模式运行它。

docker run -it --rm nginx:latest bash

现在您正在运行 Nginx:latest 容器,并且 bash 会话已在交互模式下为您启动。

-it :这就像将 -i 和 -t 一起写。

 -i :以交互模式启用/运行容器 

 -t :在 bash 中启动终端会话

--rm :这确保容器在退出后被删除。默认情况下,不会立即删除容器。我们仅出于学习目的启用此功能,在生产中谨慎使用。

nginx:latest :这是用于说明容器的镜像

bash :与正在运行的容器一起使用的交互式 bash shell。

此外,您可以添加 -p 80:80 以将 Nginx 绑定到端口 80。

cat /etc/os-release 打印出有关 nginx 映像中使用的操作系统的信息。现在,在终端中键入 exit 以退出容器,正如您猜对的那样,一旦您键入 exit,容器将被删除。

管理 docker 镜像(列出和删除镜像)

当您不想再使用特定镜像或释放磁盘空间时,docker 允许您删除不必要的镜像。

1、列出docker镜像

docker image ls

REPOSITORY – 是镜像名称。

TAG – 是一个标签,通常是版本号或内部版本号。

IMAGE ID – 唯一标识下载的镜像(镜像图像)。

SIZE – 机器上镜像的大小。这可能与 docker hub 上显示的实际大小不同,因为它以压缩形式发布在 docker-hub 上。

2、列出悬空图像

当您输入 docker image ls 时,您可能会发现一些没有名称和标签的镜像,如下所示

具体列出悬空镜像

docker image ls -f dangling=true

专门删除悬空镜像 docker image prune

3、列出所有镜像——包括悬空层和中间层

使用以下命令列出本地 docker 存储库中的所有镜像

docker image ls -a

4、列出相似的图像

在某些情况下,您可能拥有多个不同版本或构建在不同操作系统上的 Nginx 镜像。下面你可以看到带有不同标签的 alpine linux。

docker image ls alpine

删除Docker镜像

要从本地机器/主机中删除 docker 镜像,请使用以下命令。

docker image rm [OPTIONS] IMAGE [IMAGE...]

或者,我更喜欢使用下面的

docker rmi [OPTIONS] IMAGE [IMAGE...]

您可以使用名称(存储库)、镜像ID 和摘要删除镜像。 image-id 可能会变得很长,因此您可以传递前几个字符,只要它足以将镜像与其他镜像区分开来。

同样,您也可以使用 name:tag 删除镜像。

docker image rm centos:latest

 

未标记镜像与已删除镜像

观察删除镜像命令 docker rmi 或 docker image rm 的输出,你会注意到删除消息基本上有两种类型,未标记和已删除。请记住,镜像的唯一标识符是其 ID。但是,它可以有多个标签或标签。

当我们运行删除命令时,我们要求删除标签的镜像。Docker 检查是否还有其他镜像被标记到该镜像,或者是否有镜像将其用作基本镜像,那么它只会执行未标记并且不会删除。

如果 docker 没有找到指向相同的依赖镜像,那么它将执行删除并指示为已删除。

 

镜像多层实现如何工作?

在 docker 中,每个镜像都由多个层组成。 Docker 使用 Union FS 将这些层组合成一个最终镜像。

Union Fs 有 2 个用途,(i) 多个磁盘可以链接到同一个目录,(ii) Unionfs 允许任意混合只读和读写分支,以及在扇出的任何位置插入和删除分支.

版权声明:著作权归作者所有。

相关推荐

Docker删除多个镜像image

Docker使用命令rmi删除镜像。docker删除单一镜像docker rmi image_name:version/image-id docker删除所有镜像docker rmi $(docker images -qf "dangling=true") docker删除除了特定的镜像外的所有镜像可以使用g

Angular CLI修改npm镜像为淘宝镜像cnpm

Angular CLI提供了ng set 命令用于设置参数。修改为淘宝镜像需要设置packageManager配置。ng set --global packageManager=cnpm 修改为npm镜像ng set --global packageManager=npm 查看所有配置项:ng ge

[译]了解AttnGAN:文字到图像转换器

文字到图像的转换一直令我着迷,最近的AttnGAN论文引起了我的注意。 在这篇文章中,我会试着提供一个直观的说明,希望让你好奇,进一步挖掘:-)。在我们开始实际模型之前,有一些先决条件:1、注意力为了避免重蹈覆辙(并推广我自己的课程),请看我以前的帖子,我在这里提供了一个关于“深度学习中的注意力”的小介绍。2、生成式对抗网络简单地说,一个GAN是两个网络的组合:一个生成器(从噪声中产生有

[译]了解AttnGAN:文字到图像转换器

文字到图像的转换一直令我着迷,最近的AttnGAN论文引起了我的注意。 在这篇文章中,我会试着提供一个直观的说明,希望让你好奇,进一步挖掘:-)。在我们开始实际模型之前,有一些先决条件:1、注意力为了避免重蹈覆辙(并推广我自己的课程),请看我以前的帖子,我在这里提供了一个关于“深度学习中的注意力”的小介绍。2、生成式对抗网络简单地说,一个GAN是两个网络的组合:一个生成器(从噪声中产生有

docker-machine配置导入/导出脚本

为了在多个主机同步docker-machine的配置,常常需要对docker-machine配置进行导入导出。这里附上两个脚本分别用于导出/导入docker-machine配置:docker-machine-export.sh和docker-machine-import.sh。这两个脚本需要所有的主机系统有相同的$MACHINE_STORAGE_PATH/certs。用法如下:导出(主机 

定时清理docker不再使用的none镜像

使用jenkins构建docker镜像进行发布,新构建的docker镜像会被标记为latest,而不再使用的docker镜像会被标记为none,这样就会导致在磁盘里存留着大量的废弃镜像。所以有必要对旧的镜像进行清理。最好的方法是利用系统的定时器crontab来执行定时清理的任务。一、添加清理none镜像的脚本clear.sh在clear.sh添加以下内容:docker images|grep no

把Ubuntu18的apt源更改为阿里云镜像

在正式更改前,建议先备份原文件sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak进入apt源配置目录,添加aliyun.listcd /etc/apt/sources.list.d/sudo vim aliyun.list在aliyun.list添加以下内容:deb http://mirrors.aliyun.com/ubuntu/ bi

JPA实体状态深入理解

我们在学习JPA实体状态的时候,常常会问,JPA的实体有多少状态呢?相信这个问题不难回答:瞬时态(transient)托管态(persistent)游离态(detached)移除态(removed)注意:这里最后一个移除态,有的时候也叫删除态(deleted),至于它和移除态有啥区别,暂时没有想到,如果您对此有更加深刻的理解,请留言回复。为什么会有这四种状态呢?啥,这个也有为啥,网上不是都这么说的

【译】深入了解React 18的自动批处理

 React在事件处理或者内置的hook中,使用批处理合并多个状态的更新。避免了每次的状态更新都要重新渲染组件,从而提高应用的性能。在React 17以及之前的版本,仅支持浏览器事件的批更新。React 18更新带来增强版的批处理,称为自动批处理(Automatic Batching)。它对所有状态的更新,不管来源哪里,都可以使用批处理。React 17的批处理如上面提到的,React