最新Centos7 + .Net6 + Docker 配置镜像发布详解
今天带给大家一篇文章,想大家介绍下在Centos7下,如何在docker环境部署一个简单的基于.Net6的.NetCore应用,也就是打包项目镜像,并在Linux下使用打包的镜像运行一个容器。
一 环境准备
1.1虚拟机
我们准备一台Centos虚拟机,我这里是7.6.虚拟机安装我就不介绍了,可以参考我的一篇文章
大数据分析学习第一课 准备虚拟机环境来了解下虚拟机的配置
下面的虚拟机可以看到,没有.Net环境
1.2 安装SdK
参考我的博文
1.3 新建项目
这里我们选择webapi
项目建好后如下,会默认一个天气信息的控制器
我们稍微修改下,加一个run by docker标识
namespace DockerSample.Controllers{ [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger _logger; public WeatherForecastController(ILogger logger) { _logger = logger; } [HttpGet(Name = "GetWeatherForecast")] public IEnumerable Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] + "【run by docker】" }) .ToArray(); } }}
项目运行后,会打开swagger文档,是webapi内置好的,我们测试一下,会看到结果
可以看到我们加的标识了
1.4 配置docker
我们右键项目,添加=》添加Docker支持,这里选Linux
确定后会生成一个Dockerfile文件,我们调整下内容
这里我给出了每行配置的说明
# 环境运行时基础镜像FROM mcr.microsoft.com/dotnet/aspnet:6.0#将当前目录内容 copy到镜像目录COPY . /DockerSample#设置工作目录WORKDIR /DockerSample#对外暴露端口 #(注:EXPOSE并不会让容器的端口访问到主机。#要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,#或通过-P参数来发布EXPOSE导出的所有端口)EXPOSE 80EXPOSE 443#运行镜像入口命令和可执行文件名称ENTRYPOINT ["dotnet", "DockerSample.dll"]
1.5 发布项目
因为我主机是win10,没有开启Hyper-V,所以我把项目发布后,上传到linux打包镜像,发布流程就按普通的web项目,发布到一个文件夹就好
发布前注意,修改下 Dockerfile的属性,设置为始终复制,这样就不用手动复制了
1.6生成docker镜像
我们把刚才发布目录上传到前面准备的Linux服务器
cd进入该目录
现在开始生成镜像,我们先看下docker已有镜像列表,等下可以对比新生成镜像
接下来,执行
docker build -t dockersample-image/1.0 -f Dockerfile .
(注意 . 是必须的,代表当前目录)
再查看下镜像,可以看到镜像已经生成成功了
生成的镜像,可以push到国内的镜像仓库,或者本地局域网的私服仓库,用于测试、生产等环境的发布使用
1.7 运行容器
有了镜像,我们就可以使用了
执行
docker run -d -p 8001:80 --name dockersample1 dockersample-image/1.0
我们浏览器访问服务器的8001端口 http://node2:8001/,发现报404了
仔细检查了发布流程,发现没问题,最后检查配置发现了问题,原来默认只有在调试环境,才会开启Swagger文档
这样的话,我们就直接访问接口地址吧,http://node2:8001/WeatherForecast,数据出来了
我们再新开一个容器试试
docker run -d -p 8002:80 --name dockersample2 dockersample-image/1.0
访问下接口地址8002,http://node2:8002/WeatherForecast,数据也出来了
总结
感谢能看到这里的朋友😉
本次的分享就到这里,猫头鹰数据致力于为大家分享技术干货😎
如果以上过程中出现了任何的纰漏错误,烦请大佬们指正😅
受益的朋友或对技术感兴趣的伙伴记得点赞关注支持一波🙏
也可以扫描二维码或搜索关注我的微信公众号【猫头鹰数据分析】,留言交流🙏