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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: apline linux 环境,构建 asp.net core 应用程序的基础镜像。--- The glow of a firefly may be faint, but when it shines, it challenges the darkness.

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 的镜像 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 命令即可。

相关实践学习
Serverless极速搭建Hexo博客
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
|
1天前
|
存储 监控 Linux
docker构建镜像详解!!!
本文回顾了Docker的基本命令和管理技巧,包括容器和镜像的增删改查操作,容器的生命周期管理,以及如何通过端口映射和数据卷实现容器与宿主机之间的网络通信和数据持久化。文章还详细介绍了如何使用Docker部署一个简单的Web应用,并通过数据卷映射实现配置文件和日志的管理。最后,文章总结了如何制作自定义镜像,包括Nginx、Python3和CentOS镜像,以及如何制作私有云盘镜像。
13 2
|
3天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
9 1
|
4天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境
本教程介绍如何快速搭建Docker环境,并使用Docker部署一个Nginx服务。
基于ECS快速搭建Docker环境
|
弹性计算 应用服务中间件 Linux
Day2 基于ECS快速搭建Docker环境
简介: 容器技术 容器是一个允许我们在资源隔离的过程中,运行应用程序和其依赖项的 、轻量的 、操作系统级别的虚拟化技术, 运行应用程序所需的所有必要组件都打包为单个镜像,这个镜像是可以重复使用的。当镜像运行时,它是运行在独立的环境中,并不会和其他的应用共享主机操作系统的内存、CPU或磁盘。这保证了容器内的进程不会影响到容器外的任何进程。 Docker:类似于虚拟机 但是比虚拟机运行小切简单 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不
364 0
|
弹性计算 应用服务中间件 nginx
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境(进阶班-Day2)
安装Docker总结下来只需要4步: 1、安装Docker-CE 2、配置加速镜像(国内网络原因导致) 3、使用Docker安装Nginx服务 4、测试Nginx
1708 0
基于ECS快速搭建Docker环境(进阶班-Day2)
|
弹性计算 应用服务中间件 Linux
基于ECS快速搭建Docker环境
1. 创建资源 2. 连接ECS服务器 3. 安装Docker CE 4. 配置阿里云镜像仓库(镜像加速) 5. 使用Docker安装Nginx服务
基于ECS快速搭建Docker环境
|
弹性计算 应用服务中间件 Linux
DAY 2 ||ECS快速搭建Docker环境
基于ECS实例快速搭建一个Docker环境,并在Docker环境中部署一个Nginx服务。
DAY 2  ||ECS快速搭建Docker环境
|
弹性计算 应用服务中间件 Linux

热门文章

最新文章