织梦多语言网站,网站开发语言怎么选,南宁网站建设公司哪个好,wordpress 5.0.3文章编辑简言#xff1a;最近刚完成公司的新系统#xff0c;系统使用的是微服务架构#xff0c;由于领导说要将服务docker化。下面将我的研究结果分享出来#xff0c;如若有错误的地方#xff0c;还请各位大佬多多指点。目录#xff1a; 什么是docker#xff1f;使用docker有… 简言 最近刚完成公司的新系统系统使用的是微服务架构由于领导说要将服务docker化。下面将我的研究结果分享出来如若有错误的地方还请各位大佬多多指点。目录 什么是docker使用docker有什么好处docker的使用和docker之间的通信1. 什么是docker Docker 是一个开源的应用容器引擎让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中然后发布到任何流行的 Linux或Windows 机器上也可以实现虚拟化。容器是完全使用沙箱沙箱一个虚拟系统程序机制相互之间不会有任何接口。也就是说我们可以用docker把我们系统和系统所需要的环境以及依赖的软件都打包成一个安装包然后可以安装到linux或windows上。 关于docker三个核心概念仓库存放镜像的仓库镜像类似于系统镜像容器镜像的实例 小时候我特喜欢去河边沙滩上玩耍一般都带着一个袋子里面装了许多形状的摸具。把沙子打湿之后拿模具一按一个形状块就有了记得小时候最喜欢就就是五角星的模具。偶尔有调皮捣蛋的小伙伴会把我做的形状给弄散当时我不哭也不恼拿起模具迅速就再做出一个来气的他没话可说。有时候突发奇想想到一种新的形状然后把它做出来之后我就会把它记下来然后回家立马弄个新形状的模具出来。 在这里我把docker比喻沙滩而我的袋子就好比仓库而模具就是镜像容器自然就是拿模具做出来的形状块。而真正的程序开发中你可以把镜像理解为我们做的系统的安装包容器理解为安装后的运行的系统。以上都是我自己个人对docker的理解如果哪位大佬觉得不合理还请多交流。2.使用docker有什么好处 以往的系统开发有这么一个问题在开发人员的电脑上开发的系统跑到其他人的电脑上或者是服务器上需要配环境、安装一大堆的软件。不同的操作系统安装方法还有可能不一样。等安装完了之后一启动发现一大堆的报错而再自己的电脑上跑的好好的这里我遇到过。还有就是有可能公司的文件服务器比较悠闲运行多个系统又怕干扰这里可以使用虚拟机但性能不是很好。 而使用docker可以把开发好的系统以及系统所依赖的东西打包成镜像然后可以发布到支持docker的平台。并且docker能够确保每个容器都拥有自己的资源并且和其他容器是隔离的。你可以用不同的容器来运行使用不同堆栈的应用程序等等docker好处实在太多我就不一一列举了。3.docker的使用和docker之间的通信 怎么安装docker去哪下载等等我就不讲了大家都不是编程小白。 第一步首先下载dotnet core镜像docker run -it microsoft/dotnet 这个是启动命令如果镜像不存在则会自动下载。 第二步创建项目 1.首先创建一个userservice的web api core项目并创建一个usercontroller ,并修改Program类中的CreateWebHostBuilder [Route(api/[controller])] [ApiController] public class UserController : ControllerBase { public IActionResult Get() { return Ok(new[] { new {Id1,Nameli }, new { Id 2, Name lisi } }); } } public static IWebHostBuilder CreateWebHostBuilder(string[] args) WebHost.CreateDefaultBuilder(args).UseUrls(http://*:5000).UseStartupStartup(); 2. 其次再创建一个emailservice的web api core项目并创建一个emailcontroller在修改Program类中的CreateWebHostBuilder[Route(api/[controller])] [ApiController] public class EmailController : ControllerBase { public IConfiguration Configuration { get; set; } public EmailController(IConfiguration Configuration) { this.Configuration Configuration; } public async TaskIActionResult Post(long userId) { using (HttpClient client new HttpClient()) { var content await client.GetAsync(http://user-service:5000/api/user); //这里的user-service是docker的link机制下面会讲 return new JsonResult(new { users await content.Content.ReadAsStringAsync() ,constr Configuration[databaseurl] }); } } }public static IWebHostBuilder CreateWebHostBuilder(string[] args) WebHost.CreateDefaultBuilder(args) .UseUrls(http://*:4001) .UseStartupStartup(); 最后再分别发布下项目。 第三步编写Dockerfile 分别在publish文件夹同级建一个Dockerfile。有关dockerfile里面的指令解释请阅读:https://www.cnblogs.com/linjiqin/p/8735230.html 1.首先编写emialservic的dockerfile 2. 编写userservice的dockerfile: 第四步分别在目录下运行cmd然后输入docker build -t dotnet/emailservice .和 docker build -t dotnet/userservice .(注意后面的 . 号)然后镜像就制作完成了。 第五步因为emailservice依赖于userservice所以emailservice和userservice要进行通信。 docker通信有三种方式通过docker容器ip加端口号。因为docker容器重启之后ip地址会改变不方便迁移。所以不推荐使用。(除非使用固定ip)通过映射到主机的端口号。这种方式可以但是会占用主机端口号docker的link机制。docker的link机制可以通过一个name来和另一个容器通信link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。 我这采用link机制首先编写一个docker-compose.yml文件 然后emailservice可以通过http://user-service:5000端口来访问userservice服务 (我在前面的代码中已经设置好了所以就不用了)。运行命令docker-compose up就行了结果图如下我这里为了显示结果然后映射到主机端口。在微服务中只需要把网关的端口映射出来就行 原文地址https://www.cnblogs.com/norain/p/docker_comunication.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com