ASP.NET Core的常用命令
在使用VS 2019、VSCode、Rider这类IDE写完代码之后,在命令行进入项目目录,尝试使用以下命令来恢复、编译、发布、运行项目
- 恢复所有的
NuGet包
这里的项目文件可以省略,自己在命令行中执行可以省略,但是如果将命令写到文件中,为了方便理解,一般会将项目文件写上dotnet restore [项目名.csproj] - 编译
dotnet build [项目名.csproj] -c Release -o /app/build- 项目文件解释参照上面
-c表示编译配置,这里指定编译配置为Release-o表示编译后文件输出到哪个目录,这里指定编译后输出目录为/app/build
- 发布
dotnet publish [项目名.csproj] -c Release -o /app/publish- 命令参数与编译的参数基本一致
- 运行
在生成发布文件的目录里运行dotnet [项目名称.dll]
Dockerfile中的命令
为了快速看到效果,这里只是列举了下面简单示例使用到的命令
FROM
指定运行是镜像,例如FROM mcr.microsoft.com/dotnet/core/aspnet:3.1,后面用AS命令可以在执行命令时给镜像起别名,例如FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base,即表示将mcr.microsoft.com/dotnet/core/aspnet:3.1这个镜像起别名为base
当需要多个镜像的时候,可多次使用这个命令
WORKDIR
设定工作目录,类似命令行中的cd命令,设定之后后续的命令相当于在工作目录中运行
COPY
拷贝文件,这个命令可以拷贝当前宿主机的文件,也可以拷贝上面那种引用多个镜像进行编译的文件到当前镜像
- 拷贝宿主机文件
表示拷贝当前文件夹的所有文件到镜像中的当前文件夹,一般在执行这个命令之前会设置好工作目录,表示将宿主机当前文件夹中的所有文件拷贝到镜像中的工作目录中COPY . ./ - 拷贝其他镜像文件
使用COPY --from=build /app/publish .--from=build表示从build的镜像中拷贝文件,这里的build是引入镜像时指定的别名,/app/publish是build镜像的文件路径,最后一个.是指要拷贝到当前镜像来的目录,.表示当前路径,一般也是配合WORKDIR使用
RUN
执行命令,构建镜像的时候需要安装其他软件或者编译文件的命令在这里执行,多条命令可以用&&来连接,以发布ASP.NET Core项目为例,将代码拷贝到镜像之后,需要进行restore、build、publish,就可以在这里使用,例如:
RUN dotnet restore "./Jiamiao.x.ServiceA.csproj" && dotnet build "./Jiamiao.x.ServiceA.csproj" -c Release -o /app/build && dotnet publish "./Jiamiao.x.ServiceA.csproj" -c Release -o /app/publish
ENTRYPOINT
一样是执行命令,但是这里是容器启动的时候要执行的命令,比如上面那些恢复、编译、发布的命令就不能在这里执行,因为容器启动的时候是不用做这些操作的,作为容器启动,只需要启动站点即可,所以这里使用的是运行命令,所以每个Dockerfile只有一个ENTRYPOINT,多个ENTRYPOINT后面会覆盖前面
ENTRYPOINT [ "dotnet","Jiamiao.x.ServiceA.dll" ]
上面的命令等于在命令行执行dotnet Jiamiao.x.ServiceA.dll这个命令
具体操作
创建项目
创建名字为Jiamiao.x.ServiceA的ASP.NET Core项目,类型为API,这里只是做发布测试,所以不需要动任何代码
创建Dockerfile文件
这里使用VSCode为例,在VSCode中安装Docker扩展,如下图

按Ctrl + Shift + P,打开控制面板,输入add docker,选择Docker:Add Docker Files To Workspace,如下图

选择.NET:ASP.NET Core,如下图

选择Linux,如下图

选择No,如下图

默认输入80, 443保持不变,回车即可生成Dockerfile文件

好了!这里的文件内容不是我们想要的,直接删掉Dockerfile里的文件内容即可,我们主要是要自动生成一个.dockerignore文件
编写Dockerfile文件
确定以下思路,这里需要将代码拷贝进容器进行编译发布,然后再将发布好的文件拷贝到运行时的镜像中,容器运行时启动站点,具体代码如下:
# 指定运行是镜像
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
# 指定编译和发布镜像
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
# 设置工作目录为src
WORKDIR /src
# 拷贝所有文件到容器中的工作目录
COPY . ./
RUN dotnet restore "./Jiamiao.x.ServiceA.csproj" && dotnet build "./Jiamiao.x.ServiceA.csproj" -c Release -o /app/build && dotnet publish "./Jiamiao.x.ServiceA.csproj" -c Release -o /app/publish
FROM base as final
WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT [ "dotnet","Jiamiao.x.ServiceA.dll" ]
这里使用了两个镜像,一个是编译发布用的mcr.microsoft.com/dotnet/core/sdk:3.1简称为build,一个是运行时用的mcr.microsoft.com/dotnet/core/aspnet:3.1简称base
生成镜像
在项目根目录,即Dockerfile所在目录运行预下命令
docker build -t xiejiamiao/aspnetcore .
其中xiejiamiao/aspnetcore为镜像名字,后面的.表示使用当前目录的Dockerfile。如果生成成功,使用docker images应该就可以看到刚刚生成的镜像,执行以下命令启动容器
docker run -d -p 8080:80 xiejiamiao/aspnetcore --name ASPNETCore-X
-d表示后台运行容器8080:80是指将宿主机的8080端口映射到容器中的80端口xiejiamiao/aspnetcore为镜像的名字ASPNETCore-X为镜像运行起来的容器的名字
容器启动成功后,访问http://127.0.0.1:8080/WeatherForecast应该就可以看到返回一些json

本文详细介绍如何使用Docker部署ASP.NET Core应用,包括构建、发布及容器化步骤。通过示例展示了如何编写Dockerfile,实现代码的编译、发布,并最终运行容器。
97

被折叠的 条评论
为什么被折叠?



