Docker入門シリーズ(4):複数のマシンにまたがるサービスを提供


Docker入門シリーズ(四)

準備作業

  • dockerをインストールします.バージョンは最低1.13
  • です.
  • Docker Componentを準備し、Docker for MacおよびDocker for Windowsにcomposeがプリインストールされています.linuxシステムは自分でインストールする必要があります.公式インストールチュートリアルです.
  • dockerインストール起動
  • について
  • は、最初のdockerアプリケーション
  • の構築を理解する.
  • 前節で作成したfriendlyhelloがregistry
  • にパブリッシュされていることを確認します.
  • friendlyhelloがpullされ、
  • が正常に使用できることを確認します.
  • 複製第3部のdocker-compose.yml
  • 紹介する


    第3節では、第2節で書かれたアプリケーションを使用し、オンラインでの実行方法を定義し、5つのインスタンスを起動しました.
    このセクションでは、このアプリケーションをマルチマシンクラスタに配備し、swarmモード、マルチマシン、マルチコンテナのアプリケーションに本格的に移行します.

    Swarm clustersの理解


    Swamって何?Swamはdockerを実行するマシンのセットであり、クラスタに結合されています.Swarmクラスタを起動すると、dockerコマンドはSwarm managerを介してクラスタ全体で実行されます.Swarmクラスタのマシンは、物理マシンであっても仮想マシンであってもよく、Swarmクラスタに参加するとnodesと呼ばれる.
    Swarm managersは2つの異なる方法でcontainerを実行します:第1のemptiest node、できるだけ少ない機械を使って容器を配置します;第2のglobalでは、各マシンでコンテナのインスタンスが実行されることを確認します.docker-compose.ymlで動作するモードを指定できます.
    Swarm managersはクラスタのコア制御ノードであり、コマンドを実行し、新しいマシンにクラスタへの参加を許可する.Workerノードは、リソースの提供のみを担当します.
    これまで、docker容器を単機で使用することを学びました.dockerは簡単にswarm modeに切り替えることができ、切り替えるコマンドはdocker swarm initで、いったんswarm modeに切り替えると、現在のマシンキャラクタはSwarm managersになります.

    あなたのswarmクラスタを設定します


    clusterの作成


    VMを使用してクラスタを作成し、Macオペレーティングシステムを使用して、Macでswarmクラスタを作成する方法を説明します.
    まず、仮想マシンをインストールし、MacでOracle VirtualBoxをダウンロードする必要があります.docker-machineを使用して複数の仮想マシンを作成
    docker-machine create –driver virtualbox myvm1 docker-machine create –driver virtualbox myvm2 docker-machine lsを使用して、すべての仮想マシンをリストします.
    $ docker-machine ls
    NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
    myvm1 - virtualbox Running tcp://192.168.99.100:2376 v17.09.0-ce
    myvm2 - virtualbox Running tcp://192.168.99.101:2376 v17.09.0-ce
    次に、swarmの初期化を開始し、myvm 1をmanagerに設定し、クラスタにノードを追加します.
    $ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2376"
    Swarm initialized: current node (gxhg37symzvlve65jgg9ya984) is now a manager.
    
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-07zo0vcw3uch6r47b3b8rpcqcqz00sa9679s3jil660cimyb72-8t8nfbynnphl2zw8str5efm47 192.168.99.100:2376
    
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

    workerノードの追加
    $ docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-07zo0vcw3uch6r47b3b8rpcqcqz00sa9679
    
    s3jil660cimyb72-8t8nfbynnphl2zw8str5efm47 192.168.99.100:2377"`

    2377 vs 2376
    注意docker swarm initおよびdocker swarm joinで実行されるポート番号は2377です.または、デフォルトのポートは指定されていません.docker-machine lsが返すポートは2376で、このポートはdocker deamonのポートです.swarm managerで実行docker node lsクラスタの動作を確認
    $ docker-machine ssh myvm1 "docker node ls"
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
    gxhg37symzvlve65jgg9ya984 *   myvm1               Ready               Active              Leader
    qcbxu2hop7nf13ktzxfg36ein     myvm2               Ready               Active           

    以上の出力情報を見たら、おめでとうございます.起動に成功しました.docker swarm leaveを使用してswarmクラスタをリリース
    $ docker-machine ssh myvm2 "docker swarm leave"
    Node left the swarm.

    サービスをswarm clusterに配備


    この最も複雑な部分が学習されたら、次に第3節の操作を繰り返し、サービスをクラスタに配置します.覚えておいてください.dockerコマンドはswarm manager、すなわちmyvm 1のみ実行できます.swarm managerに接続するたびにdocker-machine sshを実行するのは面倒で、私たちは別の代替案を使用しています.docker-machine env を使用して、現在のshellが仮想マシンに接続されているDocker daemonを構成します.
    $ docker-machine env myvm1
    export DOCKER_TLS_VERIFY="1"
    export DOCKER_HOST="tcp://192.168.99.100:2376"
    export DOCKER_CERT_PATH="/Users/zhangbing/.docker/machine/machines/myvm1"
    export DOCKER_MACHINE_NAME="myvm1"
    # Run this command to configure your shell: 
    # eval $(docker-machine env myvm1)

    実行eval $(docker-machine env myvm1)現在のshell接続myvm 1の構成
    eval $(docker-machine env myvm1)

    実行docker-machine ls myvm 1が有効であることを確認します.
    $ docker-machine ls
    NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
    myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v17.09.0-ce   
    myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.09.0-ce   

    myvm 1がactiveであることがわかります.
    次に、swarm managerによってクラスタにサービスを配置し、
    $ docker stack deploy -c docker-compose.yml getstartedlab
    Creating network getstartedlab_webnet
    Creating service getstartedlab_web

    サービスの開始状況を確認
    $ docker stack ps getstartedlab
    ID                  NAME                  IMAGE               NODE                DESIRED STATE       CURRENT STATE              ERROR               PORTS
    j18ii2ij6daf        getstartedlab_web.1   username/repo:tag   myvm2               Running             Preparing 30 seconds ago                       
    oss51cyvy2n0        getstartedlab_web.2   username/repo:tag   myvm2               Running             Preparing 30 seconds ago                       
    rfvqjkhwxtif        getstartedlab_web.3   username/repo:tag   myvm1               Running             Preparing 30 seconds ago                       
    y0xapfhxopum        getstartedlab_web.4   username/repo:tag   myvm2               Running             Preparing 30 seconds ago                       
    8a4q8rq4jcxs        getstartedlab_web.5   username/repo:tag   myvm1               Running             Preparing 30 seconds ago     

    清掃作業


    サービスを停止するコマンド
    docker stack rm getstartedlab
    swarm managerの停止
    docker swarm leave –force
    Ok、あなたはすでに生産環境でswarmを操作してサービスのオンライン、拡張、オフラインの全過程を行いました.
    ホストのshell環境のクリーンアップ
    eval $(docker-machine env -u)