什么是图像?

解释

看到一个 容器是一个孤立的进程,它从哪里获取它的文件和配置呢?您如何共享这些环境?

这就是容器镜像的用武之地!

容器映像是一个标准化包,其中包含运行容器的所有文件、二进制文件、库和配置。

对于 PostgreSQL映像,该映像将打包数据库二进制文件、配置文件和其他依赖项。对于 Python Web 应用程序,它将包括 Python 运行时、您的应用程序代码及其所有依赖项。

图像有两个重要的原则:

  1. 图像是不可变的。图像一旦创建就无法修改。您只能制作新图像或在其上添加更改。

  2. 容器镜像由层组成。每个层代表一组添加、删除或修改文件的文件系统更改。

这两个原则使您可以扩展或添加到现有图像。例如,如果您正在构建 Python 应用程序,则可以从 Python 映像开始并添加其他层来安装应用程序的依赖项并添加代码。这让您可以专注于您的应用程序,而不是 Python 本身。

查找图像

Docker Hub是存储和分发镜像的默认全球市场。它拥有超过 100,000 个由开发人员创建的图像,您可以在本地运行。您可以搜索 Docker Hub 映像并直接从 Docker Desktop 运行它们。

Docker Hub 提供各种受 Docker 支持和认可的映像,称为 Docker 可信内容。这些为您自己的图像提供完全托管的服务或出色的启动器。这些包括:

例如, RedisMemcached是一些流行的现成 Docker 官方镜像。您可以下载这些映像并在几秒钟内启动并运行这些服务。还有一些基础映像,例如 Node.js Docker 映像,您可以将其用作起点并添加您自己的文件和配置。

现在就试试


在本次实践中,您将学习如何使用 Docker Desktop GUI 搜索和提取容器映像。

搜索并下载图像

  1. 打开 Docker 仪表板并在左侧导航菜单中选择“图像”视图。

    Docker 仪表板的屏幕截图,显示左侧边栏上的图像视图
  2. 选择搜索要运行的图像按钮。如果您没有看到它,请选择屏幕顶部的全局搜索栏。

    显示搜索 ta 的 Docker 仪表板的屏幕截图
  3. 搜索字段中,输入“welcome-to-docker”。搜索完成后,选择docker/welcome-to-docker图像。

    Docker 仪表板的屏幕截图,显示 docker/welcome-to-docker 映像的搜索结果
  4. 选择“拉取”以下载图像。

了解图像

下载镜像后,您可以通过 GUI 或 CLI 了解有关该镜像的大量详细信息。

  1. 在 Docker 仪表板中,选择“图像”视图。

  2. 选择docker/welcome-to-docker映像以打开有关该映像的详细信息。

    Docker 仪表板的屏幕截图,显示图像视图,其中箭头指向 docker/welcome-to-docker 图像
  3. 映像详细信息页面向您提供有关映像层、映像中安装的包和库以及任何发现的漏洞的信息。

    docker/welcome-to-docker 图像的图像详细信息视图的屏幕截图

按照说明使用 CLI 搜索并拉取 Docker 映像以查看其层。

搜索并下载图像

  1. 打开终端并使用以下 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 上可用的相关映像的信息。

  2. 使用命令拉取镜像 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
    

    每行代表图像的不同下载层。请记住,每一层都是一组文件系统更改并提供映像的功能。

了解图像

  1. 使用以下命令列出您下载的图像 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。

    图片大小

    这里表示的图像大小反映了图像的未压缩大小,而不是图层的下载大小。

  2. 使用以下命令列出图像的图层 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 镜像的各个层。

其他资源

以下资源将帮助您了解有关探索、查找和构建图像的更多信息:

下一步

现在您已经了解了映像的基础知识,是时候了解如何通过注册表分发映像了。