zoukankan      html  css  js  c++  java
  • 小白学Docker之Swarm

    承接上篇文章:小白学Docker之Compose,自学网站来源于https://docs.docker.com/get-started

    系列文章:

    概念

    Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

    创建一个集群

    Mac,Linux,Window7和8虚拟主机安装

    Mac,Linux,Window7和8需要在本地安装虚拟机来创建虚拟主机,如果你已经配置了Docker Toolbox,那么就已经安装了Virtual Box,因此不需要重新安装

    创建完之后运行下面的命令就可以在本地创建虚拟主机了:

    docker-machine create --driver virtualbox myvm1
    docker-machine create --driver virtualbox myvm2
    

    Windows 10虚拟主机安装

    创建共享虚拟交换机,以便各个虚拟主机能够相互之间进行连接。

    Virtual Switch(vSwitch)相当于一个虚拟的二层交换机,该交换机连接虚拟网卡和物理网卡,将虚拟机上的数据报文从物理网口转发出去。与物理交换机一样,vSwitch的作用就是用来转发数据。

    1. 启动Hyper-V管理器

    docker-Hyper-V

    1. 进入管理页面之后,找到右手边的虚拟交换机管理器

    switch-manager

    1. 打开管理器,创建虚拟交换机

    v-switch

    1. 进行虚拟交换机配置

    v-switch-config

    之后执行下面的命令就可以创建虚拟主机了:

    docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1
    docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm2 
    

    docker-machine-create

    虚拟主机列表以及IP

    docker-machine ls
    

    docker-machine-ls

    初始化集群并且添加节点

    将myvm1这台主机作为集群管理机,将myvm2作为工作节点加入到集群中,使用docker-machine ssh连接到虚拟机,使用docker swarm init来初始化节点。

    docker-machine ssh myvm1 "docker swarm init --advertise-addr 10.5.21.30"
    

    docker-swarm-int

    将myvm2加入到swarm节点

    docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-3k3mev52t5hegvsgoagqhmw05eknp3gbnbe
    3qnbk78lenyxmy0-21x31f58ehp323w92tqjqazv6 10.5.21.30:2377"
    

    docker-swarm-node-add

    运行docker node ls查看集群中的节点:

    docker-machine ssh myvm1 "docker node ls"
    

    docker-swarm-nodels

    让你的shell直接和集群主机对话

    进行这个配置之后,就可以直接连接到集群主机了,以前你必须通过ssh先连接到主机执行命令,进行环境配置之后,你就可以直接使用类似docker-machine ls的命令了

    Mac,Linux配置

    # 1. 运行 docker-machine env myvm1
    $ docker-machine env myvm1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.100:2376"
    export DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"
    export DOCKER_MACHINE_NAME="myvm1"
    # Run this command to configure your shell:
    # eval $(docker-machine env myvm1)
    
    # 2. 运行上一个命令结果的最后一句
    eval $(docker-machine env myvm1)
    
    # 3. 使用docker-machine查看结果
    $ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.06.2-ce   
    myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.06.2-ce  
    

    Windows 10配置

    > docker-machine env myvm1
    docker: 'env' is not a docker command.
    See 'docker --help'
    PS C:WINDOWSsystem32> docker-machine env myvm1
    $Env:DOCKER_TLS_VERIFY = "1"
    $Env:DOCKER_HOST = "tcp://10.5.21.30:2376"
    $Env:DOCKER_CERT_PATH = "C:Usershuyh.dockermachinemachinesmyvm1"
    $Env:DOCKER_MACHINE_NAME = "myvm1"
    $Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"
    # Run this command to configure your shell:
    # & "C:Program FilesDockerDockerResourcesindocker-machine.exe" env myvm1 | Invoke-Expression
    
    > & "C:Program FilesDockerDockerResourcesindocker-machine.exe" env myvm1 | Invoke-Expression
    
    > docker-machine ls
    NAME    ACTIVE   DRIVER   STATE     URL                     SWARM   DOCKER        ERRORS
    myvm1   *        hyperv   Running   tcp://10.5.21.30:2376           v18.02.0-ce
    myvm2   -        hyperv   Running   tcp://10.5.21.31:2376           v18.02.0-ce
    

    docker-machine-env

    在集群主机上部署应用程序

    Docker Compose里面讲到的一样,现在你可以使用下面的命令在集群上部署你的应用了

    docker stack deploy -c docker-compose.yml getstartedlab
    

    查看集群中应用的运行情况

    docker stack ps getstartedlab
    

    docker-swarm-deploy

    在浏览器中运行http://10.5.21.30来查看集群的负载情况

    docker-swarm-hostname

    如果你想增加实例数,只需要在docker-compose.yml中修改replicas的数量,然后直接运行docker stack deploy -c docker-compose.yml getstartedlab即可,不需要摧毁stack和容器。

    关闭应用和swarm

    # Take the app down with docker stack rm:
    docker stack rm getstartedlab
    
    # Take down the swarm.
    docker-machine ssh myvm2 "docker swarm leave"
    docker-machine ssh myvm1 "docker swarm leave --force"
    

    离开集群主机shell

    eval $(docker-machine env -u)
    

    重启Docker Machine

    > $ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL   SWARM   DOCKER    ERRORS
    myvm1   -        virtualbox   Stopped                 Unknown
    myvm2   -        virtualbox   Stopped                 Unknown
    
    > $ docker-machine start myvm1
    Starting "myvm1"...
    (myvm1) Check network to re-create if needed...
    (myvm1) Waiting for an IP...
    Machine "myvm1" was started.
    Waiting for SSH to be available...
    Detecting the provisioner...
    Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
    
    > $ docker-machine start myvm2
    Starting "myvm2"...
    (myvm2) Check network to re-create if needed...
    (myvm2) Waiting for an IP...
    Machine "myvm2" was started.
    Waiting for SSH to be available...
    Detecting the provisioner...
    Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
    

    GUI图形界面管理

    使用visualizer或者portainer镜像来启动GUI图形界面服务,这里使用portainer

    1. 更改docker-compose.yml文件
    version: "3"
    services:
      web:
        image: rynxiao/get-started:service
        deploy:
          replicas: 5
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
          restart_policy:
            condition: on-failure
        ports:
          - "80:80"
        networks:
          - webnet
      portainer:
        image: portainer/portainer
        ports:
          - "9000:9000"
        volumes: 
          - "//var/run/docker.sock:/var/run/docker.sock" 
        deploy:
          replicas: 1
          placement:
            constraints: [node.role == manager]
    networks:
      webnet:
    
    1. 重启服务:
    docker stack deploy -c docker-compose.yml getstartedlab
    
    1. 在浏览器中输入http://10.5.21.30:9000

    docker-gui-portainer

    参考链接

  • 相关阅读:
    iOS:不同属性声明方式的解析
    iOS:图像和点击事件
    iOS:NAV+TABLE结合
    iOS:实现表格填充和选择操作
    iOS: 填充数据表格
    iOS:导航栏的工具条和导航条
    iOS:使用导航栏
    hello,world不使用ARC
    iOS代码实现:创建按钮,绑定按钮事件,读取控件值
    iOS版 hello,world版本2
  • 原文地址:https://www.cnblogs.com/rynxiao/p/8436032.html
Copyright © 2011-2022 走看看