Docker Swarmは、Dockerホストのクラスターをデプロイできるようにするツールです。これはDockerが提供するネイティブのクラスタリングツールであり、スウォームクラスター内のすべてのノードに分散することで、アプリケーションに高可用性と高性能を提供します。
このチュートリアルでは、Ubuntu16.04を使用してSwarmクラスターを作成する方法を段階的に説明します。 2台のubuntuサーバーマシンを使用してスウォームクラスターを作成します。1台のサーバーノードをマネージャーとして、もう1台をワーカーとして使用します。次に、単純なNginxサービスをswarmクラスターにデプロイしようとします。
- 2つ以上-Ubuntu16.04サーバー
- マネージャー132.92.41.4
- worker01 132.92.41.5
- root権限
何をしますか?
- ホストの構成
- Docker-ceをインストールします
- DockerSwarmの初期化
- クラスターへの最初のサービスの展開
swarmクラスターのパッケージをインストールする前に、両方のサーバーでhostsファイルを構成します。
以下のコマンドをすべてのサーバー、「manager」および「worker01」で実行します。
vimエディタを使用して「/etc/hosts」ファイルを編集します。
vim /etc/hosts
次の構成を行の最後に追加します。
132.92.41.4 manager
132.92.41.5 worker01
保存して終了します。
ここで、IPアドレスを使用する代わりに「hostname」を使用してすべてのノードにpingを実行します。
ping -c 3 manager
ping -c 3 worker01
そして、それがすべてのホストで機能していることを確認してください。
スウォームクラスターを作成するには、すべてのサーバーノードにdockerをインストールする必要があります。このステップでは、サーバーマネージャーとworker01の両方にDocker-ceCommunityEditionをインストールします。
以下のaptコマンドを使用してDocker-ceの依存関係をインストールします。
sudo apt install apt-transport-https software-properties-common ca-certificates -y
次に、DockerキーとDocker-ceリポジトリをサーバーに追加します。
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" > /etc/apt/sources.list.d/docker-ce.list
リポジトリを更新し、以下のaptinstallコマンドを使用してDocker-ceパッケージをインストールします。
sudo apt update
sudo apt install docker-ce -y
インストールが完了したら、Dockerサービスを開始し、システムの起動時に毎回起動できるようにします。
systemctl start docker
systemctl enable docker
Docker-ceがサーバーノードにインストールされました。
次に、通常のユーザーまたは非rootユーザーとして実行するようにdockerを構成します。
「mohammad」という名前の新しいユーザーを作成し、「docker」グループに追加します。
useradd -m -s /bin/bash mohammad
sudo usermod -aG docker mohammad
次に、「mohammad」ユーザーにログインし、以下のようにdockerhello-worldコマンドを実行します。
su - mohammad
docker run hello-world
そして、以下に示すように、dockerからhelloworldを取得します。
このステップでは、ノードのSwarmClusterを作成します。また、スウォームクラスターノードを作成するには、「manager」ノードでスウォームモードを初期化してから、「worker01」ノードをクラスターに参加させる必要があります。
以下の「manager」ノードでdockerコマンドを実行して、DockerSwarmモードを初期化します。
docker swarm init --advertise-addr 132.92.41.4
そして、以下のような結果が得られます。
「join-token」が「manager」ノードによって生成されたことがわかります。
次に、「worker01」ノードをクラスター「manager」に追加する必要があります。そのためには、クラスターの「マネージャー」ノードから「参加トークン」が必要なので、必ずメモに書き込んでください。
'worker01'ノードでdockerswarmjoinコマンドを実行します。
docker swarm join --token SWMTKN-1-5p5ujrr67rl2rlmyvrj56fksblbcrtaeirf7fj5r4snid2vn6y-918gbqr02m64xct43i2ssi4qs 132.92.41.4:2377
これで、次のような結果が得られます。
'worker01'ノードがクラスターに参加しました。
'manager'ノードで次のコマンドを実行して確認してください。
docker node ls
これで、「worker01」ノードが群れクラスターに参加していることがわかります。
スウォームクラスターが作成されました。
このステップでは、最初のサービスを作成してスウォームクラスターにデプロイします。デフォルトのhttpポート80で実行される新しいサービスNginxWebサーバーを作成し、それをホストサーバーのポート8080に公開してから、swarmクラスター内でnginxサービスを複製しようとします。
'my-web'という名前の新しいNginxサービスを作成し、コンテナーのHTTPポートをホストのポート8080に公開します。
docker service create --name my-web --publish 8080:80 nginx:1.13-alpine
作成したら、以下のdockerserviceコマンドを使用して確認してください。
docker service ls
そして、以下のような結果が得られます。
Nginxサービスは、「my-web」という名前のサービスとして作成され、swarmクラスターにデプロイされています。これは、Nginx Alpine Linuxに基づいており、コンテナーサービスのHTTPポートをホストのポート「8080」に公開します。レプリカは1つだけです。
次に、「my-web」サービスのレプリカを作成します。 「my-web」サービスのレプリカを2つ作成するので、「manager」ノードと「worker01」ノードでサービスにアクセスできます。
'my-web'サービスを複製するには、次のコマンドを実行します。
docker service scale my-web=2
完了したら、dockerserviceコマンドを使用してもう一度確認します。
docker service ls
そして今、サーバーには2つのレプリケートがあります。
Webブラウザーを開き、ポート8080でマネージャーノードのIPアドレスを入力します。
http:// manager:8080 /
そして、Nginxのデフォルトページが表示されます。
以下は「worker01」ノードの結果です。
http:// worker01:8080 /
Swarm Clusterが作成され、NginxサービスがSwarmClusterにデプロイされました。