优化 .net core 应用的 dockerfile

Intro

在给 .net core 应用的写 dockerfile 的时候一直有个苦恼,就是如果有很多个项目,在 dockerfile 里写起来就会很繁琐,有很多项目文件要 copy,dockerfile 还不支持直接批量复制项目文件,今天要改的一个项目也是有好多个项目文件,不想再一个一个复制,于是 google 一下看有没有比较好的解决方案,找到一个折中的解决方案,分享一下

Solution

  1. 首先把所有的项目文件拷贝到 docker 镜像内 COPY */*.csproj ./

  2. 然后根据项目文件名称创建项目文件夹,并移动项目文件到对应的项目目录下

原来的 dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-alpine AS build-envWORKDIR /src

# Copy csproj and restore as distinct layersCOPY ActivityReservation.Common/*.csproj ActivityReservation.Common/COPY ActivityReservation.Models/*.csproj ActivityReservation.Models/COPY ActivityReservation.DataAccess/*.csproj ActivityReservation.DataAccess/COPY ActivityReservation.Business/*.csproj ActivityReservation.Business/COPY ActivityReservation.Helper/*.csproj ActivityReservation.Helper/COPY ActivityReservation.WechatAPI/*.csproj ActivityReservation.WechatAPI/COPY ActivityReservation.AdminLogic/*.csproj ActivityReservation.AdminLogic/COPY ActivityReservation.API/*.csproj ActivityReservation.API/COPY ActivityReservation/ActivityReservation.csproj ActivityReservation/

# RUN dotnet restore ActivityReservation/ActivityReservation.csproj## diff between netcore2.2 and netcore3.0WORKDIR /src/ActivityReservationRUN dotnet restore

# copy everything and buildCOPY . .RUN dotnet publish -c Release -o out ActivityReservation/ActivityReservation.csproj

# build runtime imageFROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine

LABEL Maintainer="WeihanLi"WORKDIR /appCOPY --from=build-env /src/ActivityReservation/out .EXPOSE 80ENTRYPOINT ["dotnet", "ActivityReservation.dll"]

修改之后的 dockerfile

FROM mcr.microsoft.com/dotnet/core/sdk:3.0-alpine AS build-envWORKDIR /src

# Copy csproj and restore as distinct layers# https://andrewlock.net/optimising-asp-net-core-apps-in-docker-avoiding-manually-copying-csproj-files-part-2/COPY */*.csproj ./RUN for file in $(ls *.csproj); do mkdir -p ${file%.*}/ && mv $file ${file%.*}/; done

## diff between netcore2.2 and netcore3.0WORKDIR /src/ActivityReservationRUN dotnet restore

# copy everything and buildCOPY . .RUN dotnet publish -c Release -o out ActivityReservation/ActivityReservation.csproj

# build runtime imageFROM mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine

LABEL Maintainer="WeihanLi"WORKDIR /appCOPY --from=build-env /src/ActivityReservation/out .EXPOSE 80ENTRYPOINT ["dotnet", "ActivityReservation.dll"]

是不是精简了许多,来看一下修改前后的对比,更明显的对比一下:

核心代码:

 # 拷贝所有的二级目录下的项目文件COPY */*.csproj ./# 根据项目文件名称创建项目文件夹,并移动项目文件到对应的项目目录下RUN for file in $(ls *.csproj); do mkdir -p ${file%.*}/ && mv $file ${file%.*}/; done

More

注:上面的方法适用于项目文件目录名称和项目文件名称一致的情况,默认创建的项目应该都会符合这样的要求,如果你的项目文件是三级目录,如 src/*/*.csproj 的,需要自己根据项目情况调整 dockerfile

有没有学到呢~~

Reference

  • https://stackoverflow.com/questions/51372791/is-there-a-more-elegant-way-to-copy-specific-files-using-docker-copy-to-the-work

  • https://andrewlock.net/optimising-asp-net-core-apps-in-docker-avoiding-manually-copying-csproj-files-part-2/

  • https://github.com/WeihanLi/ActivityReservation/blob/dev/Dockerfile

views 多个文件夹 netcore_优化 .net core 应用的 dockerfile相关推荐

  1. views 多个文件夹 netcore_.NET Core 分发打包

    由于 .NET Core 现已可用于更多平台,因此了解如何为其打包.命名并进行版本控制将很有用. 这样,无论用户选择在哪里运行 .NET,包维护人员均可以帮助确保获得一致的体验. 本文对以下用户非常有 ...

  2. views 多个文件夹 netcore_.NET Core中的使用Kestrel服务器理解及应用

    Kestrel是一个基于libuv的跨平台.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core模板项目使用Kestrel作为默认的web服务器. Kestr ...

  3. 优化 .net core 应用的 dockerfile

    优化 .net core 应用的 dockerfile Intro 在给 .net core 应用的写 dockerfile 的时候一直有个苦恼,就是如果有很多个项目,在 dockerfile 里写起 ...

  4. views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...

    Visual Studio 2019发布.NET Core项目部署或者独立运行的方法 Visual Studio 2019是一款专为程序开发人员设计,支持 Windows 和 Mac系统,适用范围广, ...

  5. vue文件命名规范和文件夹命名规范

    views 命名 views 文件夹下面是由 以页面为单位的vue文件 或者 模块文件夹 组成的,放在 src 目录之下,与 components.assets 同级. views 下的文件夹命名 v ...

  6. vue-cli脚手架初始化项目各个文件夹用途

    一.安装Vue脚手架 1.第一步(仅第一次执行):全局安装@vue/cli npm i @vue/cli -g 2.切换到要创建项目的目录,然后创建项目 vue create XXX 3.启动项目 n ...

  7. Drupal8 社区文档之主题文件夹结构

    主题是一组文件,定义了表示层.你也可以创建一个或多个"子主题"或主题变奏曲.只有.info.yml文件是必需的,但最重要的主题和分主题将使用其他文件以及.本页列出的文件和文件夹,发 ...

  8. win7系统计算机文件夹缓慢,windows7搜索文件非常慢的解决办法以及优化方法

    用过windows7的朋友应该都知道:通常情况下windows 7搜索文件是相当慢的,甚至还有时完全搜不到文件.这一点着实让大硬盘用户头疼不已,以至于不得不转投第三方搜索工具来搜索文件,如果你还是喜欢 ...

  9. win10文件夹加密_win10优化清理工具:Windows10下删除垃圾文件的12个最佳工具

    您的电脑有时可能会充满不必要的临时文件和程序,从而导致速度变慢.垃圾文件和应用程序可能是一个问题,所以今天我们将向您展示在Windows10上删除垃圾的最佳工具.以下便是ghost123为大家推荐的w ...

最新文章

  1. nginx内置变量 大全
  2. 儿童手工制作日历_怎么做手工儿童卡通绵羊日程管理小日历
  3. php opcache 坑,PHP7 opcache缓存清理问题
  4. 双中心积分计算氟化氢HF的动能和势能
  5. 动态添加 ajax,ajax动态的添加内容【原创】
  6. 供给测结构性改革内容_智能包装结构,提高可测性
  7. 威纶触摸屏使用说明书_MODBUS通信之触摸屏与变频器通信知识分享(一)
  8. Javascript高级程序设计第二版第十二章--Event--笔记
  9. 图解TCP 的重传、滑动窗口、流量控制和拥塞控制机制
  10. 程序员的进阶课-架构师之路(16)-散列表(哈希表)
  11. 《PHP、MySQL和Apache入门经典(第5版)》一2.7 基本安全规则
  12. 两个list取交集_Java基础面试题-说说你知道的几个Java集合类:list、set、queue、map...
  13. fmt—fmt:formatDate的输出格式
  14. 微软桌面虚拟化MED-V系列教程
  15. 轮式联合收割机液压系统设计
  16. ubuntu 20.10 安装万能五笔(ibus模式)
  17. CAD重装时显示已安装
  18. mysql中的alter_MySQL中Alter用法
  19. Python 爬取拉钩网工作岗位
  20. 成功解决FAT32 No GRLDR问题

热门文章

  1. DOTNET零碎要点---字符串截取操作
  2. Video-Swin-Transformer (二)
  3. java版本不兼容_java 中jdk版本不兼容的问题小记
  4. 源数据怎么排查重复MySQL_面试官:在使用mysql数据库时,遇到重复数据怎么处理?...
  5. mysql rpm server_记录一次最新版MySQL-server-5.6.20-1.el6.x86_64.rpm的安装
  6. 如何获得CSDN深色模式(基于Edge的强制深色获取)
  7. radiobutton怎么变成竖排_民间修谱悄然兴起,花120万元修家谱,你怎么看?【饮茶论道】...
  8. 大数乘加运算然后取模 c++_技术解析 | FPGA运算单元可支持高算力浮点
  9. mysql 5.7.29下载安装_deepin20 离线安装 MySQL5.7.29
  10. location定位_javascript自学记录:location对象