• docker-swarm学习


    swarm :多主机 多容器管理

    在docker 1.13中,集成了docker swarm命令

    如果你看到要单独起swar容器docker run swarm,那说明是老版的

    先安装docker-machine docker-compose,docker三剑客一起搞基

    安装Docker Machine(Linux)

    curl -L https://github.com/docker/machine/releases/download/v0.9.0-rc2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

    安装Docker compose

    pip install docker-compose

    好了,工具准备好了,我们正式开始:
    集群主要架构:3个worker,2个manager

    # 创建管理节点
    docker-machine create --driver virtualbox manager1
    docker-machine create --driver virtualbox manager2
    
    # 创建工作节点
    docker-machine create --driver virtualbox worker1
    docker-machine create --driver virtualbox worker2
    docker-machine create --driver virtualbox worker3

    查看环境变量

    docker-machine env manager1
    docker-machine ip manager1
    docker-machine ssh manager1 “command”  # 连接manager1运行命令

    创建集群

    docker-machine ssh manager1 docker swarm init --listen-addr 192.168.99.101:2377 --advertise-addr 192.168.99.101

    id 用manager1的ip

    你会看到返回一条命令,连入其他主机运行该命令(啥也不用改)就能以worker身份加入集群

    docker-machine ssh worker1 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377
    docker-machine ssh worker2 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377
    docker-machine ssh worker3 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377

    查看节点

    docker-machine ssh manager1 docker node ls

    查看是否加入成功

    下面加入管理节点

    # 获取manage token
    docker-machine ssh manager1 docker swarm join-token manager
    # 运行命令
    docker-machine ssh manager2 docker swarm join --token SWMTKN-1-3z5rzoey0u6onkvvm58f7vgkser5d7z8sfshlu7s4oz2gztlvj-c036gwrakjejql06klrfc585r 192.168.99.101:2377

    再次查看节点

    docker-machine ssh manager1 docker node ls

    查看是否加入成功

    下面用几个命令熟悉一下:

    # 创建一个overlay网络
    docker network create --driver overlay swarm_test
    
    # pull镜像到节点
    docker-machine ssh manager1 docker pull nginx:alpine
    
    # 多节点使用swarm_test组成一组服务
    docker service create --replicas 2 --name helloworld --network=swarm_test nginx:alpine
    --replicas 启动几个容器
    
    # 查看服务状态
    docker service ls
    
    # 查看 helloworld 服务详情
    docker service ps helloworld
    
    # 进入节点查看
    docker-machine ssh manager1 docker ps -a
    
    # 进入节点1执行ping命令节点2:
    docker-machine ssh manager1 docker exec -i helloworld.1.ay081uome3eejeg4mspa8pdlx 
    ping helloworld.2.16cvore0c96rby1vp0sny3mvt
    ssh连上集群,exec进入容器 运行ping命令
    # 删除服务
    docker service rm helloworld
    
    # 新建端口映射的服务
    docker service create --replicas 2 --name helloworld -p 7080:80 --network=swarm_test nginx:alpine
    
    # 杀死节点
    docker-machine ssh worker2 docker kill helloworld.2.7acmhj0udzusv1d7lu2tbuhu4
    
    # 启动3个节点
    docker service scale helloworld=3


    下面用docker-compose运行一个投票网站:
    在当前目录新建文件

    version: "3"
    services:
    
      redis:
        image: redis:alpine
        ports:
          - "6379"
        networks:
          - frontend
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
      db:
        image: postgres:9.4
        volumes:
          - db-data:/var/lib/postgresql/data
        networks:
          - backend
        deploy:
          placement:
            constraints: [node.role == manager]
      vote:
        image: dockersamples/examplevotingapp_vote:before
        ports:
          - 5000:80
        networks:
          - frontend
        depends_on:
          - redis
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
          restart_policy:
            condition: on-failure
      result:
        image: dockersamples/examplevotingapp_result:before
        ports:
          - 5001:80
        networks:
          - backend
        depends_on:
          - db
        deploy:
          replicas: 2
          update_config:
            parallelism: 2
            delay: 10s
          restart_policy:
            condition: on-failure
    
      worker:
        image: dockersamples/examplevotingapp_worker
        networks:
          - frontend
          - backend
        deploy:
          mode: replicated
          replicas: 1
          labels: [APP=VOTING]
          restart_policy:
            condition: on-failure
            delay: 10s
            max_attempts: 3
            window: 120s
    
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        stop_grace_period: 1m30s
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
    
    networks:
      frontend:
      backend:
    
    volumes:
      db-data:
    # 拷贝文件到集群
    docker-machine scp docker-compose.yml manager1:~
    
    # 部署
    docker-machine ssh manager1 "docker stack deploy -c docker-compose.yml vote"
    
    # 启动情况
    docker-machine ssh manager1 "docker stack ps vote"

    访问网站:
    ip:5000
    ip:5001
    ip:8080

    附上官网上的命令:

    docker-machine create --driver virtualbox myvm1 # Create a VM (Mac, Win7, Linux)
    docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1 # Win10
    docker-machine env myvm1 # View basic information about your node
    docker-machine ssh myvm1 "docker node ls" # List the nodes in your swarm
    docker-machine ssh myvm1 "docker node inspect <node ID>" # Inspect a node
    docker-machine ssh myvm1 "docker swarm join-token -q worker" # View join token
    docker-machine ssh myvm1 # Open an SSH session with the VM; type "exit" to end
    docker-machine ssh myvm2 "docker swarm leave" # Make the worker leave the swarm
    docker-machine ssh myvm1 "docker swarm leave -f" # Make master leave, kill swarm
    docker-machine start myvm1 # Start a VM that is currently not running
    docker-machine stop $(docker-machine ls -q) # Stop all running VMs
    docker-machine rm $(docker-machine ls -q) # Delete all VMs and their disk images
    docker-machine scp docker-compose.yml myvm1:~ # Copy file to node's home dir
    docker-machine ssh myvm1 "docker stack deploy -c <file> <app>" # Deploy an app
  • 相关阅读:
    前端面试的一道数组元素值去重问题
    数组元素前移,第一个元素放置数组末位
    Linux 查询oracle错误日志&警告日志
    CentOS 6.4 源码安装MySQL 5.6
    Oracle 表空间不足引起的问题及解决方法
    Oracle 强制中止正在执行的SQL语句
    request for member 'GetByteArrayElements'
    jni入门 eclipsecygwin+ndk
    ffmpeg结构体(二)
    ffmpeg结构体(三)
  • 原文地址:https://www.cnblogs.com/wj5633/p/6963591.html
Copyright © 2020-2023  润新知