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

news2024/11/24 15:30:25

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 --help

Usage:  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 save

Options:
  -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 --help

Usage:  docker image load [OPTIONS]

Load an image from a tar archive or STDIN

Aliases:
  docker image load, docker load

Options:
  -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.coloradmin.cn/o/1004342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql技术文档--之与redo log(重做日志)庖丁解析-超级探索!!!

阿丹: 在刚开始写本文章的是还不太清楚要如何去细啃下这两个体系,在查阅资料的过程中。发现大厂阿里的庖丁解InnoDB系列,详细了的写了很多底层知识,于是基于这个这两个文章才有了阿丹的这篇文章。 整体认知: 在 MySQ…

数据结构——排序算法——插入排序

交换法插入排序 void swap(vector<int> arr, int i, int j) {int temp arr[i];arr[i] arr[j];arr[j] temp;}void insertSort(vector<int> arr) {// 从第二个数开始&#xff0c;往前插入数字for (int i 1; i < arr.size(); i) {// j 记录当前数字下标int j …

骨传导耳机的危害有哪些?会损害听力吗?

如果正常的使用&#xff0c;骨传导耳机是没有危害的&#xff0c;由于骨传导耳机独特的传声方式&#xff0c;所以并不会对人体造成损伤&#xff0c;还可以在一定程度上保护听力。 如果想更具体知道骨传导耳机有什么危害&#xff0c;就要先了解什么是骨传导耳机&#xff0c;骨传…

虚拟机Ubuntu操作系统常用终端命令(1)(详细解释+详细演示)

虚拟机Ubuntu操作系统常用终端命令 本篇讲述了Ubuntu操作系统常用的三个功能&#xff0c;即归档&#xff0c;软链接和用户管理方面的相关知识。希望能够得到大家的支持。 文章目录 虚拟机Ubuntu操作系统常用终端命令二、使用步骤1.归档1.1创建档案包1.2还原档案包1.3归档并压缩…

〔022〕Stable Diffusion 之 生成视频 篇

✨ 目录 &#x1f388; 视频转换 / mov2mov&#x1f388; 视频转换前奏准备&#x1f388; 视频转换 mov2mov 使用&#x1f388; 视频转换 mov2mov 效果预览&#x1f388; 视频无限缩放 / Infinite Zoom&#x1f388; 视频无限缩放 Infinite Zoom 使用 &#x1f388; 视频转换 /…

ACL(访问控制列表)

文章目录 一、ACL定义常见功能 二、基于ACL的包过滤定义包过滤的方向包过滤的工作流程注意事项 三、ACL分类四、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、ACL 定义 ACL&#xff0c;也称为访问控制列表&#xff0c;是一种网络安全工具&…

8个免费的AI和LLM游乐场

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 在本文中&#xff0c;我们的目标是通过引入八个用户友好的平台来弥合这一差距&#xff0c;这些平台使任何人都可以免费测试和比较开源AI模型。此外&#xff0c;它们还提供多种更新型号&#xff0c;确保您及时了解最新进…

浅谈前后端分离的网络拓扑

前后端分离大体分为两种拓扑结构&#xff0c;前端和后端通过开放对外端口的拓扑结构和只有前端开放端口的拓扑结构 前端和后端通过开放对外端口的拓扑结构 比如说前端通过 80 端口对外提供服务&#xff0c;后端通过 8080 端口对外提供服务&#xff0c;前端和后端搭建在同一台服…

sqlserver2012 完全卸载

使用工具 我用的是64位的 双击打开 等待处理完成 输入sql 查询&#xff0c;对查询出来的程序选择批处理&#xff0c;进行批处理卸载 等待卸载完成&#xff0c;期间可能 需要多次点击确认

java授权码方案 软件实现时间授权 离线授权 夏末版

java项目在离线状态下部署到客户端,很容易被反编译,授权容易被破解, 给项目盈利带来很大的困难, 特别是小项目很容易失败, 小项目特别需要完善可靠的授权加密解决方案 本方案只需要集成一个jar包就可以实现在关键节点完成,授权验证,离线时间验证等功能,特别是个中小项目的开发…

解决three.js中加载纹理贴图时,初次渲染不显示的问题

效果&#xff1a; 解决方法&#xff1a;主要是将一些构建网格对象的操作放在了textureLoader.load()方法中&#xff0c;加载图片也用了require init() {// 1, 创建场景对象this.scene new this.$three.Scene();// 2, 创建立方缓冲几何体this.geometry new this.$three.BoxGe…

抖店产品曝光率低怎么解决?提高曝光、点击、转化的技巧,可收藏

我是王路飞。 我之前一直在强调&#xff0c;抖店的核心有且只有一个&#xff0c;就是选品。 店铺内的所有问题&#xff0c;都是产品的问题&#xff0c;而你的运营手段&#xff0c;黑科技等等&#xff0c;终究只是外力罢了&#xff0c;既没办法让你赚到钱&#xff0c;也对你个…

59从零开始学Java之StringBuilder与StringBuffer

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 最近的这几篇文章&#xff0c;壹哥一直在给大家讲解字符串相关的内容。其实字符串按照可变性&#xf…

Linux内核分析与应用8-文件系统

本系列是对 陈莉君 老师 Linux 内核分析与应用[1] 的学习与记录。讲的非常之好&#xff0c;推荐观看 留此记录&#xff0c;蜻蜓点水,可作抛砖引玉 8.1 虚拟文件系统的引入 Linux文件系统中最重要的一个概念: 索引节点 Inode 文件系统是具体到分区的,所以不同分区格式化时,可以是…

Seata在Liunx环境启动配置指定JVM大小

Seata从官网下载下来默认分配的内存为2048MB,测试环境因为部署的程序比较多&#xff0c;给Seata分配2048MB内存也显得很奢侈于是在程序启动的时候配置Seata的内存 bin目录下面一个有四个脚本 在Liunx启动Seata我们需要在seata-setup.sh设置JVM seata-setup.sh设置JVM参考Liu…

DT Paint Effects工具(二)

混合笔刷 Paint Effects面板 画布菜单 笔刷和分辨率 高级笔划节点 最小-最大剪裁 笔刷类型 控制通道 笔刷轮廓 必须的物体上用 扭曲 网格设置和网格环境 刺 着色属性 照明Paint Effects 阴影 辉光

考研英语笔记:日本色情业的冰山一角

微信里很多考友说自己撑不住了&#xff0c;是的&#xff0c;这确实是考研过程中&#xff0c;最难熬的一段时光。 这就如&#xff0c;在狭窄的隧道中&#xff0c;前面只有一丝光亮。而后面&#xff0c;漆黑一片&#xff0c;早已没有了退路。 放弃是不可能了。但想拼却又觉得就那…

数据结构-时间复杂度/空间复杂度

Hello&#xff0c;好久没有更新了哦&#xff0c;已经开始学习数据结构了&#xff0c;这篇文章呢就是对刚学数据结构所接触到的时间复杂度进行一个分享哦&#xff0c;如果有错误之处&#xff0c;大家记得拍拍我哦~ 既然要讨论时间/空间复杂度&#xff0c;那我们就得知道时间/空…

【提醒】警惕骗子会议

不要相信以下两个网站所检索到的任何内容&#xff1a; Conferences All Over The World | Conference Index&#xff0c;警惕理由&#xff1a;它支持自己创建会议&#xff0c;也就是你都能去创建个会议&#x1f605;World Academy of Science, Engineering and Technology&…

Trie树【数组实现】

全文目录 Trie的表现形式数组实现 Trie 树代码 Trie的表现形式 Trie树主要用来实现字符串的存储和快速查找&#xff0c;其表现形式类似一颗多叉树&#xff0c;每个节点表示字符串的一个字符。由于可能会存在类似 "abc" 和 "abcde" 这样的数据&#xff0c;…