介绍
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.04 或 nginx: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"
此命令:
- 从
ubuntu:22.04镜像创建一个新容器 - 在容器内运行
echo "Hello from Ubuntu container"命令 - 显示输出:
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
此命令:
- 从
nginx镜像创建一个名为nginx-server的容器 - 在分离模式 (
-d) 下运行它 - 将你的主机上的端口 8080 映射到容器中的端口 80
- 返回一个容器 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 镜像的基本技能:
- 了解 Docker 镜像是什么以及它们在注册表中的组织方式
- 从 Docker Hub 搜索和拉取 Docker 镜像
- 管理你的本地 Docker 镜像,包括列出、检查和删除它们
- 使用 Docker 镜像以不同模式运行容器
这些技能构成了使用 Docker 的基础,并将使你能够在你的开发工作流程中利用容器化。你现在可以从公共或私有注册表中拉取任何 Docker 镜像,并使用它们来运行容器化的应用程序。
进一步学习的下一步:
- 使用 Dockerfile 创建你自己的 Docker 镜像
- 使用 Docker Compose 进行多容器应用程序开发
- 使用 Docker 卷进行持久性存储
- 设置容器网络
继续探索 Docker Hub 上可用的庞大的 Docker 镜像生态系统,以找到可以加速你的开发过程的工具和应用程序。



