Docker 入门(Mac环境)- part 3 服务(services)

part-3 服务(services)

简介

一个应用的规模的扩大是很常见的事情,会经常用到负载均衡这些,如要实现这些功能,我们就会用到docker中更高一层的东西-service(服务)。

比如说一个视频分享网站,包括存储的部分,前端展示的部分,这些不同的部分就可以称之为服务。定义/运行/管理成规模的应用在docker中很容易实现,通过一个docker-compose.yml文件就可以了。

docker-compose.yml文件

创建一个docker-compose.yml文件,内容是:

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:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

配置文件的各项指标的含义:把这个服务称之为“web”,版本是3,5个拷贝,每个用cpu不超过10%,内存不超过50M,失败了就重启,端口映射是4000到80,通过webnet实现负载均衡。

app启动

  • 在用docker stack deploy之前可以使用docker swarm init来初始化一下,然后通过docker stack deploy -c docker-compose.yml getstartedlab来启动,可以通过docker service ls查看进程,效果如下:
➜  docker_file docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                     PORTS
k0315l4qcvdo        getstartedlab_web   replicated          5/5                 wang/get-started:part-2   *:4000->80/tcp
  • 通过docker service ps getstartedlab_web可以查详细进程
➜  docker_file docker service ps getstartedlab_web
ID                  NAME                  IMAGE                     NODE                    DESIRED STATE       CURRENT STATE           ERROR               PORTS
s9ygrgj69gxp        getstartedlab_web.1   wang/get-started:part-2   linuxkit-025000000001   Running             Running 2 minutes ago
xy1ot8kxyqac        getstartedlab_web.2   wang/get-started:part-2   linuxkit-025000000001   Running             Running 2 minutes ago
r7x6c9rpf1dg        getstartedlab_web.3   wang/get-started:part-2   linuxkit-025000000001   Running             Running 2 minutes ago
ogx1pyedra2e        getstartedlab_web.4   wang/get-started:part-2   linuxkit-025000000001   Running             Running 2 minutes ago
63a32pzagsr2        getstartedlab_web.5   wang/get-started:part-2   linuxkit-025000000001   Running             Running 2 minutes ago
  • 查看container
➜  docker_file docker container ls -q
596ea073ac78
5059346a8474
bde0a1787a38
9c6e956b3d05
d450035e17b8
  • 查看多个拷贝(负载均衡)运行的效果,用了下面命令后然后浏览器刷新几次页面,会发现有hostname的变化
➜  docker_file curl -4 http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> bde0a1787a38<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>%

参数调整

  • 调整yml后可以通过docker stack deploy -c docker-compose.yml getstartedlab来更新

关闭应用和swarm

  • docker stack rm getstartedlab
  • 离开swarm, docker swarm leave --force
  • 这里的感觉就是swarm相当于一个基础环境,类似于virtualenv这种概念
posted @ 2018-07-10 11:28  wswang  阅读(1260)  评论(0编辑  收藏  举报