基于 Alpine 环境构建 aspnetcore6-runtime 的 Docker 镜像

firefly.gif

关于 Alpine Linux 此处就不再过多讲述,请自行查看相关文档。

.NET 支持的体系结构

下表列出了当前支持的 .NET 体系结构以及支持它们的 Alpine 版本。 这些版本在 .NET 到达支持终止日期或 Alpine 的体系结构受支持之前仍受支持。请注意,Microsoft 仅正式支持 x86_64、armv7、aarch64。 其他体系结构由分发维护人员支持,并且可以使用 apk 包管理器进行安装。

image.png

  • apline 环境安装必须依赖

使用包管理器进行安装时,将为你安装这些库。 但是,如果手动安装 .NET 或发布自包含的应用,则需要确保已安装以下库:

apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib
  • libgdiplus.NET 应用需要 System.Drawing.Common 程序集时)

如果 .NET 应用使用 System.Drawing.Common 程序集,则还需要安装 libgdiplus。 由于 Linux 上不再支持 System.Drawing.Common,因此这仅适用于 .NET 6,并且需要设置 System.Drawing.EnableUnixSupport 运行时配置开关。

要在 Alpine 3.16 或更高版本上安装 libgdiplus(较旧版本不包含该包),请运行:

apk add libgdiplus

.NET 运行时说明

  • asp.net core 运行时
sudo apk add aspnetcore6-runtime
  • .net core/.net 运行时
sudo apk add dotnet6-runtime
  • .NET SDK
sudo apk add dotnet6-sdk

三者之间的关系说明,如下图所示:

dotnet.png

此处目标是构建 asp.net core 应用程序的基础镜像,所以采用 asp.net core runtime 环境(生产环境推荐 Release 发布文件)。

基础镜像构建步骤

此处我们介绍如何基于 Alpine Linux 环境构建 ASP.NET Core6.xRuntime 的基础镜像。

3.1、编写 Dockerfile

Microsoft 参考文档:

  • 在 Alpine 上安装 .NET SDK 或 .NET 运行时

注意修改 Alpine 的镜像 reporepositories)源为国内源:

# 清华源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories 
# 阿里源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 中科大源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories

完整的 Dockerfile 编写如下:

# https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-alpine
FROM docker.io/library/alpine:3.18.3
LABEL version="aspnetcore:6.0-alpine"
LABEL description="Based on x86_64 alpine platform: v3.18.3 building aspnetcore6-runtime" 
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update
RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib
RUN apk add aspnetcore6-runtime

3.2、执行 Docker 构建命令

进入刚编写的 Dockerfile 文件目录,然后执行如下命令:

docker image build -t aspnetcore:6.0-x86_64-alpine ./

输出如下信息:

PS C:\Users\Jeffrey.Chai\Desktop\dist> docker image build -t aspnetcore:6.0-x86_64-alpine ./
[+] Building 0.1s (9/9) FINISHED                                                                                                                               docker:default=> [internal] load .dockerignore                                                                                                                                        0.0s=> => transferring context: 2B                                                                                                                                          0.0s=> [internal] load build definition from Dockerfile                                                                                                                     0.0s=> => transferring dockerfile: 499B                                                                                                                                     0.0s=> [internal] load metadata for docker.io/library/alpine:3.18.3                                                                                                         0.0s=> [1/5] FROM docker.io/library/alpine:3.18.3                                                                                                                           0.0s=> CACHED [2/5] RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories                                                                        0.0s=> CACHED [3/5] RUN apk update                                                                                                                                          0.0s=> CACHED [4/5] RUN apk add bash icu-libs krb5-libs libgcc libintl libssl1.1 libstdc++ zlib                                                                             0.0s=> CACHED [5/5] RUN apk add aspnetcore6-runtime                                                                                                                         0.0s=> exporting to image                                                                                                                                                   0.0s=> => exporting layers                                                                                                                                                  0.0s=> => writing image sha256:974536111ddef9f00e20779f822bbaf646e2ec46ac3ec515158ef6c8e4abfb9a                                                                             0.0s=> => naming to docker.io/library/aspnetcore:6.0-x86_64-alpine

说明:该步骤已经构建完成新镜像 aspnetcore:6.0-x86_64-alpine

3.3、推送 Docker 公共仓库

如有私有镜像仓库,可推送私有仓库,推送命令如下:

# 登录 docker hub 仓库
docker login -u username -p xxx# 推送镜像到仓库
docker push aspnetcore:6.0-x86_64-alpine

参数说明:

  • -u 用户名
  • -p 用户密码

3.4、离线环境导出/导入镜像

  • docker save:导出镜像,按指定镜像保存成(.tar/.zip)归档文件。
docker image save -o aspnetcore-6.0-x86_64-alpine.tar aspnetcore:6.0-x86_64-alpine

关于 docker save 命令用法:

PS C:\Users\Jeffrey.Chai\Desktop\dist> docker image save --helpUsage:  docker image save [OPTIONS] IMAGE [IMAGE...]Save one or more images to a tar archive (streamed to STDOUT by default)Aliases:docker image save, docker saveOptions:-o, --output string   Write to a file, instead of STDOUT
  • docker load:导入(载入)镜像

将上面导出的镜像(image)归档文件拷贝到(已安装 docker)目标主机环境,执行如下命令:

docker image load aspnetcore-6.0-x86_64-alpine.tar

关于 docker load 命令使用:

PS C:\Users\Jeffrey.Chai\Desktop\dist> docker image load --helpUsage:  docker image load [OPTIONS]Load an image from a tar archive or STDINAliases:docker image load, docker loadOptions:-i, --input string   Read from tar archive file, instead of STDIN-q, --quiet          Suppress the load output

以上就是 asp.net core 6.0runtime 环境基础镜像构建过程。

— The glow of a firefly may be faint, but when it shines, it challenges the darkness.

构建 App(应用)镜像

  • 查看新构建的镜像:docker images
PS C:\Users\Jeffrey.Chai\Desktop\dist> docker images
REPOSITORY       TAG                   IMAGE ID       CREATED          SIZE
aspnetcore       6.0-x86_64-alpine     974536111dde   36 minutes ago   148MB
alpine           3.18.3                7e01a0d0a1dc   3 weeks ago      7.34MB

基于上面的构建的 aspnetcore6-runtime 基础镜像,接下来我们再此基础上镜像 app 应用镜像构建,完整的 Dcokerfile 编写如下:

FROM aspnetcore:6.0-x86_64-alpine
WORKDIR /app
LABEL version="1.0.0"
LABEL description="xxx镜像描述"
COPY . ./
EXPOSE 80
ENTRYPOINT ["dotnet", "hello.dll"]

说明:直接把该 Dockerfile 文件拷贝到 asp.net core 应用程序发布文件目录执行 docker build 命令即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/133985.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postman导入json脚本文件(Collection v1.0、Collection v2.0)

1. 以postman v8.5.1 版本为例 2. 在postman v5.0.2 低版本中导出json脚本文件, 请选择Collection v2.0 Export - Collection v2 3. 在postman v8.5.1 版本 导入 json脚本文件 Import - Collection v2 - Export - Import

InfiniBand vs 光纤通道,存储协议的选择

数字时代,数据量爆发增长,企业越来越迫切地追求高吞吐量、低延迟和更高性能的网络基础设施,存储协议的选择变得愈发至关重要。在众多存储协议中,InfiniBand和光纤通道备受关注。本文旨在深入探讨InfiniBand和光纤通道作为存储协议…

mysql 日志总结

mysql 根据日志的功能,分6种 慢查询日志:记录所有执行时间超过 long_query_time 的所有查询,方便我们对查询进行优化通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令&#xff0…

【Spring面试】二、BeanFactory与IoC容器的加载

文章目录 Q1、BeanFactory的作用是什么?Q2、BeanDefinition的作用是什么?Q3、BeanFactory和ApplicationContext有什么区别?Q4、BeanFactory和FactoryBean有什么区别?Q5、说下Spring IoC容器的加载过程(※)Q…

【Bun1.0】使用 Bun.js 构建快速、可靠和安全的 JavaScript 应用程序

bun.js Bun 是一个现代的JavaScript运行环境,如Node, Deno。主要特性如下: 启动速度快。更高的性能。完整的工具(打包器、转码器、包管理)。 官网 https://bun.sh 优点 与传统的 Node.js 不同,Bun.js 提供了一些新的特性和功…

esp32编译问题

-Werroruninitialized 显然变量是初始化了,只是这s13觉等没初始化还居然报错了。 解决方法:add_compile_options(-Wno-uninitialized) 【cmake篇】选择编译器及设置编译参数_cmake选择编译器_仲夏夜之梦~的博客-CSDN博客https://blog.csdn.net/challen…

JavaScript-promise使用+状态

Promise 什么是PromisePromise对象就是异步操作的最终完成和失败的结果&#xff1b; Promise的基本使用&#xff1a; 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compati…

脚本:用python实现五子棋

文章目录 1. 语言2. 效果3. 脚本4. 解读5. FutureReference 1. 语言 Python 无环境配置、无库安装。 2. 效果 以第一回合为例 玩家X 玩家0 3. 脚本 class GomokuGame:def __init__(self, board_size15):self.board_size board_sizeself.board [[ for _ in range(board_…

数字IC设计之时序分析基础概念汇总

1 时钟Clock 理想的时钟模型是一个占空比为50%且周期固定的方波。时钟是FPGA中同步电路逻辑运行的一个基准。理想的时钟信号如下图: 2 时钟抖动Clock Jitter 理想的时钟信号是完美的方波&#xff0c;但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动&#…

sql注入Less-2

后台sql s q l " S E L E C T ∗ F R O M u s e r s W H E R E i d sql "SELECT * FROM users WHERE id sql"SELECT∗FROMusersWHEREidid LIMIT 0,1"; 注入语句 http://192.168.200.26/Less-3/?id-1? union select 1,2,database();– 使用id-1 便可…

如何在JavaScript中实现字符串模板替换?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用模板字符串&#xff08;Template Strings&#xff09;⭐ 使用正则表达式替换⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门…

Keepalived+LVS高可用集群

目录 一、keepalived介绍&#xff1a; 二、keepalived工具介绍&#xff1a; &#xff08;1&#xff09;管理 LVS 负载均衡软件&#xff1a; &#xff08;2&#xff09;支持故障自动切换&#xff1a; &#xff08;3&#xff09;实现 LVS 负载调度器、节点服务器的高可用性&…

【计算机网络】Tcp详解

文章目录 前言Tcp协议段格式TCP的可靠性面向字节流应答机制超时重传流量控制滑动窗口&#xff08;重要&#xff09;拥塞控制延迟应答捎带应答标志位具体标志位三次握手四次挥手粘包问题TCP异常情况listen的第二个参数 前言 前面我们学习了传输层协议Udp&#xff0c;今天我们一…

CPU的三级缓存

CPU缓存&#xff08;Cache Memory&#xff09;是位于CPU与内存之间的临时存储器&#xff0c;它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾&#xff0c;因为CPU运算速度要比内存读写速度快很多&#…

高电压+大电流 IGBT静态参数测试解决方案

近年来IGBT成为电力电子领域中尤为瞩目的电力电子器件,并得到越来越广泛的应用,那么IGBT的测试就变的尤为重要了。lGBT的测试包括静态参数测试、动态参数测试、功率循环、HTRB可靠性测试等,这些测试中最基本的测试就是静态参数测试。 IGBT静态参数主要包含:栅极-发射极阈值电压…

“深入理解SpringMVC的JSON数据返回和异常处理机制“

目录 引言1. SpringMVC之JSON数据返回1.1 导入依赖1.2 配置弹簧-MVC.xml1.3 ResponseBody注解使用1.4.Jackson 2. 异常处理机制2.1 为什么要全局异常处理2.2 异常处理思路2.3 SpringMVC异常分类2.4 综合案例 总结 引言 在现代Web开发中&#xff0c;SpringMVC是一个广泛使用的框…

Linux权限的理解

目录 权限的概念权限管理默认权限访问权限的相关指令粘滞位 Linux严格意义上说的是一个操作系统&#xff0c;我们称之为核心 但我们不能直接接触核心&#xff0c;我们不擅长和内核交流&#xff0c;它也没法信任你&#xff0c;所以需要通过外壳程序 shell &#xff0c;shell外壳…

应用在儿童平板防蓝光中的LED防蓝光灯珠

现在电子产品多&#xff0c;手机、平板电脑、电子书等等&#xff0c;由于蓝光有害眼睛健康&#xff0c;于是市场上有很多防蓝光的眼镜、防蓝光的手机膜、防蓝光的平板&#xff0c;这些材料和设备到底有没有用&#xff1f;如何正确预防蓝光危害呢&#xff1f; 我们现在所用的灯…

轻量级软件FastGithub实现稳定访问github

当我们想访问全球最大的“同性交友网站”https://github.com/ 时&#xff0c;总会出现无法访问的界面&#xff0c;令人非常苦恼&#xff1a;幸运的是&#xff0c;有一种轻量级的软件可以帮助我们稳定地访问GitHub&#xff0c;那就是FastGithub。 什么是FastGithub&#xff1f…

【Linux系统编程】冯诺依曼体系结构

文章目录 1. 冯诺依曼体系结构2. 为什么要存储器&#xff08;内存&#xff09;&#xff1f;作用是什么&#xff1f;3. 数据流向分析 这篇文章&#xff0c;我们来认识一下冯诺依曼体系结构 1. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本&#xff1b;我们不常见的计…