如何拉取 Docker 镜像

DockerBeginner
立即练习

介绍

Docker 彻底改变了我们开发、部署和管理应用程序的方式。这个生态系统的核心是 Docker 镜像,它们是创建和运行容器化应用程序的构建模块。在本教程中,我们将指导你从注册中心拉取 Docker 镜像的过程,这是在你的项目中利用 Docker 强大功能的一个关键步骤。

通过完成这个实验(Lab),你将能够搜索 Docker 镜像,从 Docker Hub 拉取它们,并了解如何在你的容器化应用程序中使用它们。

理解 Docker 镜像

在开始拉取 Docker 镜像之前,了解 Docker 镜像是什么以及它们如何工作非常重要。

什么是 Docker 镜像?

Docker 镜像是一个轻量级、独立的软件包,其中包含运行应用程序所需的一切:

  • 应用程序代码
  • 运行时环境
  • 库和依赖项
  • 环境变量
  • 配置文件

镜像用于创建 Docker 容器的模板,而 Docker 容器是这些镜像的运行实例。

Docker 镜像仓库

Docker 镜像存储在注册中心(registry)内的仓库(repository)中。最受欢迎的公共注册中心是 Docker Hub,它托管着数千个可直接使用的镜像。关于 Docker Hub 的一些关键点:

  • 它包含由软件供应商维护的官方镜像
  • 它托管由用户创建的社区贡献镜像
  • 它允许组织拥有用于专有镜像的私有仓库

Docker 镜像命名

Docker 镜像遵循特定的命名约定:

[registry/]username/repository:tag

其中:

  • registry 是注册中心的主机名(可选,默认为 Docker Hub)
  • username 是 Docker Hub 用户名或组织名称
  • repository 是镜像名称
  • tag 是镜像版本(可选,默认为 "latest")

例如:ubuntu:22.04nginx:latest

检查你的 Docker 安装

在继续之前,让我们确保 Docker 已正确安装在你的系统上。打开一个终端并运行:

docker --version

你应该看到类似如下的输出:

Docker version 20.10.21, build baeda1f

这确认 Docker 已安装并可以使用。

在下一步中,我们将搜索并拉取我们的第一个 Docker 镜像。

搜索和拉取你的第一个 Docker 镜像

现在我们了解了什么是 Docker 镜像,让我们学习如何从 Docker Hub 查找和拉取它们。

搜索 Docker 镜像

在拉取镜像之前,你可能想搜索可用的选项。使用 docker search 命令在 Docker Hub 上查找镜像:

docker search ubuntu

这将向你显示 Docker Hub 上可用的与 Ubuntu 相关的镜像列表。你应该看到类似如下的输出:

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

标有 [OK]OFFICIAL 列表示由 Docker 或软件供应商维护的镜像。

拉取 Docker 镜像

要将 Docker 镜像下载到你的本地机器,请使用 docker pull 命令,后跟镜像名称:

docker pull ubuntu:22.04

此命令从 Docker Hub 拉取 Ubuntu 22.04 镜像。你应该看到类似如下的下载进度:

22.04: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

输出显示 Docker 正在下载镜像的各个层。每一层代表一组文件系统更改。

拉取没有标签的镜像

如果你没有指定标签,Docker 将拉取标记为 latest 的镜像:

docker pull nginx

这将拉取最新版本的 Nginx Web 服务器镜像:

Using default tag: latest
latest: Pulling from library/nginx
a603fa5e3b41: Pull complete
(...more layers...)
Digest: sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

从其他注册中心拉取

默认情况下,docker pull 从 Docker Hub 下载镜像。要从其他注册中心拉取,请包含注册中心主机名:

docker pull mcr.microsoft.com/dotnet/sdk:6.0

此命令从 Microsoft 容器注册中心拉取 .NET SDK 6.0 镜像。

现在你已经拉取了一些 Docker 镜像,让我们继续下一步,学习如何管理它们。

管理 Docker 镜像

在拉取 Docker 镜像之后,你需要知道如何有效地列出、检查和管理它们。

列出 Docker 镜像

要查看你已下载到本地机器上的所有 Docker 镜像,请使用 docker images 命令(或其别名 docker image ls):

docker images

你应该看到类似如下的输出:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        22.04     58db3edaf2be   3 weeks ago    77.8MB
nginx         latest    605c77e624dd   4 weeks ago    142MB

此输出显示:

  • REPOSITORY:镜像的名称
  • TAG:镜像的版本
  • IMAGE ID:镜像的唯一标识符
  • CREATED:镜像的创建时间
  • SIZE:镜像在磁盘上的大小

检查 Docker 镜像

要获取有关特定镜像的详细信息,请使用 docker inspect 命令:

docker inspect ubuntu:22.04

此命令显示一个 JSON 数组,其中包含有关镜像的所有详细信息,包括:

  • 层信息
  • 环境变量
  • 架构
  • 操作系统
  • 配置

输出非常长且详细。以下是你可能看到的内容的片段:

[
    {
        "Id": "sha256:58db3edaf2beXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "RepoTags": [
            "ubuntu:22.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:2b7412e6465c3fc7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f"
        ],
        ...
    }
]

镜像历史

要查看镜像的层历史(它是如何构建的),请使用 docker history 命令:

docker history ubuntu:22.04

输出显示构成镜像的每一层:

IMAGE          CREATED       CREATED BY                                      SIZE
58db3edaf2be   3 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                0B
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:15efc167a417...     77.8MB

删除 Docker 镜像

当你不再需要某个镜像时,你可以使用 docker rmi 命令将其删除以释放磁盘空间:

docker rmi nginx

如果成功,Docker 将显示已删除的镜像 ID:

Untagged: nginx:latest
Untagged: nginx@sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Deleted: sha256:605c77e624ddb75e6110f997c58876bba43f0blindividualayeridshereXX
(...more layers deleted...)

如果镜像正被容器使用,你需要先删除容器或使用 -f(force,强制)选项:

docker rmi -f nginx

现在你知道如何管理你的 Docker 镜像了。让我们继续最后一步,我们将实际使用一个镜像来运行一个容器。

使用 Docker 镜像

拉取 Docker 镜像只是第一步。现在,让我们学习如何使用这些镜像来运行容器。

从镜像运行容器

要从镜像创建并启动一个容器,请使用 docker run 命令:

docker run ubuntu:22.04 echo "Hello from Ubuntu container"

此命令:

  1. ubuntu:22.04 镜像创建一个新容器
  2. 在容器内运行 echo "Hello from Ubuntu container" 命令
  3. 显示输出:
Hello from Ubuntu container

执行完该命令后,容器停止,因为它已经完成了它的任务。

运行交互式容器

要在容器内启动交互式 shell,请使用 -i(interactive,交互式)和 -t(terminal,终端)选项:

docker run -it ubuntu:22.04 bash

这为你提供了一个 Ubuntu 容器内的 bash shell,你可以在其中运行命令:

root@a1b2c3d4e5f6:/## ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

要退出容器,请键入 exit 或按 Ctrl+D

root@a1b2c3d4e5f6:/## exit
exit

在分离模式下运行容器

要在后台(分离模式)运行容器,请使用 -d 选项:

docker run -d --name nginx-server -p 8080:80 nginx

此命令:

  1. nginx 镜像创建一个名为 nginx-server 的容器
  2. 在分离模式 (-d) 下运行它
  3. 将你的主机上的端口 8080 映射到容器中的端口 80
  4. 返回一个容器 ID:
e1d0ac1dcb21a93d9d878dcf40c054eb9f3c2b1bf5ecce7c29b6fa8ce6b219c1

访问正在运行的容器

现在你可以在你的浏览器中通过 http://localhost:8080 访问 Nginx Web 服务器,或者使用 curl 来验证它是否工作:

curl localhost:8080

这应该显示 Nginx 欢迎页面 HTML:

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>

列出正在运行的容器

要查看所有正在运行的容器,请使用:

docker ps

这将显示有关你正在运行的容器的信息:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
e1d0ac1dcb21   nginx     "/docker-entrypoint.…"   30 seconds ago   Up 29 seconds   0.0.0.0:8080->80/tcp   nginx-server

停止和删除容器

要停止正在运行的容器:

docker stop nginx-server

要删除已停止的容器:

docker rm nginx-server

你现在已经成功地使用 Docker 镜像来运行容器了。这是在你的开发和部署过程中使用 Docker 的基本工作流程。

总结

祝贺你完成了这个 Docker 镜像实验。你已经学习了使用 Docker 镜像的基本技能:

  1. 了解 Docker 镜像是什么以及它们在注册表中的组织方式
  2. 从 Docker Hub 搜索和拉取 Docker 镜像
  3. 管理你的本地 Docker 镜像,包括列出、检查和删除它们
  4. 使用 Docker 镜像以不同模式运行容器

这些技能构成了使用 Docker 的基础,并将使你能够在你的开发工作流程中利用容器化。你现在可以从公共或私有注册表中拉取任何 Docker 镜像,并使用它们来运行容器化的应用程序。

进一步学习的下一步:

  • 使用 Dockerfile 创建你自己的 Docker 镜像
  • 使用 Docker Compose 进行多容器应用程序开发
  • 使用 Docker 卷进行持久性存储
  • 设置容器网络

继续探索 Docker Hub 上可用的庞大的 Docker 镜像生态系统,以找到可以加速你的开发过程的工具和应用程序。