ASP.NET Core的常用命令
在使用VS 2019
、VSCode
、Rider
这类IDE写完代码之后,在命令行进入项目目录,尝试使用以下命令来恢复
、编译
、发布
、运行
项目
- 恢复所有的
NuGet
包这里的项目文件可以省略,自己在命令行中执行可以省略,但是如果将命令写到文件中,为了方便理解,一般会将项目文件写上1
dotnet restore [项目名.csproj]
- 编译
1
dotnet build [项目名.csproj] -c Release -o /app/build
- 项目文件解释参照上面
- -c 表示编译配置,这里指定编译配置为
Release
- -o 表示编译后文件输出到哪个目录,这里指定编译后输出目录为
/app/build
- 发布
1
dotnet publish [项目名.csproj] -c Release -o /app/publish
- 命令参数与编译的参数基本一致
- 运行
在生成发布文件的目录里运行1
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
拷贝文件,这个命令可以拷贝当前宿主机的文件,也可以拷贝上面那种引用多个镜像进行编译的文件到当前镜像
- 拷贝宿主机文件表示拷贝当前文件夹的所有文件到镜像中的当前文件夹,一般在执行这个命令之前会设置好工作目录,表示将宿主机当前文件夹中的所有文件拷贝到镜像中的工作目录中
1
COPY . ./
- 拷贝其他镜像文件使用
1
COPY --from=build /app/publish .
--from=build
表示从build
的镜像中拷贝文件,这里的build
是引入镜像时指定的别名,/app/publish
是build
镜像的文件路径,最后一个.
是指要拷贝到当前镜像来的目录,.
表示当前路径,一般也是配合WORKDIR
使用RUN
执行命令,构建镜像的时候需要安装其他软件或者编译文件的命令在这里执行,多条命令可以用&&
来连接,以发布ASP.NET Core
项目为例,将代码拷贝到镜像之后,需要进行restore
、build
、publish
,就可以在这里使用,例如:1
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
后面会覆盖前面上面的命令等于在命令行执行1
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
文件
确定以下思路,这里需要将代码拷贝进容器进行编译发布,然后再将发布好的文件拷贝到运行时的镜像中,容器运行时启动站点,具体代码如下:
1 | # 指定运行是镜像 |
这里使用了两个镜像,一个是编译发布用的mcr.microsoft.com/dotnet/core/sdk:3.1
简称为build
,一个是运行时用的mcr.microsoft.com/dotnet/core/aspnet:3.1
简称base
生成镜像
在项目根目录,即Dockerfile
所在目录运行预下命令
1 | docker build -t xiejiamiao/aspnetcore . |
其中xiejiamiao/aspnetcore
为镜像名字,后面的.
表示使用当前目录的Dockerfile
。如果生成成功,使用docker images
应该就可以看到刚刚生成的镜像,执行以下命令启动容器
1 | 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