.NET 7 SDK 对容器的内置支持
大家好,我是等天黑。
.NET 又双叒叕出新功能了, 就在前几天,.NET 团队发布博客,宣称在 .NET SDK 中内置了对 .NET 应用容器化的支持。
小试牛刀
在正式介绍它之前,先通过一个简单的例子,看下它是如何使用的。
# 创建一个新项目, 然后进入到文件夹
dotnet new mvc -n my-awesome-container-app
cd my-awesome-container-app
# 添加下面的程序包
#(目前需要手动引入, 后续会直接集成到 .NET SDK)
dotnet add package Microsoft.NET.Build.Containers
# 发布项目
dotnet publish --os linux --arch x64 -p:PublishProfile=DefaultContainer
# 在容器中运行应用
docker run -it --rm -p 5010:80 my-awesome-container-app:1.0.0
然后访问 http://localhost:5010, 就已经可以看到这个测试的 .NET MVC 应用了。
注意,这里需要安装 .NET 7 preview 7 或以上版本,并且本机安装并运行了 Docker。
容器化 .NET 应用是不是变得更加简单方便了。
内置容器化支持
可能你已经有了疑问, 这是什么魔法?我们熟悉的 Dockerfile 去哪了? 基础镜像是怎么定义的?镜像标签是什么?
是的,之前我们更熟悉使用 Dockerfile 的形式构建镜像。而现在,可以在 .NET 项目中,配置 MSBuild 属性来做同样的事情,指定基础镜像,标签等等。
要对 .NET 应用进行容器化,只需要在 project.csproj 中配置属性即可,如下
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>my_awesome_container_app</RootNamespace>
</PropertyGroup>
<PropertyGroup>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<PublishProfile>DefaultContainer</PublishProfile>
<ContainerImageName>my-super-awesome-app</ContainerImageName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Build.Containers" Version="0.1.8" />
</ItemGroup>
</Project>
下面是一些常见的自定义参数介绍
基础镜像
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:6.0</ContainerBaseImage>
镜像库
默认情况下,会推送到本地的 Docker Daemon,当然也支持推送到远程的镜像库。
<ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
镜像标签
标签可以给应用生成不同的版本,默认情况是读取项目的 Version 属性,你也可以指定 ContainerImageTag 属性,如下
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
多个标签用分号隔开
<ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
目前来说,项目还是在初期阶段,不过已经看到了 .NET 团队在这方面的努力,对于其他的一些容器化功能,相信会很快在未来的版本中添加。
更多详细的内容,可以参考下面的文档:
https://github.com/dotnet/sdk-container-builds/blob/main/docs/ContainerCustomization.md
总结
上面的容器化功能,主要是由 sdk-container-builds 这个库实现的。工作原理并不复杂,代码也不多,里面使用到了 .NET 7 新的 Tar API 处理文件,并构建了标准的 OCI 镜像文件,然后通过 Docker Registry HTTP API 和 Docker Registry 进行交互以及上传镜像。
希望本文对您有用 !
Reference
https://github.com/dotnet/sdk-container-builds
https://docs.docker.com/registry/spec/api/
https://devblogs.microsoft.com/dotnet/announcing-builtin-container-support-for-the-dotnet-sdk
.NET 7 SDK 对容器的内置支持的更多相关文章
- Spring MVC内置支持的4种内容协商方式【享学Spring MVC】
每篇一句 十个光头九个富,最后一个会砍树 前言 不知你在使用Spring Boot时是否对这样一个现象"诧异"过:同一个接口(同一个URL)在接口报错情况下,若你用rest访问,它 ...
- php 内置支持的标签和属性
内置支持的标签和属性列表如下: 标签名 作用 包含属性 include 包含外部模板文件(闭合) file import 导入资源文件(闭合 包括js css load别名) file,href,ty ...
- 迭代器模式的一种应用场景以及C#对于迭代器的内置支持
迭代器模式 先放上gof中对于迭代器模式的介绍镇楼 意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示. 别名 游标(Cursor). 动机 一个聚合对象, 如列表(li ...
- thinkphp中ajax使用实例(thinkphp内置支持ajax)
thinkphp中ajax使用实例(thinkphp内置支持ajax) 一.总结 1.thinkphp应该是内置支持ajax的,所以请求类型里面才会有是否是ajax // 是否为 Ajax 请求 if ...
- 重磅!K8S 1.18版本将内置支持SideCar容器。
作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...
- Apache Spark 3.0 将内置支持 GPU 调度
如今大数据和机器学习已经有了很大的结合,在机器学习里面,因为计算迭代的时间可能会很长,开发人员一般会选择使用 GPU.FPGA 或 TPU 来加速计算.在 Apache Hadoop 3.1 版本里面 ...
- Spring Boot 定制与优化内置的Tomcat容器
1.Spring Boot定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口 ...
- python__007内置函数
本文摘自:https://docs.python.org/3/library/functions.html?highlight=built#ascii 内置功能 abs() delat ...
- Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命周期,jsp有哪些内置对象,Tomcat,Cookie和Session的作用以及区别,oracle,MYSQL等面试题总结
1. 什么是Spring,谈谈你对Spring的理解 Spring是我们JAVA开发人员在搭建后台时选用的一个轻量级的开源框架,Spring框架目前也是功能丰富,十分优秀企业级采用最多的一个框架. S ...
随机推荐
- Flink1.13.1源码解析-Application on yarn(一)
本篇文章讲述 Flink Application On Yarn 提交模式下,从命令提交到 AM 容器创建 1.脚本入口 flink run-application -t yarn-applicati ...
- 016(剪花布条)(KMP)
题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1465 题目思路:KMP模板题,该说的都在代码里 #include<bits/stdc++. ...
- 使用Thread类和Runnable接口实现多线程的区别
使用Thread类和Runnable接口实现多线程的区别 先看两种实现方式的步骤: public class ThreadDemo{ public static void main(String[] ...
- vscode的安装、切换为中文简体、集成sass
VScode设置中文 打开vscode ,按快捷键"Ctrl+Shift+P" 输入configure language,回车 选择安装其他语言 (默认是英文的) 选择简体中安装( ...
- Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布
https://www.bilibili.com/video/BV1tT411g7PA/?aid=470724972&cid=766317673&page=1 点击上方链接,一分钟快速 ...
- 使用Win自带的远程工具连接Linux
网上教程一大堆,我这边只简单记录一下,主要是黑屏问题,和剪贴板问题.Win连接Linux,一般都是使用的xrdp, 如果是使用的旧版本的Ubuntu,建议先装一下xfce桌面,gnome桌面一般连不起 ...
- java通过注解指定顺序导入excel
自定义的属性,用来判断顺序的 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; impor ...
- 如何用车辆违章查询API接口进行快速开发
最近公司项目有一个车辆违章查询显示的小功能,想着如果用现成的API就可以大大提高开发效率,所以在网上的API商店搜索了一番,发现了 APISpace,它里面的车辆违章查询API非常符合我的开发需求. ...
- [原创]树莓派CM4配置GPIO复用为i2c
1.简介 项目中需要控制各种外设的电源,正常应该是通过GPIO进行控制,但是树莓派CM4的GPIO管脚有限,因此需要使用i2c扩展IO 查阅CM4-datesheet发现GPIO22和GPIO23可以 ...
- nginx虚拟主机测试
一.基于域名的nginx虚拟主机 基于域名的nginx虚拟主机的操作步骤: 1 .为虚拟主机提供域名和IP的映射(也可以使用DNS正向解析) echo "172.16.10.101 www. ...