问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

现在docker是否有windows的images

发布网友 发布时间:2022-04-25 21:50

我来回答

1个回答

热心网友 时间:2022-05-26 17:53

第一步:创建运行环境
现在Docker还只能在Linux上运行,所以你必须找一台Linux机器或者装了Linux虚拟机的机器来运行Docker;你在这里可以找到Docker的安装步骤或者通过参考这篇文章Getting Started with Docker On Azure(在Azure云端安装Docker的起步教程)。当然你可以从Azure云获取一个安装好Docker的Linux虚拟运行环境。

这个教程假设你已经在Azure上有了安装好Docker的Linux虚拟机。如果你拥有其它类似的运行环境,那这个教程也是可以使用的。

第二步:为你的ASP.NET 5应用创建一个Docker镜像
为了能让ASP.NET应用程序在云端部署,你需要一个Docker镜像来承载你的应用。

Docker镜像的文件系统是层叠式的(AUFS文件系统),可以这样形象的理解:你的应用程序只是“基础镜像”上层新加的一个层而已(译者注:就像盖房子一样,新增的楼层是基于它下面的楼层建立起来的),而在我们的例子中“基础镜像”为microsoft/aspnet(译者注:这是一个Docker镜像的名称,这个镜像存在于Docker Hub中)。在Docker中镜像的层级是增量叠加起来的(译者注:这点跟Git原理一样),Docker保存了每个层之间的差异,所以当我们用Docker部署应用时,提交的更新不会包含Linux发行版内核或者ASP.NET的运行时,因为这些都已经存在于“基础镜像”中了,你只会提交基于此“基础镜像”构建的应用程序本身,所以Docker的这种差异化提交、部署机制能够确保应用程序以最快速、最小化的增量方式进行部署,为运维带来极大的便利。

如何创建Docker镜像呢?答案是使用:Dockerfile。跟Makefile相似,Dockerfile包含了供Docker用来构建一个镜像的所有步骤。

本教程所用到的ASP.NET源代码可以从GitHub的aspnet/Home仓库下的HelloWeb目录提取。首先,使用如下命令将源代码从GitHub上克隆下来:
git clone git@github.com:aspnet/Home.git aspnet-Home

切换到aspnet-Home的sample目录下:
cd aspnet-Home/samples/HelloWeb

完成后目录结构应该如下所示:
├── Startup.cs
├── image.jpg
└── project.json

然后我们在此目录下创建一个名叫Dockerfile的文件,并输入如下指令:
FROM microsoft/aspnet

COPY . /app
WORKDIR /app
RUN ["kpm", "restore"]

EXPOSE 5004
ENTRYPOINT ["k", "kestrel"]

让我们逐条解释此Dockerfile中命令的含义:

第一行中FROM命令后面的‘microsoft/aspnet’说明我们要下载Docker Hub中名为‘microsoft/aspnet’(此镜像也是ASP.NET在Docker Hub上的官方镜像)的镜像作为我们例子程序的“基础镜像”;
COPY命令告诉Docker在构建镜像的时候同时将当前目录(译者注:.表示当前目录)下的所有文件(译者注:Startup.cs、image.jpg与project.json这三个文件)拷贝到容器的/app目录下;紧接着,使用WORKDIR命令告诉Docker将容器启动目录设置为/app目录;
RUN [kpm, restore]命令告诉Docker运行kpm restore命令安装ASP.NET相关依赖项,这些都是Docker在第一次运行此容器之前要做的准备工作;
EXPOSE 5004命令会告诉Docker正在构建的镜像有个监听5004号端口的服务(可以查看project.json文件确认)(译者注:意思是以此镜像为基础运行的容器需要向外暴露5004号端口);
最后,ENTRYPOINT [k, kestrel]命令说明每次用Docker启动此容器时都会自动执行k kestrel命令,同时通过运行此命令保证容器始终在运行不退出,其实kestrel命令就是启动了ASP.NET 5的服务器,启动此服务器后会启动一个监听5004号端口的进程,处理HTTP连接请求。(译者注:这就是为什么要向外暴露5004号端口的原因。)

第三步:创建镜像
当我们编写完Dockerfile后,当前目录应该是如下结构,Dockerfile和程序源代码在一起:
├── Dockerfile
├── Startup.cs
├── image.jpg
└── project.json

现在我们来创建此Docker镜像。这个过程非常简单——运行Docker的build命令即可,命令如下:
docker build -t myapp .

这条命令运行结束后Docker就生成了一个名为myapp的镜像;同时,你对镜像所做的任何变化都能通过重新运行此命令来生成一个新的镜像。在你的Linux虚拟机或者开发环境中运行docker images命令可以看到我们刚刚创建的myapp镜像了:
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
myapp latest ccb7994d2bc1 39 seconds ago 499.8 MB
microsoft/aspnet latest 16b1838c0b34 12 days ago 473.4 MB

你可以看到你的应用镜像以及ASP.NET镜像都存在于你的主机上。

现在我们开始讲如何将ASP.NET应用程序部署到云端。

第四步:运行容器
运行一个容器非常的简单,通过运行以下命令可以在你的开发机上启动myapp容器:
docker run -t -d -p 80:5004 myapp

-t表示附加一个伪终端(tty)到容器(在以后的ASP.NET 5版本中可能不在需要);
-d表示以后台的方式运行容器,如果不使用此标识的话,ASP.NET运行时后台的输入/输出流信息就会显示在你的终端上;
-p 80:5004告诉Docker将容器的5004号端口映射到宿主机的80号端口上。这样,宿主机80号端口接收的数据包就会被转发到容器的5004号端口上了;
最后,myapp是镜像的名称,我们可以用这个名称来启动之前Dockerfile构建的镜像。

容器启动之后(译者注:容器和镜像的区别就相当于OO中的对象和实例,对象是编译时的概念,实例是运行时的概念。以这样理解,容器是运行时的镜像。),可以通过以下命令查看容器运行的状态:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f70bd9ffbc36 myapp:latest "/bin/sh -c 'k kestr About a minute ago Up About a minute 0.0.0.0:80->5004/tcp mad_goodall

好的,容器启动了!但是我们的演示还没结束,我们还要完成Azure VM的终端端口映射(endpoint port mapping for Azure VM)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么网址更新火影忍者集数最快 如果你跟男朋友分手了,他的回答是顺其自然这是什么意思,我该怎么办... 一个女人像男人提分手男人说顺其自然是什么意思 上线两年《X-HERO》如何做到登顶多个国家榜首的? 龙武游戏怎么样费钱吗 Q1游戏公司产品 中国现有什么银行 x.最近六个月的通话记录? 爱奇艺会员哪里买便宜 爱奇艺会员免费领取 iphone4 怎样删除原来的旧凯立德地图 docker 所有web都要加端口号吗 怎么让Docker容器在后台以守护态形式运行 如何创建一个docker service 服务 docker 所有web都要加端口号吗? Docker 容器后台运行和前台运行的区别 歌曲链接怎么找?(找了可以弄在QQ空间的) 聚酯纤维面料的洗不掉的污垢要怎么样才可以洗掉阿? 聚酯纤维面料衣服上的食用油有什么办法才能洗掉 qq空间添加网络音乐歌曲链接怎么弄 ...100%聚酯纤维面料的白色裙子上面沾到油斑怎么洗掉 衣服碰上油了,面料是聚酯纤维,如何清洗干净? QQ空间的音乐链接怎么弄 怎么查看自己QQ空间的音乐链接 怎么去掉聚酯纤维面料裤子上的油渍? qq空间怎么做歌曲链接啊 聚酯纤维面料的衣服 沾油了怎么洗掉?? 如何设置空间音乐链接? 没有身份证户口本怎样做核酸检测? 无住所如何进行核酸检测? 自己在家怎么做核酸检测 docker images怎么会看到没名字的镜像 非Linux操作系统上可以用Docker吗 清明之前 还有一个重要的节日 知道吗 清明节的前一天是什么节日?11,清明节是那一天 为什么清明节前一天叫寒食节? 惊蛰辶后,清明之前是什么节? 清明的前一天寒食节 清明节的前一天是什么节日??? 元日,寒食,和清明这三首诗分别提到了什么传统节? 清明节是什么时候开始时兴起来的? 苹果手机屏幕进水了自己会干的吗 手机内部进水多久会自然干? 手机进水一段时间后会自己干吗? 手机进水一直玩水会不会干? 红米note8pro手机进水背光水会自己干掉吗? 手机摄像头进水可以自己干吗? 手机的液晶和触摸屏间进水了,可以自然干吗?对手机有危害吗?一般要多久? 冬天手机内部进水多久会自然干? 来大姨妈能吃炒菜花吗 “大姨妈”时期喝玫瑰花茶好吗?