首页 > 编程语言 >使用 docker 部署 AspNetCore 应用:使用alpine镜像并加入健康检查和瘦身

使用 docker 部署 AspNetCore 应用:使用alpine镜像并加入健康检查和瘦身

时间:2024-04-29 21:11:59浏览次数:25  
标签:AspNetCore 健康检查 dotnet 镜像 docker com alpine

前言#

使用 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

搞定~

参考资料#

 

2024-04-29 21:03:47【出处】:https://www.cnblogs.com/deali/p/18147029

=======================================================================================

标签:AspNetCore,健康检查,dotnet,镜像,docker,com,alpine
From: https://www.cnblogs.com/mq0036/p/18166653

相关文章

  • docker部署jar包
    1、Dockerfile#构建镜像,执行命令:【dockerbuild-tjdk8:1.0.】FROMopenjdk:8-jdkMAINTAINERraorao#设置时区RUNln-sf/usr/share/zoneinfo/Asia/Shanghai/etc/localtimeRUNecho'Asia/Shanghai'>/etc/timezoneENTRYPOINT["java","-serv......
  • 微服务体系-docker容器cpu内存管理
    在微服务体系中,我们使用docker去部署微服务,在服务器资源有限的情况下。由于某个的服务(docker容器)cpu使用过高,或者内存使用过高会导致整个的服务器的崩溃。针对这个问题,我采取了以下措施:在dockerrun命令中添加--cpus=2--memory=4g --cpus=2:设置cpu最多使用2个核心数......
  • docker安装其他磁盘
    1.卸载旧版本的Docker(如果有):sudoyumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\......
  • docker 卸载
    1、卸载命令yumremovedockerdocker-commondocker-selinuxdocker-engine 2、刪除对应的文件夹rm-rf/etc/dockerrm-rf/run/dockerrm-rf/var/lib/dockershimrm-rf/var/lib/docker3、查看哪些还需要卸载的yumlistinstalled|grepdocker yumrem......
  • docker-compose 安装
    1、下载最新版的docker-compose文件1)链接下载https://link.zhihu.com/?target=https%3A//github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_642)命令下载sudocurl-L"https://github.com/docker/compose/releases/download/v2.5.0/docker-comp......
  • docker 安装
    1、安装前必读在安装docker之前,先说一下配置,我这里是Centos7Linux内核:官方建议3.10以上,3.8以上貌似也可。注意:本文的命令使用的是root用户登录执行,不是root的话所有命令前面要加sudo不知道自己的内核可以用以下命令查看uname-r2、使用root权限更新yum......
  • Docker安装MySQL 5.7
    1.创建数据存储目录先创建3个目录,创建MySQL容器时会挂载容器的卷。mkdirlogmkdirdatamkdirconf2.Docker仓库查看MySQL3.拉取镜像dockerpullmysql:5.74.创建MySQL配置文件[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[......
  • Docker如何搭建harbor仓库
    3.1:在部署的服务器的docker配置文件添加镜像私服地址1:编辑或创建daemon.json文件vim/etc/docker/daemon.json2:insecure-registries节点通常是不安全的,慎重设置(配置要连接harbor的ip+端口,要是80端口可以不用写),使用的是HTTPS并且有一个CA签名的证书可以在registry-mirrors节......
  • 云服务器部署lucky配合frp实现域名访问本地Docker容器
    云服务器部署lucky配合frp实现域名访问DX4600FRP内网穿透可以看我这个帖子:https://www.cnblogs.com/snbg/p/18040720操作流程(配置流程)1.购买一个域名和服务器2.配置云服务器3.部署lucky实现域名访问操作步骤(配置步骤)一、购买一个域名和服务器1.购买一个域名域名购买网站:......
  • docker修改容器时间
    第一种方案进入容器的命令行界面。您可以使用命令dockerexec-it<容器名称或ID>/bin/bash来进入容器。在容器内部,运行以下命令来安装tzdata软件包:apt-getupdate&&apt-getinstall-ytzdata安装完成后,运行以下命令来设置时区为上海:ln-fs/usr/share/zoneinfo/Asia/S......