什么是图像?
解释
看到一个 容器是一个孤立的进程,它从哪里获取它的文件和配置呢?您如何共享这些环境?
这就是容器镜像的用武之地!
容器映像是一个标准化包,其中包含运行容器的所有文件、二进制文件、库和配置。
对于 PostgreSQL映像,该映像将打包数据库二进制文件、配置文件和其他依赖项。对于 Python Web 应用程序,它将包括 Python 运行时、您的应用程序代码及其所有依赖项。
图像有两个重要的原则:
图像是不可变的。图像一旦创建就无法修改。您只能制作新图像或在其上添加更改。
容器镜像由层组成。每个层代表一组添加、删除或修改文件的文件系统更改。
这两个原则使您可以扩展或添加到现有图像。例如,如果您正在构建 Python 应用程序,则可以从 Python 映像开始并添加其他层来安装应用程序的依赖项并添加代码。这让您可以专注于您的应用程序,而不是 Python 本身。
查找图像
Docker Hub是存储和分发镜像的默认全球市场。它拥有超过 100,000 个由开发人员创建的图像,您可以在本地运行。您可以搜索 Docker Hub 映像并直接从 Docker Desktop 运行它们。
Docker Hub 提供各种受 Docker 支持和认可的映像,称为 Docker 可信内容。这些为您自己的图像提供完全托管的服务或出色的启动器。这些包括:
- Docker 官方镜像- 一组精选的 Docker 存储库,作为大多数用户的起点,并且是 Docker Hub 上最安全的镜像之一
- Docker Verified Publishers - 来自经 Docker 验证的商业发布商的高质量图像
- Docker 赞助的开源- 由 Docker 赞助的开源项目通过 Docker 的开源计划发布和维护的镜像
例如, Redis和 Memcached是一些流行的现成 Docker 官方镜像。您可以下载这些映像并在几秒钟内启动并运行这些服务。还有一些基础映像,例如 Node.js Docker 映像,您可以将其用作起点并添加您自己的文件和配置。
现在就试试
在本次实践中,您将学习如何使用 Docker Desktop GUI 搜索和提取容器映像。
搜索并下载图像
打开 Docker 仪表板并在左侧导航菜单中选择“图像”视图。
选择搜索要运行的图像按钮。如果您没有看到它,请选择屏幕顶部的全局搜索栏。
在搜索字段中,输入“welcome-to-docker”。搜索完成后,选择
docker/welcome-to-docker
图像。选择“拉取”以下载图像。
了解图像
下载镜像后,您可以通过 GUI 或 CLI 了解有关该镜像的大量详细信息。
在 Docker 仪表板中,选择“图像”视图。
选择docker/welcome-to-docker映像以打开有关该映像的详细信息。
映像详细信息页面向您提供有关映像层、映像中安装的包和库以及任何发现的漏洞的信息。
按照说明使用 CLI 搜索并拉取 Docker 映像以查看其层。
搜索并下载图像
打开终端并使用以下
docker search
命令搜索图像:docker search docker/welcome-to-docker
您将看到如下输出:
NAME DESCRIPTION STARS OFFICIAL docker/welcome-to-docker Docker image for new users getting started w… 20
此输出向您显示有关 Docker Hub 上可用的相关映像的信息。
使用命令拉取镜像
docker pull
。docker pull docker/welcome-to-docker
您将看到如下输出:
Using default tag: latest latest: Pulling from docker/welcome-to-docker 579b34f0a95b: Download complete d11a451e6399: Download complete 1c2214f9937c: Download complete b42a2f288f4d: Download complete 54b19e12c655: Download complete 1fb28e078240: Download complete 94be7e780731: Download complete 89578ce72c35: Download complete Digest: sha256:eedaff45e3c78538087bdd9dc7afafac7e110061bbdd836af4104b10f10ab693 Status: Downloaded newer image for docker/welcome-to-docker:latest docker.io/docker/welcome-to-docker:latest
每行代表图像的不同下载层。请记住,每一层都是一组文件系统更改并提供映像的功能。
了解图像
使用以下命令列出您下载的图像
docker image ls
:docker image ls
您将看到如下输出:
REPOSITORY TAG IMAGE ID CREATED SIZE docker/welcome-to-docker latest eedaff45e3c7 4 months ago 29.7MB
该命令显示系统上当前可用的 Docker 映像的列表。总
docker/welcome-to-docker
大小约为 29.7MB。图片大小
这里表示的图像大小反映了图像的未压缩大小,而不是图层的下载大小。
使用以下命令列出图像的图层
docker image history
:docker image history docker/welcome-to-docker
您将看到如下输出:
IMAGE CREATED CREATED BY SIZE COMMENT 648f93a1ba7d 4 months ago COPY /app/build /usr/share/nginx/html # buil… 1.6MB buildkit.dockerfile.v0 <missing> 5 months ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B <missing> 5 months ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B <missing> 5 months ago /bin/sh -c #(nop) EXPOSE 80 0B <missing> 5 months ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B <missing> 5 months ago /bin/sh -c #(nop) COPY file:9e3b2b63db9f8fc7… 4.62kB <missing> 5 months ago /bin/sh -c #(nop) COPY file:57846632accc8975… 3.02kB <missing> 5 months ago /bin/sh -c #(nop) COPY file:3b1b9915b7dd898a… 298B <missing> 5 months ago /bin/sh -c #(nop) COPY file:caec368f5a54f70a… 2.12kB <missing> 5 months ago /bin/sh -c #(nop) COPY file:01e75c6dd0ce317d… 1.62kB <missing> 5 months ago /bin/sh -c set -x && addgroup -g 101 -S … 9.7MB <missing> 5 months ago /bin/sh -c #(nop) ENV PKG_RELEASE=1 0B <missing> 5 months ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.25.3 0B <missing> 5 months ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B <missing> 5 months ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 5 months ago /bin/sh -c #(nop) ADD file:ff3112828967e8004… 7.66MB
此输出显示所有图层、它们的大小以及用于创建图层的命令。
查看完整命令
如果将
--no-trunc
标志添加到命令中,您将看到完整的命令。请注意,由于输出采用类似表格的格式,因此较长的命令将导致输出非常难以导航。
在本演练中,您搜索并提取了 Docker 映像。除了拉取 Docker 镜像之外,您还了解了 Docker 镜像的各个层。
其他资源
以下资源将帮助您了解有关探索、查找和构建图像的更多信息:
下一步
现在您已经了解了映像的基础知识,是时候了解如何通过注册表分发映像了。