.netcore项目docker化,以及docker之间通信

简言:

  最近刚完成公司的新系统,系统使用的是微服务架构,由于领导说要将服务docker化。下面将我的研究结果分享出来,如若有错误的地方,还请各位大佬多多指点。

目录:  

  1. 什么是docker?

  2. 使用docker有什么好处?

  3. docker的使用和docker之间的通信

1. 什么是docker?  

  Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱(沙箱:一个虚拟系统程序)机制,相互之间不会有任何接口。也就是说,我们可以用docker把我们系统和系统所需要的环境以及依赖的软件都打包成一个安装包,然后可以安装到linux或windows上。

  关于docker三个核心概念:

  1. 仓库:存放镜像的仓库

  2. 镜像:类似于系统镜像

  3. 容器:镜像的实例

  小时候我特喜欢去河边沙滩上玩耍,一般都带着一个袋子,里面装了许多形状的摸具。把沙子打湿之后,拿模具一按,一个形状块就有了,记得小时候最喜欢就就是五角星的模具。偶尔有调皮捣蛋的小伙伴会把我做的形状给弄散,当时我不哭也不恼,拿起模具迅速就再做出一个来,气的他没话可说。有时候突发奇想,想到一种新的形状,然后把它做出来之后,我就会把它记下来,然后回家立马弄个新形状的模具出来。

  在这里,我把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 {Id=1,Name="li" }, new { Id = 2, Name = "lisi" } });

       }

   }      

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseStartup<Startup>();

     2. 其次再创建一个emailservice的web  api core项目,并创建一个emailcontroller,在修改Program类中的CreateWebHostBuilder


[Route("api/[controller]")]

 [ApiController]

 public class EmailController : ControllerBase

 {

     public IConfiguration Configuration { getset; }

     public EmailController(IConfiguration Configuration)

     {

         this.Configuration = Configuration;

     }

     public async Task<IActionResult> 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")

               .UseStartup<Startup>();

     最后,再分别发布下项目。

  第三步:编写Dockerfile

    分别在640?wx_fmt=pngpublish文件夹同级建一个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通信有三种方式:


    1. 通过docker容器ip加端口号。因为docker容器重启之后ip地址会改变,不方便迁移。所以不推荐使用。(除非使用固定ip)

    2. 通过映射到主机的端口号。这种方式可以,但是会占用主机端口号

    3. docker的link机制。docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。


  我这采用link机制,首先编写一个docker-compose.yml文件      

  然后emailservice可以通过:http://user-service:5000端口来访问userservice服务 (我在前面的代码中已经设置好了,所以就不用了)。运行命令:docker-compose up,就行了

结果图如下:(我这里为了显示结果,然后映射到主机端口。在微服务中只需要把网关的端口映射出来就行)

  640?wx_fmt=png

640?wx_fmt=png

原文地址:https://www.cnblogs.com/norain/p/docker_comunication.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 恶心的构造题&#xff0c;思路很简单但是代码细节很多&#xff0c;搞了半天。 根据题目的性质不难发现&#xff0c;如果有两个相同颜色的球相邻&#xff0c;那么他们的颜色永远不会改变。 …

.NET CORE 多语言实现方案

根据市场需求&#xff0c;基于.NET CORE平台开发的RoadFlow工作流平台需要实现多语言版本。经过方案讨论和比对&#xff0c;决定采用.NET自带的本地化功能来实现多语言。话不多说&#xff0c;直接上实现方式。首先修改Startup.cs在public void ConfigureServices(IServiceColle…

【CTSC2018】暴力写挂【边分治】【虚树】

题意&#xff1a;给两棵基于同一点集的带边权树&#xff0c;记 lca⁡(x,y),depth⁡(x)\operatorname{lca}(x,y),\operatorname{depth}(x)lca(x,y),depth(x) 为第一棵树上的 lca、到根的边长度之和&#xff0c;lca⁡′(x,y),depth⁡′(x)\operatorname{lca}(x,y),\operatorname{…

hdu 6153 A Secret kmp + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个串a,ba,ba,b&#xff0c;让你求对于bbb的每个后缀&#xff0c;设其长度为lenlenlen&#xff0c;其在aaa中出现的次数为cntcntcnt&#xff0c;那么他的贡献为len∗cntlen*cntlen∗cnt&#xff0c;求每…

中国程序员,请挺起你的腰杆!

这两天发生一个事&#xff0c;登月50周年之际&#xff0c;阿波罗11号制导计算机&#xff08;AGC&#xff09;指令和登月模块的源代码在Github上发布公开了&#xff0c;大量中国人前往围观&#xff0c;把issues区当成了论坛版块灌水留言。猎奇起哄本为消遣作乐&#xff0c;有不妥…

【BZOJ3252】攻略【闵可夫斯基和】【堆启发式合并】

题意&#xff1a;给一棵 nnn 个点的有点权的树&#xff0c;你需要找 kkk 条根到叶子的路径&#xff0c;使得路径并集的权值和最大。 n≤2105n\leq 2\times 10^5n≤2105 其实就是个贪心&#xff0c;只是从这个角度更自然一点( 先有个显然的 dp&#xff0c;设 f(u,k)f(u,k)f(u,…

Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 史上最水GGG题&#xff0c;没有之一。 考虑最小的情况如何构造&#xff0c;显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可&#xff0c;这样的最小值为n∗(n1)2\frac{n*(n1)}{2}2n∗(n1)​…

Async,Await和ConfigureAwait的关系

在.NET Framework 4.5中&#xff0c;async / await关键字已添加到该版本中&#xff0c;简化多线程操作&#xff0c;以使异步编程更易于使用。为了最大化利用资源而不挂起UI&#xff0c;你应该尽可能地尝试使用异步编程。虽然async / await让异步编程更简单&#xff0c;但是有一…

【洛谷P5114】八月脸【边分治】【闵可夫斯基和】

题意&#xff1a;一棵 nnn 个点的树&#xff0c;每个点有两个权值 ai,bia_i,b_iai​,bi​&#xff0c;有黑白两种颜色。mmm 次询问&#xff0c;每次给定一个 kkk,求一条端点异色的路径&#xff0c;使得 k∑ai∑bik\sum a_i\sum b_ik∑ai​∑bi​ 最大化。 n≤2105n\leq 2\times…

Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路&#xff1a; 首先需要发现一些性质&#xff0c;假设preipre_iprei​代表所有mj<im_j< imj​<i的pjp_jpj​和。可以发现&#…

【招聘(深圳)】敢为软件技术有限公司 .Net 工程师

敢为软件介绍&#xff1a;深圳市敢为软件技术有限公司致力于打造面向未来的最酷最具影响力的高科技公司。敢为软件在万物互联、行业应用、大屏可视化及自然交互等方面形成完整的闭环&#xff0c;是物联网领域连接能力最强、应用领域最广、用户体验最好的高科技公司。在万物互联…

【WC2018】通道【边分治】【虚树】【树的直径】

题意&#xff1a;给三棵基于同一点集的带边权的树&#xff0c;边权非负&#xff0c;求两点间三棵树上距离之和的最大值。 n≤105n\leq 10^5n≤105 一句话题解&#xff1a;在第一棵树上做边分治&#xff0c;丢到第二棵树上建虚树&#xff0c;在虚树上根据第三棵树的直径dp。 首…

DevOps案例研究:知人善任——Google敏捷核心文化

内容来源&#xff1a;DevOps案例深度研究-Google敏捷实践战队&#xff0c;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会。本文内容贡献者&#xff1a;陈霁、刘翀、谈佳婧、张霖。阅读干货前先感受一下热烈的氛围~一、Google如何快速交付原型1.1 Savioke公…

Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个串&#xff0c;只包含前kkk个字母和&#xff1f;&#xff1f;&#xff1f;&#xff0c;定义fif_ifi​表示第iii个字母在串中出现的最长连续长度&#xff0c;你现在需要将???替换为前kkk个字母&am…

MTT 学习笔记

很久以前就听说了这东西&#xff0c;一直没空学。最近重学多项式&#xff0c;就重新搞了一下。 MTT 主要解决的是任意模数&#xff08;或者说是没有模数&#xff09;的多项式乘法&#xff0c;可以用于应对专门恶心人的毒瘤题。 首先&#xff0c;假设多项式次数 10510^5105,值…

在 VS Code 中轻松 review GitHub Pull Requests

相信大家在平时工作或者自己的项目中&#xff0c;一定都有在 GitHub 上进行 Code Review 的经历。对于韩老师来说&#xff0c;不论是平时工作的项目&#xff0c;还是自己的业余项目&#xff0c;代码基本都是在 GitHub 上。所以&#xff0c;在 GitHub 上进行 Pull Requests 的 C…

Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你nnn个数&#xff0c;每个数初始方向是向右&#xff0c;每次可以交换相邻两个位置并且将这两个位置的方向调换&#xff0c;问这个序列的最终状态能否是非递减且方向都向右。 n≤1e5,ai≤1e5n\le1e5,a_i\l…

【CC November Challenge 2012】Arithmetic Progressions【分块】【FFT】

题意&#xff1a;给定长度为 nnn 的正整数序列 AAA,求满足 i<j<k,Aj−AiAk−Aji<j<k,A_j-A_iA_k-A_ji<j<k,Aj​−Ai​Ak​−Aj​ 的三元组个数。 n≤105,Ai≤3104n\leq 10^5,A_i\leq 3\times 10^4n≤105,Ai​≤3104 三个位置只有 jjj 限制比较紧&#xff0c…

火热的云原生到底是什么?一文了解云原生四要素!

所谓云原生&#xff0c;它不是一个产品&#xff0c;而是一套技术体系和一套方法论&#xff0c;而数字化转型是思想先行&#xff0c;从内到外的整体变革。更确切地说&#xff0c;它是一种文化&#xff0c;更是一种潮流&#xff0c;是云计算的一个必然导向。随着虚拟化技术的成熟…

Codeforces Round #732 (Div. 2) D. AquaMoon and Chess 组合数学 + 找规律

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个010101串&#xff0c;当且仅当某个111的某一边i1,i−1i1,i-1i1,i−1有111&#xff0c;这个111可以跟i2,i−2i2,i-2i2,i−2交换位置&#xff0c;问最终能产生多少状态。 n≤1e5n\le1e5n≤1e5 思路&a…