从Windows⾛⼊Docker(四)如何使⽤DockerDesktop的快速
5步教程
学习⾃
步骤1:使⽤本地Web服务
在不设置IIS的情况下运⾏IIS
如果您以前没有运⾏过Docker,这⾥有⼀个快速的⽅法来了解Docker在⼯作中的⼒量。⾸先,确保您正在使⽤Windows容器。然后在命令⾏中键⼊
docker  container  run  --detach  --publish  8080:80  --name  web  microsoft/iis:nanoserver
(之后耐⼼的等……)
最后显⽰:
Pull  complete
Digest:  sha256:6064d49ffd47f2c36c3bfbdd74ed87ec6932351de2dd81e90a6f5a7b27343c8f
Status:  Downloaded  newer  image  for  microsoft/iis:nanoserver映像文件怎么打开
b6fc651fcb52d107e3956764af3d2541b8279f68e0a62406d765f27957e144a7
打开浏览器,地址栏输⼊:localhost:8080/
显⽰如下,运⾏成功。
接下来,在C:\temp⽂件夹下,新建⽂本⽂档。
打开。
输⼊:
<  html>  <  body>  <  h1>Hello  myWorld!  <  /h1>  <  /body>  <  /html>
保存。
更名为index.html
停⽌容器:
docker  container  stop  web
将该⽂件复制到容器中,它将覆盖容器中的默认IIS主页:
docker  container  cp  C:\temp\index.html  web:C:\inetpub\wwwroot\index.html
再次启动容器:
docker  container  start  web
刷新localhost:8080看看你的新内容。显⽰下图运⾏成功。
您已经创建了⼀个Web服务器,使⽤了Microsoft发布和维护的Docker映像。Docker负责处理依赖关系。
革命英雄的故事
当您完成任务时,最好停⽌并移除正在运⾏的容器
docker  container  stop  web
docker  container  rm  web
步骤2:定制并推送到Docker  Hub
下⼀步,创建您⾃⼰的⾃定义映像。您需要有⼀个Docker  ID
在同⼀个C:\temp⽬录中创建⼀个名为Dockerfile的⽂件。没有扩展名。
打开记事本,输⼊:
FROM  microsoft/iis:nanoserver
COPY  index.html  /inetpub/wwwroot
这告诉Docker使⽤IIS基映像,并拷贝您刚才创建的HTML⽂件。与⼿动将⽂件复制到容器中不同,您将创建⼀个已经包含HTML的映像。
构建映像
在终端中键⼊:
docker  image  build  --tag  <  YourDockerID>/firstimage  .
这⾥要注意两点:
1、<  YourDockerID>是你的Docker  ID
2、语句后⾯的“.”,告诉Docker在此⽬录的上下⽂中构建。因此,当它将⽂件复制到/inetPUB/wwwroot时,它将使⽤这个⽬录中的⽂件。
运⾏映像
docker  container  run  --detach  --publish  8081:80  --name  web2    <  YourDockerID>/firstimage
去localhost:8081查看新的页⾯
最后把映像推到Docker  Hub
docker  image  push  <  YourDockerID>/firstimage
⽂件有1.29G
系统总是提⽰:
docker  :  An  image  does  not  exist  locally  with  the  tag:  naturalism/firstiamge
最后,停⽌并移除正在运⾏的容器:
docker  container  stop  web2
docker  container  rm  web2
步骤3:运⾏多服务应⽤程序
Docker很容易将多个服务连接在⼀起
Docker  Compose  是⽤于定义和运⾏多容器Docker应⽤程序的⼯具。您可以使⽤YAML⽂件配置应⽤程序的服务。然后,使⽤⼀个命令创建并启动配置中的所有服务。Docker  Compose安装⾃动与Docker  Desktop⼀同安装。
多容器应⽤程序是⼀个有多个容器运⾏和相互通信的应⽤程序。此⽰例使⽤⼀个简单的.NET  Core  Web应⽤程序,运⾏在MySQL数据库中。您可以查看我们的应⽤程序在dockersamples  GitHub  repo.我们已经把两个映像推到了Docker  Hub  在
王凯蒂家庭背景dockersamples  repo下。DockerComposed直接处理服务发现,允许应⽤程序直接引⽤服务,Docker将流量路由到正确的容器。要试⽤它,新建⽂本⽂件,打开。复制下⾯内容:
……
并粘贴到这个⽂件,保存。然后把它更名为l。
其中有很多细节,但基本上可以看到它指定要使⽤的映像、服务名称、应⽤程序配置、可⽤端⼝和不同服务所在的⽹络。
要运⾏它,请打开命令⾏,并导航到与l⽂件相同的⽬录。在命令⾏,键⼊
docker-compose  up  -d
当它从DockerHub中提取映像并启动它们时,您将看到⼀堆命令经过。完成运⾏后,导航到localhost  你应该看看⾳乐专辑查看器。.NET  Core应⽤程序将数据保存在MySQL数据库中-不需要安装.NET  Core或MySQL,所有组件都在Docker中运⾏。
若要停⽌和删除Docker创建的所有服务和资源,请输⼊:
docker-compose  down
步骤4:编排:集(Orchestration:  Swarm)
在开始本节之前,请确保您正在使⽤Linux容器。Swarm确实⽀持Windows容器,但它们要⼤得多,需要更长的时间才能拉出来。
虽然在⼀台机器上单独运⾏应⽤程序很容易,但业务流程允许您协调多台计算机来管理应⽤程序,包括复制、加密、负载平衡、服务发现等功能。如果你读过任何关于Docker的⽂章,你可能听说过Kubernetes和Docker  swarm模式。  Docker  Desktop是使⽤Swarm  或  Kubernetes最简单开始⽅式。
是⼀组机器正在运⾏Docker并加⼊到集中。在这之后,您继续运⾏您习惯的Docker命令,但是现在这些命令是由集管理器在集上执⾏的。中的机器可以是物理的,也可以是虚拟的。加⼊后,它们被称为节点。
集模式使⽤管理器和⼯作⼈员运⾏应⽤程序。管理⼈员运⾏集集,确保节点能够相互通信,将应⽤程序分配给不同的节点,并处理集中的各种其他任务。
Swarm使⽤Docker命令⾏或Docker组合⽂件格式,并添加了⼀些内容。⽤⼏个简单的步骤试⼀试。
……
更名为l的⽂件。
然后,从与该⽂件相同的⽬录中的命令⾏中,键⼊以下命令。
docker  swarm  init
(必须切换到Linux容器。Windows容器不能正常运⾏。)
PS  G:\temp>  docker  swarm  init
Swarm  initialized:  current  node  (c07o9awkcwwnej2le2ofqblm0)  is  now  a  manager.
To  add  a  worker  to  this  swarm,  run  the  following  command:
docker  swarm  join  --token  SWMTKN-1-5gppq8okhu5b6pzhdlqhpnr7ecr6abmxvnwa9wwrbxfdw962fs-9cnlyljp4
78f3wvczw6yoiqtp  192.168.65.3:2377
To  add  a  manager  to  this  swarm,  run  'docker  swarm  join-token  manager'  and  follow  the  instructions.
您应该看到⼀个可以复制和粘贴以向集添加另⼀个节点的命令。为了我们的⽬的,现在不要在中添加更多的节点。
docker  stack  deploy  -c  l  vote
PS  G:\temp>  docker  stack  deploy  -c  l  vote
Creating  network  vote_frontendqq空间音乐怎么免费添加
Creating  network  vote_backend泰剧无尽的爱大结局
Creating  service  vote_vote
Creating  service  vote_result
Creating  service  vote_worker
Creating  service  vote_redis
Creating  service  vote_db
Docker会告诉您它正在创建⽹络和服务。都连接到⼀个叫做“投票”的堆栈上。您可以通过键⼊
docker  stack  ls
也许你列出⼀项,有5个服务。
PS  G:\temp>  docker  stack  ls
NAME                                SERVICES                        ORCHESTRATOR
vote                                5                                      Swarm
接下来,您可以通过键⼊
docker  service  ls
PS  G:\temp>  docker  service  ls
ID    NAME  MODE    REPLICAS IMAGE PORTS w2bqgtlh3wy3  vote_db    replicated  0/1      postgres:9.4
nyktxmg5czb5  vote_redis  replicated  0/1redis:alpine    *:30000->6379/tcp
w1cofs8j7q4m  vote_result  replicated  0/1  dockersamples/examp  levotingapp_result:before*:5001->80/tcp
n5yrkahgt3s0  vote_vote  replicated  0/1  dockersamples/examp  levotingapp_vote:before  *:5000->80/tcp flitscv0rg9f  vote_worker replicated0/1dockersamples/examp  levotingapp_worker:latest
这将向您展⽰这5项服务,所有服务都有1份副本。都有⼀个名字您可以运⾏⼏次,直到所有副本都表⽰1/1。
那么发⽣了什么?使⽤简单的撰写⽂件格式,您创建了⼀个包含5个组件的应⽤程序:
1、Flask的投票页⾯,将结果推送给redis。
2、存储键值对的redis实例。
3、⼯作⼈员进⼊redis实例,取出数据并将其推⼊数据库。
4、postgres数据库。
命运石之门攻略
5、⼀个运⾏在Node.js中的结果页⾯,它从数据库中抽取数据。
现在,登录localhost:5000  去投票。你可以投票给猫或狗,⽆论你喜欢哪种。在localhost:5001你可以看到投票结果。打开不同的浏览器,添加额外的选票,如果你愿意的话。
所有这些组件的代码都在我们的⽰例投票应⽤程序在GitHub上。这⾥有很多事情要做,但这⾥有⼀些要点要强调:
1、这些服务都通过名称相互引⽤。因此,当结果应⽤程序调⽤数据库时,它连接到“postgres@db”,集负责将服务⽬录指
向“db”。
2、在多节点环境中,Swarm将按照您的需要展开副本。
3、Swarm也会做基本的负载平衡。以下是你如何看待这⼀点:
登录localhost:5000再来⼀次。注意页⾯底部的“由容器ID处理”。现在添加⼀个副本:
docker  service  scale  vote_vote=3
完成验证后,重新加载页⾯⼏次,然后看到容器ID在三个不同的值之间转换。这是三个不同的容器。即使它们位于不同的节点上,它们也会共享相同的⼊⼝和端⼝。
若要在进⼊下⼀节之前进⾏清理,请键⼊
docker  stack  rm  vote
PS  G:\temp>  docker  stack  rm  vote
Removing  service  vote_db
Removing  service  vote_redis
Removing  service  vote_result
Removing  service  vote_vote
Removing  service  vote_worker
Removing  network  vote_backend
Removing  network  vote_frontend
PS  G:\temp>  docker  swarm  leave  --force
Node  left  the  swarm.
步骤5:编排:Kubernetes
在开始本节之前,请确保您正在使⽤Linux容器。Kubernetes还不⽀持Windows容器。……
Kubernetes⼀直是启动状态!⽆语
结论:
在Windows运⾏docker当前还是有点难!