Docker系列之.NET Core入门(三)

在Docker生态系统中除了上一节所讲解的基本概念,还有其他专业术语,本文我们将一笔带过,同时会开始陆续进入到在.NET Core中使用Docker。

640?wx_fmt=gif

专业术语

640?wx_fmt=gif

Docker Engine(Docker引擎):客户端 - 服务器应用程序。Docker公司将Docker Engine分为两个产品。Docker Community Edition(CE)基于开源工具且免费,我们学习时可以使用这款产品。Docker Enterprise附带了其他功能支持,比如管理和安全等等功能。

Docker Client(Docker客户端):我们与Docker进行交互的主要方式。使用Docker命令行界面(CLI)时,在终端中键入以docker开头的命令,Docker Client会使用Docker API将命令发送到Docker守护进程中。

Docker Daemon(Docker守护进程):监听Docker API请求的Docker服务器。Docker守护进程主要管理镜像,容器,网络和卷。

Docker Volumes(Docker卷):存储创建应用程序和运行应用程序持久化数据的最佳方式。

Docker Registry:存储Docker镜像的远程注册位置。我们将镜像推送到注册表并从注册表中提取图像,我们可以托管自己的注册表或使用供应商商的注册表。

Docker Hub:Docker镜像的最大注册表。它也是Dcoker默认的注册表位置, 我们可以在Docker Hub上找到免费的镜像并存储我们自己的图像。

Docker Networking:允许我们将Docker容器连接在一起。连接的Docker容器可以位于同一主机或多个主机上。

Docker Compose:属于一个工具,我们可以非常轻松地运行需要多个Docker容器的应用程序。Docker Compose允许我们将命令写到docker-compose.yml文件中以供重用。Docker Compose命令行界面(cli)使我们可以更轻松地与多容器应用程序进行交互。Docker Compose免费安装Docker。

Docker Swarm:容器部署编排的产品。Docker官方教程进行容器编排和部署使用的Docker Swarm。建议不要浪费时间在Docker Swarm上,推荐使用Kubernetes(k8s)。

Docker Services:分布式应用程序的不同部分。 服务实际上只是“生产中的容器”。服务只运行一个镜像,但它编码了镜像的运行方式 - 它应该使用哪些端口,容器应该运行多少个副本,以便服务具有所需的容量等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。Docker服务允许我们跨多个Docker守护进程扩展容器,并使Docker Swarms成为可能。

640?wx_fmt=gif

容器回顾

Docker镜像在构建时被创建,而Dokcer容器在运行时被创建。

Dockerfile是Docker的核心,Dockerfile告诉Docker如何构建镜像从而被用来制作容器,每个Docker镜像都包含一个名为Dockerfile但没有扩展名的文件。

当调用docker build以创建映像时,假定Dockerfile位于当前工作目录中,可以使用文件标志(-f)指定到其他位置,容器是由一系列层所构建,而且每个镜像层只读,除了位于其他镜像层之上的最终容器镜像层。Dockerfile告诉Docker要添加哪些层以及添加它们的顺序,每个镜像层实际上只是一个包含自上一层以来的所更改的文件。

在linux中,几乎所有东西都是文件。基础镜像提供初始层,基础镜像也称为父镜像,将镜像从远程存储库提取到本地时,仅仅只下载本地计算机上尚未存在的层, Docker通过重用现有层来节省空间和时间。

Dockerfile指令是一行开头的大写单词,后紧跟其参数,Dockerfile中的每一行都可以包含一条指令。构建图像时,将从上到下处理指令,如下:

640?wx_fmt=png

只有FROM,RUN,COPY和ADD指令才能在最终镜像中创建镜像层,其他指令只是作为配置或说明,比如添加元数据或告诉Docker在运行时执行某些操作,例如公开端口或运行命令。在本文中,我们使用基于linux的Docker镜像,当然我们也可以使用基于Windows的镜像,建议使用linux。接下来我们来过滤下Dockerfile中各个指令说明。

640?wx_fmt=gif

Dockerfile指令

640?wx_fmt=gif

FROM - 指定基础(父)镜像。

LABEL - 提供元数据,包含维护者信息。

ENV - 设置持久化环境变量。

RUN - 运行命令并创建镜像层,用于将包安装到容器中。

COPY - 将文件和目录复制到容器中。

ADD - 将文件和目录复制到容器中。可以upack本地.tar文件。

CMD - 为执行容器提供命令和参数,可以覆盖参数,只能有一个CMD。

WORKDIR - 设置后续说明的工作目录。

ARG - 定义一个在构建时传递给Docker的变量。

ENTRYPOINT - 为正在执行的容器提供命令和参数。 

EXPOSE - 对外暴露端口。

VOLUME - 创建目录用于访问和存储持久化数据。

640?wx_fmt=gif

.NET Core入门例子

接下来我们以.NET Core中使用Docker并输出Hello World结束本文。

640?wx_fmt=png

我们通过命令创建一个.NET Core控制台程序,接下来为了在页面上输出Hello World,我们需要使用中间件,所以我们添加AspNetCore包,如下:

640?wx_fmt=png

然后我们打开控制台程序,添加中间件打印Hello World代码:

640?wx_fmt=png

640?wx_fmt=png

程序已就绪完毕,接下来我们发布该控制台程序,如下:

640?wx_fmt=png

接下来将执行上述步骤生成的bin目录(实际上只需拷贝发布后生成的publish目录即可,为了省事,我直接拷贝了整个bin目录)拷贝到ubuntu中


由于我对linux不熟悉,所以采用虚拟机加载桌面端ubuntu镜像的方式,对于从未使用过linux的童鞋,推荐使用桌面端ubuntu,友好的GUI界面,方便我们初学知道各个文件夹是做什么的,一看便知,后续再使用服务端版的ubuntu就会得心应手啦。 

640?wx_fmt=png

接下来我们进入HelloWorld文件目录,创建Dockerfile文件从而来创建.NET Core镜像。

640?wx_fmt=png

然后我们来编写Dockerfile文件构建镜像,如下:

640?wx_fmt=png

父镜像为.NET Core 2.2版本和我们创建的程序版本一致,然后将我们的应用程序(即publish目录)拷贝,最后指定程序运行的命令和参数。有了Dockerfile文件,那么我们就可以开始构建镜像了,终端继续运行如下命令(注意:镜像标签名称必须全部为小写,否则报错):

640?wx_fmt=png

640?wx_fmt=png

镜像已构建完毕,接下来则是创建并启动容器运行程序,如下:

640?wx_fmt=png

640?wx_fmt=png

从上述我们可看到容器已正常启动,且运行环境为生产环境,监听端口为5050。桌面版ubuntu默认为我们安装了火狐浏览器,此时我们打开浏览器将会输出Hello World,如下:

640?wx_fmt=png

640?wx_fmt=png

本文我们介绍Docker中的一些术语,然后最后写了一个在.NET Core中使用Docker的入门例子,非常简单。若直接使用服务端版本的ubuntu我是一脸懵逼,有了界面,我也大概知道了一些文件夹里存放的是什么,一目了然,虽说这还只是冰山一角,每天积累一点,日积月累,厚积薄发嘛不是。 

640?wx_fmt=jpeg

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

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

相关文章

P3911 最小公倍数之和 (atcoder C - LCMs)(反演)

P3911 最小公倍数之和 推式子 ∑i1n∑j1nlcm(ai,aj)下面的nmax(ai),ci为i在原数组中出现的次数∑i1n∑j1nijgcd(ij)cicj∑d1n1d∑i1n∑j1nijcicj(gcd(i,j)d)∑d1nd∑i1nd∑j1ndijcidcjd∑k∣gcd(i,j)μ(k)∑d1nd∑k1ndμ(k)k2∑i1nkd∑j1nkdijcikdcjkd∑t1nt(∑i1n…

P5502 [JSOI2015]最大公约数(gcd性质/min性质/分治)

P5502 [JSOI2015]最大公约数 对于求解(r-l1)*gcd(l,r)的最大值,首先我们有一个性质,就是一个前缀的gcd本质不同个数只有log个,所以我们可以利用这个性质,然后每次分治处理,每一层的复杂度可以做到O(n)因为枚举前缀后缀…

2019南昌网络赛G. tsy‘s number(反演 + 积性函数O(n)预处理)

tsy’s number 推式子 ∑i1n∑j1n∑k1nϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(k)ϕ(gcd(i,j,k))我们假定jp1k1p2k2p3p3……pnkn,有ϕ(j)p1k1−1(p1−1)p2k2−1(p2−1)p3k3−1(p3−1)……pnkn−1(pn−1),ϕ(j2)p12k1−1(p1−1)p22k2−1(p2−1)p32k3−1(p3−1)……

#2989. 数列(cdq分治/曼哈顿距离)

#2989. 数列 给定一个长度为n的正整数数列a[i]。 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)|x-y||a[x]-a[y]|。 2种操作(k都是正整数): 1.Modify x k:将第x个数的值修改为k。 2.Query x k&#xff…

通过Blazor使用C#开发SPA单页面应用程序(4) - Ant Design

通过Blazor使用C#开发SPA单页面应用程序(1)通过Blazor使用C#开发SPA单页面应用程序(2)通过Blazor使用C#开发SPA单页面应用程序(3)前面学习了Blazor的特点、环境搭建及基础知识,现在我们尝试的做个实际的组件。Ant Design是蚂蚁金服是基于Ant Design设计体系的 UI 组…

POJ 1741 Tree(点分治)

POJ 1741 Tree 思路 男人八题中的一题,写完这题算是18\frac{1}{8}81​个男人了! 这题是树上距离的计数问题,能够通过巧妙地排序加双指针来解决, 统计距离应该大家都会地,我就来说明一下如何计数吧。 假设我们已经求…

P1975 [国家集训队]排队(三维偏序)

P1975 [国家集训队]排队 查询逆序对数目,交换两个数的位置 首先逆序对是一个经典的二维偏序问题,然后现在问题变为静态,我们可以使用三维偏序来处理多出来的限制。或者也可以使用带修主席树处理。

Mercurial黄昏,Bitbucket宣布全面转向Git

源代码托管平台 Bitbucket 宣布将逐步放弃对版本控制系统 Mercurial 的支持。Bitbucket 推出于 2008 年,当时集中式版本控制是比较普遍的,Mercurial 是其中的典型代表,但是当前 Git 才是主流,它已经成为了大部分开源项目的首选版本…

HDU 4812 D Tree (点分治) (2013ACM/ICPC亚洲区南京站现场赛)

HDU 4812 D Tree 思路 点对距离相等并且要求输出字典序最小的点对,距离相等不就是点分治裸题了嘛, 照着这个思路出发我们只要记录下所有点对是满足要求的,然后再去找字典序最小的点对就行了, 接下来就是考虑如何求最小点对了&…

P2754 [CTSC1999]家园 / 星际转移问题(网络流)

P2754 [CTSC1999]家园 / 星际转移问题 经典问题,利用分层图来跑网络流。

使用 Azure DevTest Lab 搭建云端开发测试环境

点击上方蓝字关注“汪宇杰博客”导语程序员和测试工程师经常需要自己搭环境用于开发和测试目的,这些机器可能只会使用很短一段时间。通常我们会在本机使用 Hyper-V、VMWare 之类的虚拟机产品,或者使用企业IT管理员分配的虚拟机去完成这项工作。然而安装配…

dotNET Core WebAPI 统一处理(返回值、参数验证、异常)

现在 Web 开发比较流行前后端分离现在 Web 开发比较流行前后端分离,我们的产品也是一样,前端使用Vue,后端使用 dotNet Core WebAPI ,在写 API 的过程中有很多地方需要统一处理文档参数验证返回值异常处理本文就说说 API 的统一处理…

HDU 4059 The Boss on Mars (容斥)(2011 Asia Dalian Regional Contest)

The Boss on Mars 思路 显然我们可以求得∑i1ni46n515n410n3−n30\sum_{i 1} ^{n} i ^ 4 \frac{6n^5 15n^4 10n ^3 - n}{30}∑i1n​i4306n515n410n3−n​,接下来就是考虑把其中不与nnn互质的数给踢出去了,显然我们可以考虑容斥。 假设np1a1p2a2p3…

P2764 最小路径覆盖问题(网络流)

P2764 最小路径覆盖问题 最小链覆盖问题,关键在于怎么转化为网络流问题,我们可以发现网络流的常见套路就是将一个点拆成出点和入点来处理,对于一条链恰好满足出点和入点匹配的性质,所以可以拆点然后对应连边,这样跑最…

.net测试篇之单元测试/集成测试神器Autofixture

autofixture简介有了单元测试框架加上Moq(后面我们会用单独章节来介绍moq),可以说测试问题基上都能搞定了.然而有了AutoFixture对单元测试来说可以说是如虎添翼,AutoFixture并且它能与moq,rhinomock等框架结合,对单元测试带来的便捷性,可维护性和扩展性更是难以言表,只有用用了…

杜教筛入门详解

杜教筛入门 前置知识 迪利克雷卷积(*): 先介绍三个重要的函数: 元函数ϵ(n)[n1]\epsilon(n) [n 1]ϵ(n)[n1] 原函数可以看成是迪利克雷卷积里的单位元,即(ϵ∗f)(n)f(n)(\epsilon * f)(n) f(n)(ϵ∗f)(n)f(n)&am…

P2765 魔术球问题(网络流)

P2765 魔术球问题 给出n根柱子&#xff0c;求解可以将最多多少编号的球放在上面&#xff0c;并且满足相邻的编号和为完全平方数。 n<50 这个数据范围我们可以选择网络流&#xff0c;然后将对应点连边&#xff0c;然后每次枚举编号&#xff0c;将其加入残量网络&#xff0c…

DotNetCore 3.0 助力 WPF本地化

概览随着我们的应用程序越来越受欢迎&#xff0c;我们的下一步将要开发多语言功能。方便越来越多的国家使用我们中国的应用程序&#xff0c;基于 WPF 本地化&#xff0c;我们很多时候使用的是系统资源文件&#xff0c;可是动态切换本地化&#xff0c;就比较麻烦了。实现思路现在…

#6229. 这是一道简单的数学题(反演 + 杜教筛)

#6229. 这是一道简单的数学题 推式子 ∑i1n∑j1ilcm(i,j)gcd(i,j)(∑i1n∑j1nlcm(i,j)gcd(i,j)n)∗inv2所以重点求∑i1n∑j1nlcm(i,j)gcd(i,j)∑i1n∑j1nijgcd(i,j)2∑d1n∑i1nd∑j1ndij(gcd(i,j)1)∑d1n∑k1ndμ(k)k2(∑i1nkdi)2我们另tkd&#xff0c;得到∑t1n(∑i1nti)2∑k…