专栏首页角落的白板报创建一个自定义 ASP.NET Core Docker 镜像

创建一个自定义 ASP.NET Core Docker 镜像

创建一个自定义ASP.NET Core RazorPage Docker镜像

本节课,我们通过创建一个自定义 Dockerfile 文件,将示例YoYoMooc.Exampleapp应用程序制作为 Docker 镜像。

创建 Dockerfile 文件

Docker Hub 包含了很多的一系列的应用程序镜像,但是没有我们当前YoYoMooc.Exampleapp程序的镜像,所以我们会使用 Docker 的技术来创建一个自定义镜像。

Dockerfile 文件,它是 Docker 镜像的描述文件,其中会包含一系列的命令,而 Docker 则会遵循这些规则命令一一执行。

YoYoMooc.Exampleapp根目录中,添加一个Dockerfile文件,添加内容如下:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
COPY dist /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "YoYoMooc.ExampleApp.dll"]

这五行命令就是为示例应用程序创建 Docker 镜像所需的全部内容。每一条 的命令在后面的章节中详细介绍。

配置基础镜像

Docker 镜像最强大的特点之一就是可以基于现有镜像,这意味着命令中包含了基本镜像所包含的所有文件。FROM 命令是第一个命令,在 Docker 文件,它指定了要使用的基础镜像。

在本例中,基础镜像被称为mcr.microsoft.com/dotnet/core/aspnet,而我指定的版本是 3.1 的版本,这是一个 ASP.NET Core 镜像。

该镜像由微软制作,它包含了.NET Core 运行时和 ASP.NET Core,我们可以通过它运行我们的项目,它不包含.NET SDK,所以我们的 Razorpage 应用必须提前编译完成,等待制作为镜像。

当然微软还提供了其他镜像:

  • SDK 地址:mcr.microsoft.com/dotnet/core/sdk:3.1
  • runtime 地址: mcr.microsoft.com/dotnet/core/runtime:3.1

复制应用程序文件

当您将 ASP.NET Core 应用程序容器化时,所有已编译的类文件,NuGet 包,配置文件,并将 Razor 视图添加到镜像中。COPY 命令复制文件或文件夹放入容器。

COPY dist /app

此命令是将dist的文件夹中的文件复制到容器/app的文件夹中。目前 dist 文件夹不存在,我们会在后面准备它。

设置工作目录

WORKDIR命令便是设置容器的工作目录,这是在运行时非常有用命令,当你需要指定某个路径或者文件的时,不必指定完整路径。Dockerfile 文件中的命令会将 COPY 命令创建的/app文件夹的路径,包含到容器的应用程序中。

公开 HTTP 端口

容器中的进程无需任何特殊措施即可打开网络端口,但 Docker 不允许外部世界访问它们,除非 Dockerfile 包含一个指定端口的EXPOSE命令,如下所示:

EXPOSE 80/tcp

这个命令告诉 Docker,它可以使容器外的 TCP 请求可用端口 80。对我们的示例应用程序,也需要这样做,这样 ASP.NET Core Kestrel 服务器才能接收到 HTTP 请求。

提示:在容器中处理端口是一个两步走的过程。在后面 "使用容器的工作 "部分,了解更多关于 关于如何完成配置,使服务器能够接收请求的详细信息。

运行应用程序

Docker 文件的最后一步是 ENTRYPOINT 命令,它告诉 Docker 此为容器的起点。

ENTRYPOINT ["dotnet", "YoYoMooc.ExampleApp.dll"]

该命令告诉 Docker 运行 dotnet cli 命令行工具来执行YoYoMooc.ExampleApp文件,我将在下一节中创建。不必指定YoYoMooc.ExampleApp文件的路径,因为它假定位于 WORKDIR 命令指定的目录中,而目录将包含所有的应用程序文件。

预备的应用程序镜像

Dockerfile 文件中的一些行命令可能并不是立即就能理解的,特别是如果你习惯于使用Visual StudioVisual Studio Code处理 ASP.NET Core MVC 项目。

在当前项目中的 Dockerfile 文件中的镜像不包括.NET Core SDK,如果你现在进行编译肯定会编译失败,并且由于我们指定了dist文件夹,所以也无法通过自动编译到指定文件夹。

输入以下命令:

dotnet restore ##还原包

dotnet publish --framework netcoreapp3.1 --configuration Release --output dist

dotnet restore命令是为了确保项目已经拥有所有需要的 Nuget 包。重要的命令是 dotnet publish,它可以编译应用程序,然后将其转换为转换成一个独立的文件集,其中包含了应用程序所需的所有内容。输出参数指定了编译后的项目应该被写到一个名为 dist 的文件夹中,这个文件夹对应 Dockerfile 中的 COPY 命令。

这里拆分成了两步,你可以直接使用dotnet publish 命令也是可以的,如果没有还原他会自动还原。

创建一个自定义镜像

要处理 Docker 文件并为示例应用程序生成镜像,请运行以下所示的命令

docker build . -t yoyomooc/exampleapp -f Dockerfile

docker build命令会创建一个新的镜像。build 关键字后面的句号提供了上下文,也就是 Docker 文件中的 COPY 等命令所使用的位置。

参数说明:

  • -t参数 :用于标记新的镜像名称为yoyomooc/exampleapp
  • -f参数:指定了创建镜像的说明文件即 Dockerfile 的完整名称。
  • 镜像取名规则的惯例是使用您的名字或您的组织名称,后面是应用的名称。

Docker 会下载它所需要的基本镜像,然后按照 Dockerfile 中的说明来进行生成新的镜像。当构建过程完成后,你可以通过运行docker images命令,查询生成的镜像列表。

REPOSITORY

TAG

IMAGE

ID

CREATED

SIZE

hello-world

latest

bf756fb1ae65

4 months ago

13.3kB

yoyomooc/exampleapp

latest

d79e42555679

About an hour ago

212MB

mcr.microsoft.com/dotnet/core/aspnet

3.1

79e79777c3bf

2 weeks ago

207MB

小结

从 3.X 开始微软的镜像就不再由 hub.docker.com 托管,是由微软官方进行独立维护,所以我们指定了镜像域名地址mcr.microsoft.com。所以产生了一个问题,网速慢,可以采用我自制的镜像。

  • aspnet 地址:registry.cn-hangzhou.aliyuncs.com/yoyosoft/dotnet/core/aspnet:3.1

本文分享自微信公众号 - 角落的白板报(jiaoluodebaibanbao),作者:梁桐铭

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 了解容器和Docker的发展背景

    在正式开始前,我们首先需要了解容器是什么,以及它为什么会变得如此流行;然后介绍Docker的发展历程,以及为什么需要使用这么一项容器化技术。

    角落的白板报
  • 3-1.在 Windows 系统中下载并安装 Docker-desktop

    Windows 的 Docker-desktop 是为在 Windows 10 上运行而设计的 Docker。

    角落的白板报
  • 在Ubuntu 16.04环境下安装Docker-CE(附视频教程)

    大纲 Docker的介绍 Ubuntu下安装Docker 快速体验Docker 利用Docker搭建个人博客 利用Docker搭建开源版本控制利器-GitLa...

    角落的白板报
  • 为什么Docker镜像大小与仓库中不一致?

    如果仔细观察你会发现,Docker宿主机中某个镜像所占用的磁盘空间和在 Docker Hub(仓库)上看到的镜像大小是不同的,例如 golang:1.9 在 D...

    用户1560186
  • 在 Docker 中部署 Node.js 网络服务器

    Node.js 是服务器端的 JavaScript 包,通常用于各种云应用程序。Docker 是一个容器平台。使用 Docker,用户无需经过安装和配置即可下载...

    FesonX
  • 如何为容器部署安装Docker和Pull图像

    这些步骤使用官方Ubuntu代码存储库安装Docker Community Edition(CE)。要在其他发行版上安装,请参阅官方安装页面。

    Techeek
  • Docker 安装

    国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

    traffic
  • Docker三十分钟快速入门(上)

    ​   最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃。那么本文我们来聊一聊Docker,和大家一起...

    阿豪聊干货
  • 30 分钟快速入门 Docker 教程

    在没有 Docker 的时代,我们会使用硬件虚拟化(虚拟机)以提供隔离。这里,虚拟机通过在操作系统上建立了一个中间虚拟软件层 Hypervisor ,并利用物理...

    Java技术江湖
  • Docker简介与安装

    Docker提供了一个可以运行你的应用程序的封装,或者说容器。它原本是dotCloud的一个内部项目,开源的时候吸引了大量的关注与讨论,后续导致dotCloud...

    踏歌行

扫码关注云+社区

领取腾讯云代金券