基础知识
windows docker 介绍了安装和容器的入门知识。
建议掌握以上知识,阅读本篇。
Docker Service
在分布式应用程序中,应用程序的不同部分称为“服务”。
例如,如果您想象一个视频共享站点,它可能包括一个用于将应用程序数据存储在数据库中的服务,一个用于在后台进行视频转码的服务。用户上传内容,前端服务等。
服务实际上只是“生产中的容器”。服务只运行一个映像,但它编码图像的运行方式 - 应该使用哪些端口,应该运行多少个容器副本,以便服务具有所需的容量,以及等等。扩展服务会更改运行该软件的容器实例的数量,从而为流程中的服务分配更多计算资源。
幸运的是,使用Docker平台定义,运行和扩展服务非常容易 - 只需编写一个 docker-compose.yml
文件即可。
第一个 docker-compose.yml
文件
- docker-compose.yml
image 处自行修改为自己的 image。
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: houbinbin/get-started:part2
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
这个docker-compose.yml文件告诉Docker执行以下操作:
-
从注册表中提取我们上传的图像。
-
将该映像的5个实例作为名为web的服务运行,限制每个实例使用,最多10%的CPU(跨所有核心)和50MB的RAM。
-
如果一个失败,立即重启容器。
-
将主机上的端口4000映射到Web的端口80。
-
指示Web容器通过称为webnet的负载平衡网络共享端口80。 (在内部,容器本身在短暂的端口发布到web的端口80.)
-
使用默认设置(负载平衡的覆盖网络)定义Webnet网络。
运行 app
init
首先执行以下命令,后面解释这个命令。不执行会报错的。
docker swarm init
deploy
- 部署
运行命令
docker stack deploy -c docker-compose.yml getstartedlab
我们的单个服务堆栈在一台主机上运行已部署映像的5个容器实例。我们来调查吧。
在我们的应用程序中获取一项服务的服务ID:
- 服务信息查看
docker service ls
信息如下:
ID NAME MODE REPLICAS IMAGE PORTS
rfqzt5a4byit getstartedlab_web replicated 0/5 houbinbin/get-started:part2 *:4000->80/tcp
- 列出服务对应的任务信息
docker service ps getstartedlab_web
日志如下:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
453xmyqfc56c getstartedlab_web.1 houbinbin/get-started:part2 Running Pending 2 minutes ago "no suitable node (unsupported…"
tcfvo23qh2aq getstartedlab_web.2 houbinbin/get-started:part2 Running Pending 2 minutes ago "no suitable node (unsupported…"
k07khp4r3gk6 getstartedlab_web.3 houbinbin/get-started:part2 Running Pending 2 minutes ago "no suitable node (unsupported…"
0cgboieoyd3u getstartedlab_web.4 houbinbin/get-started:part2 Running Pending 2 minutes ago "no suitable node (unsupported…"
9fvnv6t83004 getstartedlab_web.5 houbinbin/get-started:part2 Running Pending 2 minutes ago "no suitable node (unsupported…"
扩展应用程序
您可以通过更改docker-compose.yml中的副本值来保存更改,并重新运行docker stack deploy命令来扩展应用程序:
docker stack deploy -c docker-compose.yml getstartedlab
Docker执行就地更新,无需首先拆除堆栈或杀死任何容器。
现在,重新运行 docker container ls -q
以查看已重新配置的已部署实例。如果放大副本,则会启动更多任务,从而启动更多容器。
关闭服务
- 移除 app
docker stack rm getstartedlab
- 移除 swarm
docker swarm leave --force
使用Docker站起来扩展您的应用程序就像这一样简单。您已经朝着学习如何在生产中运行容器迈出了一大步。接下来,您将学习如何在Docker机器群集上运行此应用程序作为真正的群体。
注意:这样的撰写文件用于使用Docker定义应用程序,可以使用Docker Cloud或使用Docker Enterprise Edition选择的任何硬件或云提供程序上载到云提供程序。
拓展阅读
参考资料
https://docs.docker.com/get-started/part3/