ASP.NET Core 部署到docker

ASP.NET Core:ASP.NET Core程序使用Docker部署
前提:本地已有 ASP.NET Core web应用程序,并且已安装docker desktop。
提供两种思路进行

  1. 项目发布

在本地进行发布,

dotnet publish -c Release -p:PublishReadyToRun=true --no-self-contained -r ubuntu.20.04-x64 -o ./Release

发布模式
使用–configuration或者-c来指定发布的模式。默认为Debug,由于我们需要发布正式版所以采用Release。
R2R
ReadyToRun:在编译的时候除了编译中间码外也编译目标架构的机器码,但是仍然会保留中间码。这样会造成程序体积的翻倍,但是会加快启动速度,不过由于程序体积变大也可能减缓启动速度,是个很玄学的选项
不过微软文档上表示。
For instance, ReadyToRun can be used to reduce the response latency of the first use of Web API in an ASP.NET application.
比方说呢,R2R可以加快ASP.NET Core Web API的第一次响应速度。
更多内容见微软文档Microsoft Docs | ReadyToRun development overview
非自部署发布
使用–no-self-contained或者–self-contained false来指定不要自部署发布,即不包含.NET runtime。这样做有利于减少发布程序的大小。
但是在没有.NET runtime的机器上运行时需要先安装.NET runtime。
不过我的想法是在docker里面运行,可以使用ASP.NET Core的镜像,包含了.NET runtime。所以不需要自部署发布。
目标平台
使用–runtime <RUNTIME_IDENTIFIER>或-r来指定目标平台。后面接目标平台标识符,即Runtime Identifiers (RIDs)。
RID列表见微软文档:Microsoft Docs | Runtime Identifiers (RIDs)
因为启用了R2R所以需要指定目标平台。
另外我觉得(并没有根据的胡扯)指定发布平台比全平台编译效果好。
输出目录
使用–output <OUTPUT_DIRECTORY>或者-o设置输出目录。
在本地发布后,通过编写 Dockerfile 将发布文件复制到docker。或者是编写Dockerfile时将源代码复制到docker在docker内进行编译发布。

  1. 添加docker镜像加速(可选)

docker官方的镜像实在是慢的离谱,可以根据自己已有的选择服务加速。
使用了阿里云的镜像加速服务(因为我是阿里云服务器,这样速度也非常可观)

  1. 打开阿里云控制台的容器镜像服务中的镜像加速器Tag;
  2. 按照下面的操作文档修改,比如Ubuntu为:
    1. 进入目录/etc/docker(如果没有就创建一个)
    2. 编辑文件daemon.json(如果没有就创建一个)
    3. 写入如下内容:{“registry-mirrors”: [“https://9clpqmyk.mirror.aliyuncs.com”]},网址在上面的“加速器地址”处有写。
    4. sudo systemctl daemon-reload重载
    5. sudo systemctl restart docker重启docker
  3. Dockerfile 编写

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
引用ASP.NET Core镜像
首先我不希望发布自部署应用程序,因为它过于庞大。所以我们可以考虑引用ASP.NET Core Runtime的Docker镜像:

FROM mcr.microsoft.com/dotnet/aspnet:5.0

这句话引用了ASP.NET Core的docker镜像,里面有包含Runtime。
设置目录
首先需要使用COPY命令复制我们编译出来的文件,然后使用WORKDIR来指定工作目录(就是启动程序的路径)。

# Copy Files
COPY . /public# Set Workdir
WORKDIR /public

请注意替换成自己编译输出的目录
设置时区
为了确保时间正确,设置一下时区

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" >/etc/timezone

开放端口

# Expose Port 80
EXPOSE 80

由于docker中是生产环境,所以会使用80端口而不是默认的5000。可以在执行程序的时候更改端口。总之,这里写你要暴露的端口咯。
运行程序

CMD ./WebApplication

注意替换为你的程序名
使用参数–urls "http://:6000"来设置启动的端口(127.0.0.1为监听本机)。可以使用类似于–urls "http://:6000;http://:6001;http://:6002;http://*:6003"监听多个端口。

  1. 创建容器
docker build -t MyWebApplication:v1.4.2 Release/

这句话将会创建一个docker容器,命令的格式如下

docker build -t <container name>:<tag> <directory>

注意替换为自己容器名称和标签以及构建出来的目录

  1. 运行容器
docker run -d -p 6000:80 MyWebApplication:v1.4.2

其中-p 6000:80的意思是讲容器暴露的80端口映射到本机的6000端口,而后面的MyWebApplication:v1.4.2则是刚才创建容器时候写的container name和tag。

ASP.NET Core 使用swagger

.NET core 使用Swagger

ASP.NET Core 部署到docker相关推荐

  1. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json

    这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 -- 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...

  2. 【Step By Step】将Dotnet Core部署到Docker下

    一.使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章<尝试.Net Core-使用.Net Core + Entity FrameWor ...

  3. Docker ASP.NET Core (5):Docker Compose

    Docker & ASP.NET Core (5):Docker Compose 原文:Docker & ASP.NET Core (5):Docker Compose 第一篇:把代码 ...

  4. 【Step By Step】将Dotnet Core部署到Docker(中)

    [Step By Step]将Dotnet Core部署到Docker(中) 原文:[Step By Step]将Dotnet Core部署到Docker(中) 在Docker中运行MySql MyS ...

  5. 【Step By Step】将Dotnet Core部署到Docker上

    [Step By Step]将Dotnet Core部署到Docker上 原文: [Step By Step]将Dotnet Core部署到Docker上 本教程的前提是,你已经在Linux服务器上已 ...

  6. Asp.Net Core部署:早知道,还是docker!以及一点碎碎念

    前言 AspNetCore技术栈在我们团队里的使用也有一段时间了,之前的部署方式一直是本地编译之后上传可执行文件到服务器,使用supervisor来管理进程这种很原始的方式. 参考之前的文章:Asp. ...

  7. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署

    最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...

  8. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  9. ASP.NET Core部署到Linux服务器(CentOS7 x64)

    前言 本文主要讲解如何一步步将ASP.NET Core网站发布到Linux服务器,文中会讲解具体步骤及需要避免的各种问题. 目录 一.环境介绍 二.创建及发布ASP.NET Core网站项目 三.服务 ...

最新文章

  1. Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
  2. QQ好友列表数据模型封装
  3. 数据泄漏保护:你的企业的投资是否足够?
  4. mysql特别点_Mysql 特别注意点!
  5. 好程序员web前端技术之CSS3过渡
  6. Microsoft POS for .NET v1.12 发布了
  7. Nginx 学习笔记(十)介绍HTTP / 2服务器推送(译)
  8. torchvision.transforms
  9. maven项目的创建
  10. 发现了《ACE程序员教程》中一个例程的问题
  11. win10计算机无法复制文件,Windows10系统无法复制文件到u盘的解决方案
  12. python爬取一条新闻内容_一个爬取近百万数据的Python爬虫
  13. ATECC508A芯片开发笔记(一):初识加密芯片
  14. 解决:win10打印机连上,但是控制面板显示未指定
  15. CMDB资产管理系统
  16. Android SlidingMenu 开源项目使用示例(一)
  17. 基于MTCNN和FaceNet的实时人脸检测识别系统
  18. 基于强化学习SAC_LSTM算法的机器人导航
  19. 文献阅读经验--以基于深度学习的医学图像配准为例
  20. 期望、方差、标准差、协方差、相关系数、协方差矩阵、残差、残差平方和(SSE)、标准化残差,残差分析

热门文章

  1. 澳利率攀升,加息步伐将在某个时候放缓
  2. vue生命周期 钩子函数
  3. 关于PPT2003的音频路径问题
  4. fastadmin 实现自动生成二维码
  5. 哈尔滨富力丽思卡尔顿酒店;上海迪士尼度假区在绚丽烟花中迎接2022 | 全球旅报...
  6. 使用LVM对服务器磁盘进行扩容
  7. 《那些年啊,那些事——一个程序员的奋斗史》——102
  8. 程序员因压力太大,转行做游戏制作人,结果把全球玩家都逼疯了!
  9. 优信二手车:赛道虽好,生意难做
  10. OpenWrt U盘根目录设置