什么是镜像?
解释
看到一个 容器 是一个隔离的进程,它从哪里获取其文件和配置?你如何共享这些环境?
这就是容器镜像发挥作用的地方!
容器镜像是一个标准化包,其中包含运行容器所需的所有文件、二进制文件、库和配置。
对于一个 PostgreSQL 镜像,该镜像将打包数据库二进制文件、配置文件和其他依赖项。对于 Python Web 应用程序,它将包含 Python 运行时、您的应用程序代码及其所有依赖项。
镜像有两个重要原则
镜像是不可变的。一旦创建镜像,就无法修改。你只能创建一个新的镜像或在它之上添加更改。
容器镜像由层组成。每个层都代表一组文件系统更改,这些更改添加、删除或修改文件。
这两个原则使您可以扩展或添加到现有镜像。例如,如果您正在构建 Python 应用程序,您可以从 Python 镜像 开始,并添加额外的层来安装您的应用程序的依赖项并添加您的代码。这使您可以专注于您的应用程序,而不是 Python 本身。
查找镜像
Docker Hub 是存储和分发镜像的默认全球市场。它拥有超过 100,000 个由开发人员创建的镜像,您可以本地运行这些镜像。您可以搜索 Docker Hub 镜像并直接从 Docker Desktop 运行它们。
Docker Hub 提供各种 Docker 支持和认可的镜像,称为 Docker 可信内容。这些提供完全托管的服务或为您的镜像提供出色的起点。这些包括
- Docker 官方镜像 - 一套精选的 Docker 存储库,作为大多数用户的起点,并且是 Docker Hub 上最安全的存储库之一
- Docker 验证发布者 - 来自商业发布者的高质量镜像,由 Docker 验证
- Docker 赞助的开源 - 由 Docker 通过 Docker 开源计划发布和维护的镜像
例如,Redis 和 Memcached 是几个流行的即用型 Docker 官方镜像。您可以下载这些镜像,并在几秒钟内启动和运行这些服务。还有一些基础镜像,例如 Node.js Docker 镜像,您可以将其用作起点并添加您自己的文件和配置。
试一试
在这个动手操作中,您将学习如何使用 Docker Desktop GUI 搜索和拉取容器镜像。
搜索并下载镜像
打开 Docker Dashboard 并选择左侧导航菜单中的“镜像”视图。
选择“搜索要运行的镜像”按钮。如果您没有看到它,请选择屏幕顶部的“全局搜索栏”。
在“搜索”字段中,输入“welcome-to-docker”。搜索完成后,选择
docker/welcome-to-docker
镜像。选择“拉取”下载镜像。
了解镜像
下载镜像后,您可以通过 GUI 或 CLI 了解有关镜像的大量详细信息。
在 Docker Dashboard 中,选择“镜像”视图。
选择“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 镜像的层。
其他资源
以下资源将帮助您进一步了解探索、查找和构建镜像。
下一步
现在您已经了解了镜像的基础知识,是时候学习通过注册表分发镜像了。