Docker基本使用(三)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/JosephThatwho/article/details/101513920

Stack 栈

stack是分布式应用的最顶层。一个stack由一组共享依赖环境、相互关联的服务组成,并且这些服务接受统一协调和拓展。
一个单独的栈便能够完成一个应用的完整定义与功能实现。
比如给之前的应用添加一个监控服务使我们能够了解swarm如何安排容器。在docker-compose.yml中增加一些新内容:

version: "3" 
services:
  web:
    image: josephthatwho/get-started:part2
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
networks:
  webnet:

这里给web服务添加了一个同级服务,名为’visualizer’,其中,volumes关键字赋予visualizer使用docker.socker的权限,palcement关键字确保visualizer服务仅运行在swarm manager上。
部署应用,并访问相应地址<IP:8080>:

$ docker stack deploy -c docker-compose.yml getstartedlab
Creating service getstartedlab_visualizer
Updating service getstartedlab_web (id: yjg179kmv58sh2j1uejn0pttx)

使用redis保存数据

通过和上面相同的工作流程可以添加Redis数据库存储应用数据

  1. docker-compose.yml中加入Redis服务:
version: "3" 
services:
  web:
    image: josephthatwho/get-started:part2
    deploy:
      replicas: 5
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: "0.1"
          memory: 50M 
    ports:
      - "80:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - webnet
  redis:
    image: redis
    ports:
      - "6379:6379"
    volumes:
      - "/home/docker/data:/data"
    deploy:
      placement:
        constraints: [node.role == manager]
    command: redis-server --appendonly yes 
    networks:
      - webnet
networks:
  webnet:

Redis有一个官法镜像名为redis,容器内的Redis的端口号6379已经通过预配置暴露给主机,这里我们通过Compose文件将这个端口开放;
redis镜像中的一些规定确保了整个栈的部署之间数据存储稳定:

  • redis只在manager上运行,所以他始终使用同一个文件系统
  • redis使用主机上的任意文件夹作为容器内的’/data’目录,并在此目录中存储数据
    以上规定在主机的正是物理文件系统中创建了存储Redis数据的真实来源,否则redis会将数据存在容器的’/data’目录,这一目录会随着容器的重新部署而丢失。
    在虚拟机myvm1中新建/data目录并重新部署应用:
$ docker-machine ssh myvm1 "mkdir ./data"
$ docker stack deploy -c docker-compose.yml getstartedlab
Creating service getstartedlab_redis
Updating service getstartedlab_web (id: yjg179kmv58sh2j1uejn0pttx)
Updating service getstartedlab_visualizer (id: auue1mby8gwhwasad8g9i1tr9)

访问任一节点的网页,可以看到对访问次数的统计。

猜你喜欢

转载自blog.csdn.net/JosephThatwho/article/details/101513920