Linux上容器化运行C#应用 – 云原生之路


本站和网页 https://www.361way.com/linux-run-csharp-dotnet/8494.html 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Linux上容器化运行C#应用 – 云原生之路
跳至内容
云原生之路
关注云原生技术及互联网科技的IT博客
菜单
首页
视频教程
WIKI
站点地图
捐赠名单
关于我
Linux上容器化运行C#应用
发表于2023-06-112023-06-15 作者 admin
早期的.net闭源且仅能跑在windows平台上(Linux当时也有开源的mono),2014 年底,Scott Guthrie宣布微软将开源 .NET。所以当前基于.net开发的应用或站点就有了更多的选择。
近期遇到的一个项目使用C# .net开发的,由于历史原因对应的容器化平台也是在windows下跑的,现想要搬迁到Linux平台上运行,这里做了下简单的测试。
一、原生.net在Linux平台运行
1、安装Linux版.net
.net 官方下载页面为:https://dotnet.microsoft.com/en-us/downloadhttps://dotnet.microsoft.com/en-us/download ,点开后会发现其由以下几部分构成。
.NET Runtime 8.0.0-preview.5.23280.8 仅包含运行控制台应用所需的组件
ASP.NET Core Runtime 8.0.0-preview.5.23302.2 运行ASP.NET web框架用的
.NET Desktop Runtime 8.0.0-preview.5.23302.2 运行桌机应用程序用的
SDK 8.0.100-preview.5(包含以上三个)
这里选用的 centos7 和 较为成熟的版本 .net 6进行安装,具体如下:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-6.0
sudo yum install aspnetcore-runtime-6.0
sudo yum install dotnet-runtime-6.0
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl start docker
2、.net App应用
使用dotnet指令生成应用:
dotnet new console -o App -n DotNet.Docker
编写C#信息,打开Program.cs,修改为如下内容:
var counter = 0;
var max = args.Length is not 0 ? Convert.ToInt32(args[0]) : -1;
while (max is -1 || counter < max)
Console.WriteLine($"Counter: {++counter}");
await Task.Delay(TimeSpan.FromMilliseconds(1_000));
测试并发布应用:
# 测试
cd App && dotnet run
# 发布应用
dotnet publish -c Release
ls bin/Release/net6.0/publish
Docker 化应用程序:
# 编写 Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /App
# Copy everything
COPY . ./
# Restore as distinct layers
RUN dotnet restore
# Build and publish a release
RUN dotnet publish -c Release -o out
# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /App
COPY --from=build-env /App/out .
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
# 编译镜像
docker build -t counter-image -f Dockerfile .
直接运行和容器化运行结果如下:
3、运行ASP.NET web应用
创建web应用:
dotnet new webapp -n myWebApp -o src --no-https
cd src
dotnet run --urls http://localhost:5000
运行结果如下:
编写dockerfile
# 创建Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:6.0 as build-env
WORKDIR /src
COPY src/*.csproj .
RUN dotnet restore
COPY src .
RUN dotnet publish -c Release -o /publish
FROM mcr.microsoft.com/dotnet/aspnet:6.0 as runtime
WORKDIR /publish
COPY --from=build-env /publish .
EXPOSE 80
ENTRYPOINT ["dotnet", "myWebApp.dll"]
创建.dockerignore文件,增加如下内容
**/bin/
**/obj/
├── dotnet-docker
│ ├── src/
│ ├── Dockerfile
│ ├── .dockerignore
二、mono运行C#编写的应用
安装mono:
yum-config-manager --add-repo http://download.mono-project.com/repo/centos/
rpmkeys --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo
yum install -y mono-complete
yum install mono-devel
编写hello world应用:
[root@localhost ~]# vi hello.cs
public class HelloWorld
public static void Main()
System.Console.WriteLine("Hello, World!");
编译运行:
[root@localhost ~]# mcs hello.cs
[root@localhost ~]# mono hello.exe
Hello, World!
除了这些简单的示例个,Linux下也支持通过msbuild编译应用程序(和windows下一样)。
参考页面:
https://docs.docker.com/language/dotnet/run-containers/
https://learn.microsoft.com/zh-cn/dotnet/core/docker/build-container?tabs=linux
分类:
Docker/k8s/etcd
标签:
docker,windows
文章导航
<上一个 上篇文章: Excel函数实现多国时区转换下一个> 下篇文章: 华为云CCE启用Nginx Ingress对接后端ClusterIP服务
发表回复 取消回复您的电子邮箱地址不会被公开。 必填项已用*标注评论 * 显示名称 *
电子邮箱地址 *
网站地址
在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。
&#916;
跳至页脚
搜索搜索
捐赠本站
如您感觉本博客有用,可扫码捐赠本站!
分类
C/C++/Java/Delphi
Docker/k8s/etcd
ftp/dhcp/nfs/samba/mail/vpn
http/html/web
IT动态&行业洞察
Linux/unix/mac
perl/php/python/gawk/sed
shell脚本学习
windows
区块链
协同敏捷自动化
大数据
安全/漏洞
平台架构
开源软件
数据库
未分类
杂七杂八
生活堆砌
虚拟化云和自动化
读史知慧
标签分类Ansible
apache
awk
centos7
C语言
docker
golang
iptables
java
k8s
KVM
linux
linux高级篇
monitor
mysql
nagios
nginx
oracle
pandas
php
prometheus
python
python模块
redis
regex
RHCA
RHCE
rhel7
rrdtool
safe
saltstack
SecureCRT
sed
selenium
shell
sqlserver
SRE
ssh
tomcat
varnish
windows
wordpress
zabbix
故障案例
生活
归档
归档
选择月份 2023年6月 (4)
2023年5月 (2)
2023年4月 (1)
2023年3月 (1)
2023年2月 (3)
2023年1月 (1)
2022年12月 (1)
2022年11月 (1)
2022年10月 (2)
2022年9月 (3)
2022年8月 (3)
2022年7月 (4)
2022年6月 (6)
2022年5月 (5)
2022年4月 (4)
2022年3月 (3)
2022年2月 (1)
2022年1月 (5)
2021年12月 (2)
2021年11月 (2)
2021年10月 (2)
2021年9月 (12)
2021年8月 (5)
2021年7月 (3)
2021年6月 (2)
2021年5月 (2)
2021年4月 (3)
2021年3月 (2)
2021年2月 (1)
2021年1月 (9)
2020年12月 (3)
2020年11月 (1)
2020年10月 (9)
2020年9月 (4)
2020年8月 (6)
2020年7月 (2)
2020年6月 (3)
2020年5月 (3)
2020年4月 (4)
2020年3月 (3)
2020年2月 (5)
2019年12月 (5)
2019年11月 (3)
2019年10月 (5)
2019年9月 (7)
2019年8月 (5)
2019年7月 (6)
2019年6月 (6)
2019年5月 (8)
2019年4月 (8)
2019年3月 (7)
2019年2月 (7)
2019年1月 (8)
2018年12月 (15)
2018年11月 (13)
2018年10月 (8)
2018年9月 (12)
2018年8月 (12)
2018年7月 (5)
2018年6月 (5)
2018年5月 (5)
2018年4月 (5)
2018年3月 (5)
2018年2月 (8)
2018年1月 (7)
2017年12月 (4)
2017年11月 (3)
2017年10月 (6)
2017年9月 (5)
2017年8月 (8)
2017年7月 (6)
2017年6月 (5)
2017年5月 (6)
2017年4月 (2)
2017年3月 (6)
2017年2月 (7)
2017年1月 (14)
2016年12月 (5)
2016年11月 (7)
2016年10月 (7)
2016年9月 (11)
2016年8月 (12)
2016年7月 (7)
2016年6月 (11)
2016年5月 (18)
2016年4月 (10)
2016年3月 (9)
2016年2月 (9)
2016年1月 (10)
2015年12月 (10)
2015年11月 (10)
2015年10月 (17)
2015年9月 (14)
2015年8月 (25)
2015年7月 (15)
2015年6月 (19)
2015年5月 (23)
2015年4月 (15)
2015年3月 (22)
2015年2月 (15)
2015年1月 (24)
2014年12月 (15)
2014年11月 (16)
2014年10月 (19)
2014年9月 (19)
2014年8月 (18)
2014年7月 (20)
2014年6月 (21)
2014年5月 (24)
2014年4月 (18)
2014年3月 (29)
2014年2月 (22)
2014年1月 (22)
2013年12月 (24)
2013年11月 (20)
2013年10月 (19)
2013年9月 (18)
2013年8月 (17)
2013年7月 (21)
2013年6月 (21)
2013年5月 (19)
2013年4月 (17)
2013年3月 (25)
2013年2月 (21)
2013年1月 (18)
2012年12月 (24)
2012年11月 (18)
2012年10月 (17)
2012年9月 (18)
2012年8月 (18)
2012年7月 (26)
2012年6月 (36)
2012年5月 (36)
2012年4月 (28)
2012年3月 (46)
2012年2月 (23)
2012年1月 (17)
2011年12月 (27)
2011年11月 (59)
2011年10月 (20)
2011年9月 (16)
2011年8月 (46)
浙公网安备 33010802007315号
浙ICP备14037069号-2