如何搜索 Docker 镜像

DockerBeginner
立即练习

介绍

Docker 已经成为现代软件开发中不可或缺的工具,它允许开发者以一致且可靠的方式打包和部署应用程序。Docker 镜像充当容器化应用程序的构建块,提供预先配置好的环境,可以轻松共享和部署。

在这个实践实验(Lab)中,你将学习如何使用 Docker 命令行界面搜索 Docker 镜像,将这些镜像拉取到你的本地机器,并运行基于这些镜像的容器。通过本教程,你将掌握查找和使用满足你特定项目需求的 Docker 镜像的技能。

检查 Docker 安装

在开始搜索 Docker 镜像之前,让我们首先验证 Docker 是否已正确安装并在你的系统上运行。

验证 Docker 安装

打开一个终端窗口,运行以下命令来检查 Docker 是否已安装:

docker --version

你应该看到类似这样的输出:

Docker version 20.10.21, build baeda1f

这确认了 Docker 已安装在你的系统上。版本号可能因你的安装而异。

检查 Docker 服务状态

我们还可以通过执行以下命令来检查 Docker 服务是否正常运行:

sudo systemctl status docker

你应该看到输出表明 Docker 服务处于活动状态并正在运行:

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since...

如果由于任何原因 Docker 未运行,你可以使用以下命令启动它:

sudo systemctl start docker

理解 Docker 镜像

Docker 镜像是一个只读模板,其中包含创建容器的一组指令。你可以将镜像视为应用程序及其环境、依赖项和配置的快照或蓝图。

Docker 镜像具有以下特点:

  • 分层(Layered):使用一系列可以在镜像之间共享的层构建
  • 只读(Read-only):创建后无法修改
  • 命名和打标签(Tagged):通过名称和可选标签(例如,ubuntu:22.04)标识

在下一步中,我们将学习如何搜索这些镜像。

搜索 Docker 镜像

Docker Hub 是 Docker 镜像的官方公共注册中心。它包含数千个镜像,包括由软件供应商维护的官方镜像和由 Docker 用户创建的社区镜像。

基本镜像搜索

要搜索 Docker 镜像,请使用 docker search 命令,后跟一个搜索词。让我们搜索 Ubuntu 镜像:

docker search ubuntu

你将看到类似这样的输出:

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14938     [OK]
ubuntu-upstart                   Upstart is an event-based replacement for th…   112       [OK]
rastasheep/ubuntu-sshd           Dockerized SSH service, built on top of offi…   254                  [OK]
...

输出显示:

  • NAME:镜像名称
  • DESCRIPTION:镜像的简短描述
  • STARS:已为镜像加星标的用户数量(受欢迎程度指标)
  • OFFICIAL:标签,指示由软件供应商维护的官方镜像
  • AUTOMATED:标签,指示由自动化流程构建的镜像

过滤搜索结果

你可以使用 --filter 选项过滤搜索结果。例如,仅显示官方镜像:

docker search --filter=is-official=true ubuntu

要查找至少有 100 个星标的镜像(受欢迎的镜像):

docker search --filter=stars=100 ubuntu

你还可以组合多个过滤器:

docker search --filter=is-official=true --filter=stars=100 nginx

此命令搜索至少有 100 个星标的官方 Nginx 镜像。

查找特定版本

docker search 命令不显示镜像标签(版本),但你可以通过以下方式找到它们:

  1. 访问 Docker Hub 网站 (hub.docker.com)
  2. 使用 docker image inspect 命令(在拉取镜像之后)

例如,要查看所有可用的 Ubuntu 版本,请访问: https://hub.docker.com/_/ubuntu?tab=tags

选择正确的镜像

选择 Docker 镜像时,请考虑以下因素:

  1. 官方镜像:优先选择官方镜像,因为它们由软件供应商维护
  2. 受欢迎的镜像:星标数量越多,表明用户越多,维护可能也更好
  3. 最近的更新:检查镜像上次更新的时间
  4. 文档:寻找具有良好文档的镜像
  5. 大小:考虑镜像大小,因为较小的镜像下载速度更快

下载 Docker 镜像

找到你想要使用的镜像后,你可以使用 docker pull 命令将其下载到你的本地机器上。

拉取镜像

让我们拉取官方 Ubuntu 镜像:

docker pull ubuntu

你将看到类似这样的输出:

Using default tag: latest
latest: Pulling from library/ubuntu
7b1a6ab2e44d: Pull complete
Digest: sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288f3322
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

默认情况下,Docker 拉取 latest 标签。要拉取特定版本,请添加一个标签:

docker pull ubuntu:20.04

你将看到显示该特定版本下载进度的输出。

列出已下载的镜像

要查看你已下载的所有镜像,请使用:

docker images

或者使用较新的命令格式:

docker image ls

这两个命令都会产生相同的输出:

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
ubuntu       latest    1318b700e415   4 weeks ago   72.8MB
ubuntu       20.04     1318b700e415   4 weeks ago   72.8MB

理解镜像标签

Docker 镜像通过标签进行标识。标签格式通常为:

repository:tag

其中:

  • repository:通常格式为 username/image-name,对于官方镜像,则仅为 image-name
  • tag:指定版本(例如,latest20.043.9-alpine

如果省略标签,Docker 假定你想要 latest 标签。

获取镜像详细信息

要查看有关镜像的详细信息,请使用:

docker image inspect ubuntu:latest

此命令显示一个 JSON 对象,其中包含所有镜像元数据,包括层、配置和环境变量。

要查看镜像层的历史记录:

docker history ubuntu:latest

这显示了镜像的构建方式,逐层构建。

从镜像运行容器

现在你已经下载了一些 Docker 镜像,让我们学习如何基于这些镜像创建和运行容器。

运行一个基本容器

要从镜像运行容器,请使用 docker run 命令:

docker run ubuntu echo "Hello from Docker"

此命令:

  1. 基于 Ubuntu 镜像创建一个新容器
  2. 在容器内运行命令 echo "Hello from Docker"
  3. 在命令完成后退出

你应该看到输出:

Hello from Docker

运行一个交互式容器

要与容器交互,请使用 -it 标志(交互式终端):

docker run -it ubuntu bash

这会在容器内启动一个 bash shell。你现在实际上“进入”了容器,可以运行命令。

尝试几个命令:

ls
cat /etc/os-release

要退出容器,请键入:

exit

列出正在运行的容器

要查看所有正在运行的容器:

docker ps

由于我们的容器在完成后立即退出,你可能看不到任何输出。要查看所有容器,包括已停止的容器:

docker ps -a

这会显示所有容器、它们的状态以及创建/退出的时间。

容器生命周期

容器具有生命周期:

  1. Created(已创建):容器已创建但未启动
  2. Running(正在运行):容器当前正在执行
  3. Paused(已暂停):容器执行已暂停
  4. Stopped(已停止):容器已退出但仍然存在
  5. Removed(已删除):容器已删除

你可以使用以下命令删除已停止的容器:

docker rm <container_id>

<container_id> 替换为 docker ps -a 输出中显示的 ID。

要在容器退出后自动删除它,请使用 --rm 标志:

docker run --rm ubuntu echo "This container will be removed after execution"

运行一个 Web 服务器容器

让我们通过运行一个 Nginx Web 服务器来尝试一些更实际的操作:

docker pull nginx:alpine

这会拉取一个基于 Alpine Linux 的轻量级 Nginx 镜像。

现在,运行一个容器,将你的主机上的端口 8080 映射到容器内的端口 80:

docker run -d -p 8080:80 --name my-nginx nginx:alpine

此命令:

  • -d:在分离模式(后台)运行容器
  • -p 8080:80:将你的主机上的端口 8080 映射到容器内的端口 80
  • --name my-nginx:将容器命名为 "my-nginx"

现在,你可以在 Web 浏览器中导航到 http://localhost:8080 来访问 Nginx 欢迎页面,或者使用 curl:

curl http://localhost:8080

你应该看到 Nginx 欢迎页面的 HTML 内容。

要停止并删除此容器:

docker stop my-nginx
docker rm my-nginx

总结

祝贺你完成了这个 Docker 镜像搜索和使用实验。在本教程中,你已经:

  1. 验证了你的 Docker 安装,并理解了 Docker 镜像的概念
  2. 学习了如何使用 docker search 命令搜索 Docker 镜像
  3. 使用 docker pull 将 Docker 镜像下载到你的本地机器
  4. 列出并检查了你的本地 Docker 镜像
  5. 使用各种 docker run 选项从这些镜像创建和运行容器
  6. 了解了容器生命周期以及如何管理容器

这些技能构成了在你的开发项目中与 Docker 协作的基础。你现在可以搜索、下载和使用 Docker 镜像,为你的应用程序创建容器化环境。

你 Docker 之旅的下一步可能包括:

  • 学习如何使用 Dockerfile 创建你自己的 Docker 镜像
  • 了解 Docker 网络和数据持久性
  • 探索 Docker Compose,用于多容器应用程序
  • 深入研究使用 Kubernetes 进行容器编排

继续尝试不同的 Docker 镜像,以发现可用于加速你的开发工作流程的大量预构建容器生态系统。