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 ...
随机推荐
- 单词本z custom cu = com 一起 都, st=suet 自己, om 尾缀, 都是自己身上的 = 习惯,习俗
单词本z custom cu = com 一起 都, st=suet 自己, om 尾缀, 都是自己身上的 = 习惯,习俗 custom 来自拉丁语 consuetus cu = com st = s ...
- vscode 对js文件不格式化的修正方案 settings.json
修正1 "javascript.format.enable": true, // 这里false 改true 修正2 注释掉这个地方 // "[javascript]&q ...
- 异步小工具 asyncTool
class asyncTool { constructor () { this.arr = [] this.ctx = {} } use (func) { const into = { func, n ...
- auto推导类型注意
auto推导类型忽略顶层const,不忽略底层const. 顶层const:指针或引用本身是const不可变,也就是指针指向的内存地址不可变,但指向的内存内容可变. 底层const:指针指向的内存地址 ...
- Windows下写脚本无法运行在linux上?怎麽办?
Windows下写脚本无法运行在linux上?怎麽办? $'\r': command not found的解决方法 在Linux系统中,运行Shell脚本,出现了如下错误: one-more.sh: ...
- Spring Boot学习日记8
学习了yaml文件的配置 <server> <port>8081<port> </server> # k-v键值对 name: xiaoqi #相当于n ...
- 深入解析C#中的第三方库NPOI:Excel和Word文件处理的利器
一.引言 在.NET开发中,操作Office文档(特别是Excel和Word)是一项常见的需求.然而,在服务器端或无Microsoft Office环境的场景下,直接使用Office Interop可 ...
- 03.Android之View原理问题
目录介绍 3.0.0.1 View的绘制需要经过哪些过程?有哪些常用回调方法?View的绘制流程的详细流程是怎样的? 3.0.0.2 View绘制流程,当一个TextView的实例调用setText( ...
- Python简单程序设计(计算程序设计(公式)篇)
如题: 解题方式如下:
- 性能测试系列:Jmeter使用记录
jmeter配置环境变量vi /etc/profileexport PATH=$PATH:/tmp/jmeter/apache-jmeter-5.4.1/binsource /etc/profile ...