原标题:.NET Core 基于 Docker 基础镜像和挂载文件部署
转自: 可均可可
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
样例代码:
namespacePatrickLiu.MicroService.ServiceInstance.Controllers
{
///
///用户的 API 类型。
///
[Route( "api/[controller]")]
[ApiController]
publicclassUsersController: ControllerBase
{
# region私有字段
privatereadonlyILogger _logger;
privatereadonlyIUserService _userService;
privateIConfiguration _configuration;
# endregion
# region构造函数
///
///初始化该类型的新实例。
///
///日志记录器。
///用户服务接口。
///配置服务。
publicUsersController( ILogger logger, IUserService userService, IConfiguration configuration)
{
_logger = logger;
_userService = userService;
_configuration = configuration;
}
# endregion
# region实例方法
///
///获取一条记录
///
///
///
[HttpGet]
[Route( "Get")]
publicUser Get( intid)
{
return_userService.FindUser(id);
}
///
///获取所有记录。
///
///
[HttpGet]
[Route( "All")]
//[Authorize]
publicIEnumerable Get
{
Console.WriteLine( $"This is UsersController { this._configuration[ "port"]}Invoke");
returnthis._userService.UserAll.Select((user => newUser
{
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
}));
}
///
///超时处理
///
///
[HttpGet]
[Route( "Timeout")]
publicIEnumerable Timeout
{
Console.WriteLine( $"This is Timeout Start");
//超时设置。
Thread.Sleep( 3000);
Console.WriteLine( $"This is Timeout End");
returnthis._userService.UserAll.Select((user => newUser
{
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
}
}
///
///配置注入容器的实例。
///
///
publicvoidConfigureServices( IServiceCollection services)
{
services.AddSingleton;
}
Program.cs
publicstaticvoidMain( string[] args)
{
newConfigurationBuilder
.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
七、总结
这个系列整理起来还是很费劲的,因为每个环节都要测试到,保证所写的代码都在测试环境中能运行的,但是累并快乐着。正所谓,不积跬步,无以至千里,每天进步一点点,加油。返回搜狐,查看更多
责任编辑: