Asp-Net-Core开发笔记:使用alpine镜像并加入健康检查
前言
使用 docker 部署 AspNetCore 应用已经是标配了,之前我一直使用 mcr.microsoft.com/dotnet/aspnet:8.0 这类镜像,简单粗暴,不过可以使用 alpine 进一步优化镜像大小。
很多开源工具的 docker 都有健康检查,这次我顺便也给加上了。
添加健康检查
注册服务
builder.Services.AddHealthChecks();
配置中间件
app.MapHealthChecks("/healthz");
之后测试一下,本地运行后访问 http://host:port/healthz 可以看到 Healthy 字样
修改 docker-compose
在应用配置下面增加 healthcheck 配置
这个镜像 mcr.microsoft.com/dotnet/aspnet 里自带了 wget ,所以直接用这个来请求健康检查接口就完事了,如果用 curl 还得去安装。
version: '3.6'
services:
web:
image: ${DOCKER_REGISTRY-}web
container_name: ids-lite
restart: always
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:80
build:
context: .
volumes:
- .:/app
networks:
- swag
healthcheck:
test: ["CMD-SHELL", "wget --spider http://localhost:80/healthz || exit"]
interval: 10s
timeout: 5s
retries: 5
networks:
swag:
name: swag
external: true
换成 alpine 基础镜像
还没有配置CICD之前,我使用了 FrameworkDependent 的方式来搭配 docker 部署,详见之前的文章: Asp-Net-Core开发笔记:FrameworkDependent搭配docker部署
换成 alpine 可以减少一半镜像体积,从 240MB 减少到 100MB 左右。
修改 dockerfile
在 8.0 后面加 -alpine 就行了
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine AS base
RUN apk add --no-cache icu-libs
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM base AS final
WORKDIR /app
COPY . .
ENTRYPOINT ["./IdsLite.Api"]
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
重新发布
之前在本机发布的时候,运行时选的是 linux-x64
这样发布出来的可执行文件是依赖 glibc 的
但是 alpine 基础镜像里是 musl libc
所以需要选择 linux-musl-x64 这个运行时,然后重新发布
dotnet publish -r linux-musl-x64
搞定~
参考资料
Asp-Net-Core开发笔记:使用alpine镜像并加入健康检查的更多相关文章
- ASP.NET Core之跨平台的实时性能监控(2.健康检查)
前言 上篇我们讲了如何使用App Metrics 做一个简单的APM监控,最后提到过健康检查这个东西. 这篇主要就是讲解健康检查的内容. 没看过上篇的,请移步:ASP.NET Core之跨平台的实时性 ...
- 在CentOS7 开发与部署 asp.net core app笔记
原文:在CentOS7 开发与部署 asp.net core app笔记 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lihongzhai/art ...
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- ASP.NET Core开发Docker部署
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- 2月送书福利:ASP.NET Core开发实战
大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...
- [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件
本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...
- ASP.NET Core 开发-中间件(Middleware)
ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...
- ASP.NET Core开发-后台任务利器Hangfire使用
ASP.NET Core开发系列之后台任务利器Hangfire 使用. Hangfire 是一款强大的.NET开源后台任务利器,无需Windows服务/任务计划程序. 可以使用于ASP.NET 应用也 ...
- ASP.NET Core开发-读取配置文件Configuration
ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
随机推荐
- JS3-高级事件
获取事件和处理事件的第二种方式:事件监听 如何获取和处理鼠标与键盘的基本事件? 事件监听方式 eventTarget.addEventListener(type,listener[,useCaptur ...
- SpringMVC简介 & 原理
特点 1.轻量级,简单易学 2.高效,基于请求响应的MVC框架 3.与Spring兼容性好,与之无缝接合(就是它的一部分) 4.约定优于配置(maven) 5.功能强大:支持RESTful 数据验证 ...
- vscode 合并分支 举例 master merge dev
举例 将 dev 开发线 合并到 master 1 确定你在dev线,将dev代码改动全部提交 2 切换master,确定是最新代码,不确定就pull下,选择合并分支,见上图 3 在下拉的提示框中选择 ...
- Github下载release附件变相提速方法
最近找到了个油猴插件,下载2M/s,推荐大家使用Github 镜像访问,加速下载 描述 github上面有许多开源的软件,作者们都打包发布为release版本,我们可以下载打包好的软件,但是,由于国内 ...
- java中float内存存储原理
规格化表示: 浮点数采用的是IEEE Standard 754 Floating Point Numbers标准 float占用4个字节,和int一样,也是32bit. 第1个bit表示符号,0表示正 ...
- Django:Nginx 启动,无法加载样式,无法加载静态文件
一般是由于 Nginx 配置文件的问题 # 编辑 Nginx 配置文件 vim /etc/nginx/nginx.conf # 如果出现下面这个 use nginx 就需要改成 use root 保存 ...
- 实时云渲染 VS 本地渲染,全面横向对比
不少用户不能理解,为什么要选用实时云渲染,而不用本地的电脑进行渲染显示?本文将通过各个方面来对比两种模式的优劣支持,帮助您更全面了解实时云渲染和本地渲染. 一.便携性对比 由于GPU对机箱空间有要求, ...
- k8s-master 设置调度污点
k8s master 调度污点 NoSchedule:K8Snode添加这个effecf类型污点,新的不能容忍的pod不能再调度过来,但是老的运行在node上不受影响 NoExecute:K8Snod ...
- 用了两周开源堡垒机OneTerm,我有一些建议
上一篇文章分享了一款简洁且强大的开源堡垒机OneTerm,功能完善,代码简单,GO语言开发,用来学习很合适,拿来自用也没问题.堡垒机该有的核心功能基本都有了,方便与自有系统集成,我使用了两周,功能上没 ...
- 使用Go语言开发一个短链接服务:四、生成code算法
章节 使用Go语言开发一个短链接服务:一.基本原理 使用Go语言开发一个短链接服务:二.架构设计 使用Go语言开发一个短链接服务:三.项目目录结构设计 使用Go语言开发一个短链接服务:四.生成 ...