Docker入门系列(三)linux
在这一节中,咱们将应用扩容,并支持负载均衡,这一节着重介绍service。git
在分布式环境中,services有不少不一样的应用实例构成。想象一下,你拥有一个大型的视频分享网站,这个网站好比包含一个服务用来处理数据存储,另外一个服务在后台作视频编解码,还有一个服务做为API接入层等等。github
一个服务只运行一种镜像,可是它定义了镜像运行的方式,好比,使用什么端口,运行多少容器的副本,在Docker平台上,使用docker-compose.yml
能够很是方便的对服务进行定义、运行、扩容。web
docker-compose.yml
是yaml格式的,它定义了Docker容器在生产环境的运行方式。docker
docker-compose.ymlwindows
version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M restart_policy: condition: on-failure ports: - "80:80" networks: - webnet networks: webnet:
这个docker-compose.yml
定义了以下行为:网络
webnet
在容器间共享80端口,达到负载均衡的目的(在内部, 容器将映射80端口到一个临时端口上)webnet
的网络进行默认设置启动swarm managerapp
docker swarm init负载均衡
启动service,并命名为getstartedlab
curl
docker stack deploy -c docker-compose.yml getstartedlab
运行以上的命令后,在一个宿主机上启动5个容器实例。
查看service的Id
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
pxfbw2lyo4bo getstartedlab_web replicated 5/5 ruccsbingo/get-started:part2 *:80->80/tcp
Docker swarms启动5个tasks来运行containers,可使用ps命令查看这些tasks。
docker service ps
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ly162fal310t getstartedlab_web.1 ruccsbingo/get-started:part2 moby Running Running 27 seconds ago
ghrcp7fzjaub _ getstartedlab_web.1 ruccsbingo/get-started:part2 moby Shutdown Shutdown 30 seconds ago
t1jh0d1jsbj8 getstartedlab_web.2 ruccsbingo/get-started:part2 moby Running Running about a minute ago
qdl4t4izqsza getstartedlab_web.3 ruccsbingo/get-started:part2 moby Ready Ready 10 seconds ago
nttsh0krytde _ getstartedlab_web.3 ruccsbingo/get-started:part2 moby Shutdown Running 10 seconds ago
wc9xqpqehwvx getstartedlab_web.4 ruccsbingo/get-started:part2 moby Running Running 10 seconds ago
m8xjlizio550 _ getstartedlab_web.4 ruccsbingo/get-started:part2 moby Shutdown Shutdown 13 seconds ago
t37arxf436d5 getstartedlab_web.5 ruccsbingo/get-started:part2 moby Running Running about a minute ago
使用以下命令列出containers
docker container ls -q
使用curl验证
Hello World!
Hostname: a8ee4747d8d7
Visits: cannot connect to Redis, counter disabled%
更改docker-compose.yml
文件中replicas
的数量,重启整个服务。
docker stack deploy -c docker-compose.yml getstartedlab
Docker将会作in-place替换,不用先停服务,或者kill容器。
中止service的命令
docker stack rm getstartedlab
中止swarm manager
docker swarm leave --force
到目前为止,你已经学会了如何使用swarm进行服务的上线,扩容,下线操做。在一下节中,会介绍在集群上执行上线,扩容,下线操做。