.NetCore WebApi 项目Docker 部署
.Net 5 之后版本编写的项目代码编译后均可以分别部署在 Windows、Linux系统下。只需要安装对应的SDK或者运行时。
这篇文章主要介绍.Net项目编译之后通过docker镜像部署WebApi项目
了解dotnet命令
dotnet 命令详细说明链接。不得不说微软的文档写的非常详细。
主要了解一下信息
新建WebApi项目
-
新建一个 webapi 项目
这里利用dotnet命令创建一个webapi项目
mkdir DockerPublishDemo cd DockerPublishDemo dotnet new webapi
该命令片段 创建一个名为
DockerPublishDemo
的空文件夹->进入文件夹->创建webapi
在空文件中创建项目,默认项目名称与文件夹名称一致。 -
运行项目
dotnet run
默认项目监听
http://localhost:5000
, webapi项目没有前端页面。可以打开swagger测试页打开接口说明
访问地址https://localhost:5001/swagger/index.html
-
编辑项目
利用VS打开项目
选中项目 右键->添加->Docker 支持
查看DockerFile
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. # 引用dotnet 程序包 FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 # 还原项目 FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src COPY ["DockerPublishDemo.csproj", "."] RUN dotnet restore "./DockerPublishDemo.csproj" # 构建项目 COPY . . WORKDIR "/src/." RUN dotnet build "DockerPublishDemo.csproj" -c Release -o /app/build # 发布项目 FROM build AS publish RUN dotnet publish "DockerPublishDemo.csproj" -c Release -o /app/publish # 运行 FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "DockerPublishDemo.dll"]
可以看到 DockerFile 中的命令基本上全是dotnet 命令。几个重要的块已经标记出来。基本不需要修改
-
编辑项目
打开
Startuo.cs
文件 注释开发环境下 应用swagger
appsettings.json
中添加 固定绑定端口号"Kestrel": { "Endpoints": { "Http": { "Url": "http://*:5000" } } }
打包镜像
如果开发机器上 安装的有Docker 可以直接在文件夹下运行 docker build
构建docker 镜像
一般在开发测试环境 将代码上传到Git上、可以配置自动化部署,这篇文章暂不介绍。
在上篇文章中我本地已经安装了Linux系统 Docker 环境。这里我将直接拷贝代码 在服务上运行
在linux 进入到文件夹 运行
docker build -t webapi:1.0 .
此命令为 docker 构建当前文件下项目 镜像名称为webapi:1.0
默认寻找 DockerFile
文件中的配置
查看构建后的镜像文件
docker images
运行daocker 镜像
docker run -d -p 5100:5000 --name webapidemo webapi:1.0
-d
为后台运行 -p
映射端口 --name
容器名称 webapi:1.0为镜像的名称和版本号
测试运行结果
查看Linux 链接IP
在另外一台服务器上通过 ip:端口号 访问即可
清理资源
删除镜像前必须先删除容器
#查看镜像
docker images
#查看全部容器 去除-a 查看正在运行的容器
docker ps -a
#暂停容器
docker stop <CONTAINER ID>or<name>
# 删除容器
docker rm <CONTAINER ID>or<name>
#删除镜像
docker rmi <IMAGE ID>or<REPOSITORY>
标签:webapi,Web,DockerPublishDemo,NetCore,项目,Api,dotnet,镜像,docker
From: https://www.cnblogs.com/IsThis/p/18074096