为了账号安全,请及时绑定邮箱和手机立即绑定

asp.net core 发布到docker

标签:
C# .NET

asp.net core 发布到 docker

  • asp.net core 打包成镜像运行在 docker 中,首先需要找到与项目对应的基础镜像,接着复制源码到容器或者克隆代码,然后执行构建打包命令,最后将发布后文件放到只有运行时的镜像,打包完成。
  • 以上就是大致过程,发布有两种选择,一种是打包成 nuget,发布到 nuget.org;另一种是打包成 docker 镜像,发布到 docker hub
  • asp.net core 一个官方例子
  • Dockerfile 命令,必看。

发布到 nuget

FROM mcr.microsoft.com/dotnet/core/sdk:2.2
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone # 设置时区
ARG AppKey
ARG Source
ARG ProjName=ProjName
WORKDIR /src
COPY ["${ProjName}/${ProjName}.csproj", "${ProjName}/"]
RUN dotnet restore "${ProjName}/${ProjName}.csproj"
COPY . .
WORKDIR /src/${ProjName}
RUN dotnet pack "${ProjName}.csproj" -c Release -o /app

WORKDIR /app
RUN dotnet nuget push *.nupkg -k ${AppKey} -s ${Source}
  • 以上 dockerfile 是比较通用的,通过参数传入项目名称、nuget 的 key 和 source,只是这里默认了这个项目文件 csproj 名称与文件夹名称相同。
  • 用法是:
docker build --build-arg AppKey=$NugetAppKey --build-arg Source=$NugetSource -t $CI_COMMIT_SHORT_SHA:latest .
  • 因为这里并不需要这个镜像,所以每次发布之后可以移除这个镜像
docker rmi $CI_COMMIT_SHORT_SHA:latest

发布到 docker 仓库

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
ARG ProjName=ProjName
WORKDIR /src
COPY ["${ProjName}/${ProjName}.csproj", "${ProjName}/"]
RUN dotnet restore "${ProjName}/${ProjName}.csproj"
COPY . .
WORKDIR /src/${ProjName}
RUN dotnet build "${ProjName}.csproj" -c Release -o /app  --no-restore

FROM build AS publish
RUN dotnet publish "${ProjName}.csproj" -c Release -o /app  --no-restore

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "${ProjName}.dll"]
  • 以上 dockerfile,在 dotnetsdk 中发布项目,最后生成的镜像使用 aspnet,这也是两个镜像的区别,sdk 可以构建项目,aspnet 是 runtime,只能运行项目。
  • 用法:
docker build -t ${ProjName}:latest --build-arg ProjName="${ProjName}" .
  • 发布到 docker 仓库,先登录后推送
# 登录
docker login -u "$REGISTRY_USER" -p "$REGISTRY_PASSWORD" localhost:32000

# 推送
docker tag ${ProjName}:latest localhost:32000/${ProjName}:latest && docker push localhost:32000/${ProjName}:latest

注意

  • dockerfile 中的 ProjName 变量可外面传入,也可设置默认值,只是为了更加通用,修改一个值即可用于其它项目
  • 打包 docker 的开放端口设置需要注意,如果程序运行监听的端口与开放端口不一致,可通过设置ASPNETCORE_URLS来解决
ENV ASPNETCORE_URLS="http://*:80/"
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消