Asp-Net-Core开发笔记:使用alpine镜像并加入健康检查
用alpine镜像?不过是把体积砍半,健康检查加个路径就完事。wget自带,何必装curl,真是多余。发布选linux-musl-x64,不然别想跑。
目录6 个章节
前言
使用 docker 部署 AspNetCore 应用已经是标配了,之前我一直使用 mcr.microsoft.com/dotnet/aspnet:8.0 这类镜像,简单粗暴,不过可以使用 alpine 进一步优化镜像大小。
很多开源工具的 docker 都有健康检查,这次我顺便也给加上了。
PS: 本文的例子项目来自一个差点被砍掉的项目「IdentityServerLite」,后面我会写个文章介绍一下~
添加健康检查
注册服务
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
搞定~
参考资料
_EOF_
Asp-Net-Core开发笔记:使用alpine镜像并加入健康检查
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
AspNetCore开发笔记:WebApi项目集成企业微信和公众号
微信开发文档烂得离谱,直接用SKIT库搞定。异步处理消息,图片下载内存处理,公众号被动回复5秒内搞定。啧啧。
2025-12-22 · Asp-Net-Core开发笔记 · 约 1 分钟
Asp-Net-Core开发笔记:Oracle调优
Supported Connection String Attributes To obtain an OracleConnection object in a .NET stored procedure that represents the implicit database connection, set the ConnectionString property of the Oracle
2023-03-05 · Asp-Net-Core开发笔记 · 约 1 分钟
Asp-Net-Core开发笔记:使用原生的接口限流功能
试用了一下,感觉还是太折腾,用回原来的 AspNetCoreRateLimit 组件得了
2024-05-22 · Asp-Net-Core开发笔记 · 约 1 分钟
Asp-Net-Core开发笔记:使用ActionFilterAttribute实现非侵入式的参数校验
用ActionFilterAttribute搞非侵入校验,省得重复写代码。支持Query、Body、Route、Header,HttpContext共享数据,但OAuth2.0边学边做,项目乱糟糟,功能凑合。
2024-05-17 · Asp-Net-Core开发笔记 · 约 1 分钟
讨论
共 0 条加载评论中…