1 / 23
文档名称:

Docker镜像(image)详解.docx

格式:docx   大小:50KB   页数:23页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Docker镜像(image)详解.docx

上传人:simple 2021/7/12 文件大小:50 KB

下载得到文件列表

Docker镜像(image)详解.docx

文档介绍

文档介绍:Docker镜像(image)详解
如果曾经做过 VM 管理员,则可以把 Docker 镜像理解为 VM 模板,VM 模板就像停止运行的 VM,而 Docker 镜像就像停止运行的容器;而作为一名研发人员,则可以将镜像理解为类(Class)。
首先需要先从镜像仓库服务中拉取镜像。常见的镜像仓库服务是 Docker Hub,但是也存在其他镜像仓库服务。
拉取操作会将镜像下载到本地 Docker 主机,可以使用该镜像启动一个或者多个容器。
镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包。
因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小。
前面多次提到镜像就像停止运行的容器(类)。实际上,可以停止某个容器的运行,并从中创建新的镜像。
在该前提下,镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构,如下图所示。
镜像和容器
上图从顶层设计层面展示了镜像和容器间的关系。通常使用docker container run和docker service create命令从某个镜像启动一个或多个容器。
一旦容器从镜像启动后,二者之间就变成了互相依赖的关系,并且在镜像上启动的容器全部停止之前,镜像是无法被删除的。尝试删除镜像而不停止或销毁使用它的容器,会导致出错。
镜像通常比较小
容器目的就是运行应用或者服务,这意味着容器的镜像中必须包含应用/服务运行所必需的操作系统和应用文件。
但是,容器又追求快速和小巧,这意味着构建镜像的时候通常需要裁剪掉不必要的部分,保持较小的体积。
例如,Docker 镜像通常不会包含 6 个不同的 Shell 让读者选择——通常 Docker 镜像中只有一个精简的Shell,甚至没有 Shell。
镜像中还不包含内核——容器都是共享所在 Docker 主机的内核。所以有时会说容器仅包含必要的操作系统(通常只有操作系统文件和文件系统对象)。
提示:Hyper-V 容器运行在专用的轻量级 VM 上,同时利用 VM 内部的操作系统内核。
Docker 官方镜像 Alpine Linux 大约只有 4MB,可以说是 Docker 镜像小巧这一特点的比较典型的例子。
但是,镜像更常见的状态是如 Ubuntu 官方的 Docker 镜像一般,大约有 110MB。这些镜像中都已裁剪掉大部分的无用内容。
Windows 镜像要比 Linux 镜像大一些,这与 Windows OS 工作原理相关。比如,未压缩的最新 Microsoft .NET 镜像(microsoft/dotnet:latest)超过 。Windows Server 2016 Nano Server 镜像(microsoft/nanoserver:latest)在拉取并解压后,其体积略大于 1GB。
拉取镜像
Docker 主机安装之后,本地并没有镜像。
docker image pull 是下载镜像的命令。镜像从远程镜像仓库服务的仓库中下载。
默认情况下,镜像会从 Docker Hub 的仓库中拉取。docker image pull alpine:latest 命令会从 Docker Hub 的 alpine 仓库中拉取标签为 latest 的镜像。
Linux Docker 主机本地镜像仓库通常位于 /var/lib/docker/,Windows Docker 主机则是 C:\ProgramData\docker\windowsfilter。
可以使用以下命令检查 Docker 主机的本地仓库中是否包含镜像。
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
将镜像取到 Docker 主机本地的操作是拉取。所以,如果读者想在 Docker 主机使用最新的 Ubuntu 镜像,需要拉取它。通过下面的命令可以将镜像拉取到本地,并观察其大小。
提示:如果使用 Linux,并且还没有将当前用户加入到本地 Docker UNIX 组中,则需要在下面的命令前面添加 sudo。
Windows示例如下。
> docker image pull microsoft/powershell:nanoserver
nanoserver: Pulling from microsoft/powershell
bce2fbc256ea: Pull complete
58f68fa0ceda: Pull complete
04083aac0446: Pull complete
e42e