> 文档中心 > 最新Centos7 + .Net6 + Docker 配置镜像发布详解

最新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,数据也出来了

总结
        感谢能看到这里的朋友😉

        本次的分享就到这里,猫头鹰数据致力于为大家分享技术干货😎

        如果以上过程中出现了任何的纰漏错误,烦请大佬们指正😅

        受益的朋友或对技术感兴趣的伙伴记得点赞关注支持一波🙏

        也可以扫描二维码或搜索关注我的微信公众号【猫头鹰数据分析】,留言交流🙏