什么是镜像?

说明

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

这就是容器镜像的用武之地。容器镜像是一个标准化的包,其中包含运行容器所需的所有文件、二进制文件、库和配置。

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

镜像有两个重要原则

  1. 镜像是不可变的。创建镜像后,无法对其进行修改。您只能创建新镜像或在其上添加更改。

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

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

查找镜像

Docker HubDocker 官方镜像 - Docker 仓库的精选集合,是大多数用户的起点,并且是 Docker Hub 上一些最安全的镜像

  • Docker 认证发布者 - 来自 Docker 认证的商业发布者的高质量镜像
  • Docker 赞助的开源项目RedisMemcachedNode.js试用

    在本实践中,您将学习如何使用 Docker Desktop 图形用户界面搜索和拉取容器镜像。

    搜索并下载镜像

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

      A screenshot of the Docker Desktop Dashboard showing the image view on the left sidebar
    2. 选择“搜索要运行的镜像”按钮。 如果您没有看到它,请选择屏幕顶部的 *全局搜索栏*。

      A screenshot of the Docker Desktop Dashboard showing the search ta
    3. 在“搜索”字段中,输入 "welcome-to-docker"。 搜索完成后,选择 `docker/welcome-to-docker` 镜像。

      A screenshot of the Docker Desktop Dashboard showing the search results for the docker/welcome-to-docker image
    4. 选择“拉取”以下载镜像。

    了解镜像

    下载镜像后,您可以通过图形用户界面或命令行界面了解有关该镜像的许多详细信息。

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

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

      A screenshot of the Docker Desktop Dashboard showing the images view with an arrow pointing to the docker/welcome-to-docker image
    3. 镜像详细信息页面为您提供有关镜像层、镜像中安装的软件包和库以及任何已发现漏洞的信息。

      A screenshot of the image details view for the docker/welcome-to-docker image

    按照说明使用命令行界面搜索和拉取 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 镜像的层。

    其他资源

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