练习 - 检索现有 Docker 映像并本地部署
若要生成和运行自己的 Docker 映像,最好是采用 Docker 中心的现有映像,然后在计算机本地运行。
作为公司应用程序的概念证明,你决定尝试从 Docker 中心运行示例映像。 你选择的映像实现基本的 .NET Core ASP.NET Web 应用。 在建立部署 Docker 映像的进程后,将能够使用 Docker 运行公司的一个 Web 应用。
在此练习中,你将从 Docker 中心拉取映像并运行它。 你将检查 Docker 的本地状态,以帮助了解部署的元素。 最后,将从计算机中删除容器和映像。
重要
本练习在你的计算机上执行,而不在 Azure 中。 你需要在本地安装 Docker 才能继续此练习。 下载:https://docs.docker.com/desktop/install/windows-install/
从 Docker 中心拉取并运行示例应用程序
在计算机上启动 Docker。
在本地计算机上打开命令提示符窗口。
输入以下代码,从 Docker Hub 注册表拉取 ASP.NET 示例应用映像。 此映像包含 Microsoft 开发的示例 Web 应用,并基于 Visual Studio 中可用的默认 ASP.NET 模板。
docker pull mcr.microsoft.com/dotnet/samples:aspnetapp
输入以下代码,验证该映像是否已存储在本地。
docker image ls
应会看见具有 aspnetapp 标记且名称为 mcr.microsoft.com/dotnet/samples 的存储库。
输入以下代码,启动该示例应用。 -d 标志是将其作为后台非交互式应用运行。 -p 标志用于将创建的容器中的端口 8080 映射到本地端口 8080。 此设置旨在避免与已在计算机上运行的任何 Web 应用发生冲突。 该命令使用实例的一长串十六进制标识符进行响应。
docker run -d -p 8080:8080 mcr.microsoft.com/dotnet/samples:aspnetapp
打开 Web 浏览器,并输入示例 Web 应用的 URL:
http://localhost:8080
。 应会看到类似于以下屏幕截图的页面:
检查本地 Docker 注册表中的容器
在命令提示符下,运行以下命令以查看本地注册表中正在运行的容器。
docker ps
输出应如下所示:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 96c851831ade mcr.microsoft.com/dotnet/samples:aspnetapp "dotnet aspnetapp.dll" 22 minutes ago Up 22 minutes 0.0.0.0:8080->80/tcp eager_montalcini
COMMAND 字段显示通过运行命令 dotnet aspnetapp.dll 启动的容器。 此命令调用 .NET Core 运行时以启动 aspnetapp.dll 中的代码(示例 Web 应用的代码)。 “PORTS”(端口)字段指示映像中的端口 8080 已映射到计算机上的端口 8080。 STATUS 字段显示应用程序仍在运行。 记下容器 NAME。
运行以下命令停止 Docker 容器,将
<NAME>
占位符替换为上一命令的输出名称。docker container stop <NAME>
运行以下命令,验证容器是否不再运行。 -a 标志指示该命令显示所有容器的状态,而不仅仅是在运行的容器的状态。 输出应显示容器的 STATUS 为“Exited”。
docker ps -a
在 Web 浏览器中,刷新示例 Web 应用的页面 (http://localhost:8080/). 它应该会失败,并出现“连接被拒绝”错误。
从本地注册表中删除容器和映像
尽管容器已停止,但它仍然处于加载状态并且可以重新启动。 在命令提示符窗口中运行以下命令将其删除,将
<NAME>
占位符替换为你的容器的名称。docker container rm <NAME>
通过运行以下命令验证容器是否已删除。 此命令应不再列出该容器。
docker ps -a
列出计算机上当前可用的映像。 输出应显示示例存储库。
docker image ls
从注册表中删除该映像。
docker image rm mcr.microsoft.com/dotnet/samples:aspnetapp
输出应列出大量未标记和已删除的项。 运行以下命令,再次列出映像并验证 microsoft/dotnet-samples Web 应用的映像是否已消失。
docker image ls