Docker入門シリーズ(4):複数のマシンにまたがるサービスを提供
8387 ワード
Docker入門シリーズ(四)
dockerをインストールします.バージョンは最低1.13 です. Docker Componentを準備し、Docker for MacおよびDocker for Windowsにcomposeがプリインストールされています.linuxシステムは自分でインストールする必要があります.公式インストールチュートリアルです. dockerインストール起動 については、最初のdockerアプリケーション の構築を理解する.前節で作成したfriendlyhelloがregistry にパブリッシュされていることを確認します. friendlyhelloがpullされ、 が正常に使用できることを確認します.複製第3部の
第3節では、第2節で書かれたアプリケーションを使用し、オンラインでの実行方法を定義し、5つのインスタンスを起動しました.
このセクションでは、このアプリケーションをマルチマシンクラスタに配備し、swarmモード、マルチマシン、マルチコンテナのアプリケーションに本格的に移行します.
Swamって何?Swamはdockerを実行するマシンのセットであり、クラスタに結合されています.Swarmクラスタを起動すると、dockerコマンドはSwarm managerを介してクラスタ全体で実行されます.Swarmクラスタのマシンは、物理マシンであっても仮想マシンであってもよく、Swarmクラスタに参加するとnodesと呼ばれる.
Swarm managersは2つの異なる方法でcontainerを実行します:第1のemptiest node、できるだけ少ない機械を使って容器を配置します;第2のglobalでは、各マシンでコンテナのインスタンスが実行されることを確認します.
Swarm managersはクラスタのコア制御ノードであり、コマンドを実行し、新しいマシンにクラスタへの参加を許可する.Workerノードは、リソースの提供のみを担当します.
これまで、docker容器を単機で使用することを学びました.dockerは簡単にswarm modeに切り替えることができ、切り替えるコマンドは
VMを使用してクラスタを作成し、Macオペレーティングシステムを使用して、Macでswarmクラスタを作成する方法を説明します.
まず、仮想マシンをインストールし、MacでOracle VirtualBoxをダウンロードする必要があります.
docker-machine create –driver virtualbox myvm1 docker-machine create –driver virtualbox myvm2
$ 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に設定し、クラスタにノードを追加します.
workerノードの追加
2377 vs 2376
注意
以上の出力情報を見たら、おめでとうございます.起動に成功しました.
この最も複雑な部分が学習されたら、次に第3節の操作を繰り返し、サービスをクラスタに配置します.覚えておいてください.dockerコマンドはswarm manager、すなわちmyvm 1のみ実行できます.swarm managerに接続するたびに
実行
実行
myvm 1がactiveであることがわかります.
次に、swarm managerによってクラスタにサービスを配置し、
サービスの開始状況を確認
サービスを停止するコマンド
docker stack rm getstartedlab
swarm managerの停止
docker swarm leave –force
Ok、あなたはすでに生産環境でswarmを操作してサービスのオンライン、拡張、オフラインの全過程を行いました.
ホストのshell環境のクリーンアップ
準備作業
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)