查看原文
其他

.NET Core 基于 Docker 基础镜像和挂载文件部署

DotNet 2021-09-23

(给DotNet加星标,提升.Net技能

转自:可均可可
cnblogs.com/PatrickLiu/p/14181218.html

简介


我们在上一篇文章《.NET Core 基于 Dockerfile 文件部署》中介绍了,如何在Linux系统上的Docker容器中部署.NET Core项目的第一种方法。


如果大家要想练习我们的例子,大家必须对Linux系统有所了解,对Linux的基础操作命令也要有使用经验,因为我踩了很多坑,伤心啊。在这个基础上,也要对Docker比较熟悉,Docker的操作命令也要比较熟悉,否则,真的就有些困难了。


这篇介绍把Net Core项目部署到Linux系统中的Docker容器中第二种方式,继续我们这个系列。这三种方式要这么详细的交代,是因为,在我以后的文章里,如果再有涉及项目的部署和迁移的话题,就不会写的这么详细了。


也希望大家见谅和理解,因为我们每篇文章都要突出文章的主题,而且每篇文章解决一个问题,否则,喧宾夺主就不好了。看过我文章的人会知道,我的文章会有重复的部分,这样做也是为了照顾读者,每篇文章都是独立的,让大家看的清楚和明白,避免在多篇文章之间切换,不是为了凑字数。


我们开始创建项目镜像和挂载文件,开始之前我们先创建测试项目。


一、搭建测试项目


(1)、PatrickLiu.MicroService.Interfaces(NetCore类库项目),定义抽象接口层,代码很简单,因为它不是重点,重点是框架。



(2)、PatrickLiu.MicroService.Models(NetCore类库项目),定义用于传递数据的实体模型,代码很简单,因为它不是重点,重点是框架。



(3)、PatrickLiu.MicroService.Services(NetCore类库项目),定义实现接口的服务层,代码很简单,因为它不是重点,重点是框架。



(4)、PatrickLiu.MicroService.ServiceInstance(Asp.Net Core WebAPI项目),对外提供业务功能WebApi项目,该项目必须引入其他关联项目:


  • PatrickLiu.MicroService.Interfaces


  • PatrickLiu.MicroService.Models


  • PatrickLiu.MicroService.Services



样例代码:


namespace PatrickLiu.MicroService.ServiceInstance.Controllers
{
/// <summary>
/// 用户的 API 类型。
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class UsersController : ControllerBase
{
#region 私有字段
private readonly ILogger<UsersController> _logger;
private readonly IUserService _userService;
private IConfiguration _configuration;
#endregion

#region 构造函数
/// <summary>
/// 初始化该类型的新实例。
/// </summary>
/// <param name="logger">日志记录器。</param>
/// <param name="userService">用户服务接口。</param>
/// <param name="configuration">配置服务。</param>
public UsersController(ILogger<UsersController> logger, IUserService userService, IConfiguration configuration)
{
_logger = logger;
_userService = userService;
_configuration = configuration;
}
#endregion

#region 实例方法
/// <summary>
/// 获取一条记录
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
[Route("Get")]
public User Get(int id)
{
return _userService.FindUser(id);
}

/// <summary>
/// 获取所有记录。
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("All")]
//[Authorize]
public IEnumerable<User> Get()
{
Console.WriteLine($"This is UsersController {this._configuration["port"]} Invoke");
return this._userService.UserAll().Select((user => new User
{
ID = user.ID,
Name = user.Name,
Account = user.Account,
Password = user.Password,
Email = user.Email,
Role = $"{this._configuration["ip"]}:{this._configuration["port"]}",
LoginTime = user.LoginTime
}));
}

/// <summary>
/// 超时处理
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("Timeout")]
public IEnumerable<User> Timeout()
{
Console.WriteLine($"This is Timeout Start");
//超时设置。
Thread.Sleep(3000);
Console.WriteLine($"This is Timeout End");
return this._userService.UserAll().Select((user => new User
{
ID = user.ID,
Name = user.Name,
Account = user.Account,
Password = user.Password,
Email = user.Email,
Role = $"{this._configuration["ip"]}:{this._configuration["port"]}",
LoginTime = user.LoginTime
}));
}
#endregion
}
}



/// <summary>
/// 配置注入容器的实例。
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IUserService, UserService>();
}


Program.cs 


public static void Main(string[] args)
{
new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddCommandLine(args)//支持命令行
.Build();
CreateHostBuilder(args).Build().Run();
}


二、发布项目


我们为了将.NET Core项目部署到Linux(CentOS7)环境的Docker容器中去,先要发布我们的项目:PatrickLiu.MicroService.ServiceInstance,因此,我们就要在该项目上点击鼠标右键选择菜单【发布】。


1、开始发布项目

 


2、项目发布成功



3、发布后的项目文件。



三、生成Docker镜像文件


1、拷贝文件


项目文件必须发布成功,然后将发布成功的程序文件拷贝的Linux服务器上。


服务器路径:/root/testProject/second


             

Linux(CentOS7)服务器上的文件目录结构。



2、查看Linux服务器上的文件结构


命令:ls –a

             


四、生成容器实例


我们可以直接生成容器实例了。


命令:docker run -d -p 8083:80 -v /root/testProject/second:/app  --workdir /app mcr.microsoft.com/dotnet/core/aspnet dotnet  /app/PatrickLiu.MicroService.ServiceInstance.dll



五、通过命令测试容器是否正常运行


命令:Docker ps –a



六、通过浏览器访问来测试


容器启动正常,那我们就可以通过浏览器访问看看,我们先获取我们的地址。


命令:ifconfig




有了地址,我们访问:http://192.168.127.141:8083/api/users/all



七、总结


这个系列整理起来还是很费劲的,因为每个环节都要测试到,保证所写的代码都在测试环境中能运行的,但是累并快乐着。正所谓,不积跬步,无以至千里,每天进步一点点,加油。


- EOF -


推荐阅读  点击标题可跳转
.NET 5 开源工作流框架elsa技术研究.NET Core 基于 Dockerfile 文件部署WSL Ubuntu上使用 .NET 进行跨平台开发


看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存