前書き

Docker Machineは、パーソナルコンピューターから複数のDockerホストをリモートで簡単にプロビジョニングおよび管理できるツールです。 そのようなサーバーは一般にDockerizedホストと呼ばれ、当然のことながらDockerコンテナーを実行するために使用できます。

Docker Machineはローカルシステムまたはリモートシステムにインストールできますが、最も一般的なアプローチは、ローカルコンピューター(ネイティブインストールまたは仮想マシン)にインストールし、それを使用してDockerizedリモートサーバーをプロビジョニングすることです。

Docker Machineは、ほとんどのLinuxディストリビューションとMac OS XおよびWindowsにインストールできますが、このチュートリアルでは、CentOS 7を実行しているローカルマシンにインストールし、Dockerized DigitalOcean Dropletsのプロビジョニングに使用します。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • DockerがインストールされたCentOS 7を実行しているローカルマシン。 (手順については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-centos-7 [CentOS 7でDockerをインストールおよび使用する方法]を参照してください)

  • DigitalOcean APIトークン。 お持ちでない場合は、https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2 [このガイド]を使用して生成してください。 トークンを生成するときは、読み取り/書き込みスコープがあることを確認してください。 これがデフォルトであるため、生成中にオプションを変更しない場合、読み取り/書き込み機能があります。 また、コマンドラインで使いやすくするために、その記事で指定されているように、変数にトークンを割り当ててください。

手順1-ローカルコンピューターにDockerマシンをインストールする

このステップでは、CentOS 7を実行しているローカルコンピューターにDocker Machineをインストールするプロセスを実行します。

バイナリをダウンロードしてインストールするには、次を入力します。

wget https://github.com/docker/machine/releases/download/v/docker-machine-$(uname -s)-$(uname -m)

ファイルの名前は `+ docker-machine-Linux-x86_64 `でなければなりません。 作業しやすくするために、名前を「 docker-machine」に変更します。

mv docker-machine-Linux-x86_64 docker-machine

実行可能にします。

chmod +x docker-machine

システムコマンドとして利用できるように、それを `+ usr / local / bin +`ディレクトリに移動またはコピーします。

sudo mv docker-machine /usr/local/bin

バージョンを確認すると、バージョンが正しくインストールされていることがわかります。

docker-machine version

出力は次のようになります

Outputdocker-machine version , build 89b8332

ステップ2-追加のDocker Machineスクリプトのインストール

Docker Machine GitHubリポジトリには、 `+ docker `および ` docker-machine +`コマンドの使用を容易にするために設計された3つのbashスクリプトがあります。 コマンド補完とbashプロンプトのカスタマイズを提供します。

この手順では、ローカルマシンに3つのスクリプトをインストールします。 それらはダウンロードされ、 `+ / etc / bash_completion.d +`ディレクトリにインストールされます。

最初のスクリプトにより、bashプロンプトでアクティブなマシンを確認できます。 これは、複数のDocker化されたマシンで作業し、それらを切り替えるときに便利です。 スクリプトは「+ docker-machine-prompt.bash」と呼ばれます。 ダウンロードするには、次を入力します。

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash

上記のファイルのインストールを完了するには、 `+ .bashrc `ファイルの ` PS1 `変数にカスタム値を設定する必要があります。 そのため、 ` nano +`を使用して開きます(PS1はbashコマンドプロンプトの変更に使用される特別なシェル変数です)。

nano ~/.bashrc

そのファイルの最後に次の行をコピーして貼り付けます。

〜/ .bashrc

export PS1='[\[email protected]\h \W$(__docker_machine_ps1 " [%s]")]\$ '

`+〜/ .bashrc +`ファイルをこのように変更すると、マシンをアクティブにすると、その名前がシェルプロンプトに挿入されます。

ファイルを保存して閉じます。

2番目のスクリプトは「+ docker-machine-wrapper.bash 」と呼ばれます。 ` docker-machine`コマンドに` + user`サブコマンドを追加して、Dockerized Machineを簡単に切り替えられるようにします。 ダウンロードするには、次を入力します

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash

3番目のスクリプトは「+ docker-machine.bash」と呼ばれます。 `+ docker-machine`コマンドにbash補完を追加します。 次を使用してダウンロードします。

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash

これまでに行った変更を適用するには、端末を閉じてから再度開きます。 SSH経由でマシンにログインしている場合は、セッションを終了して再度ログインします。 `+ docker `および ` docker-machine `コマンドのコマンド補完が機能するはずです。 動作しない場合は、 ` bash-completion +`パッケージがインストールされていない可能性があります。 その場合は、次を使用してインストールします。

sudo yum install bash-completion

それで解決するはずです。

手順3-Dockerマシンを使用したDockerizedホストのプロビジョニング

ローカルマシンでDockerとDocker Machineを実行しているので、Docker Machineの `+ docker-machine create +`コマンドを使用して、DigitalOceanアカウントにDockerizedドロップレットをプロビジョニングできるようになりました。 まだ行っていない場合は、次を使用してDigitalOcean APIトークンをbash変数に割り当てます。

export =

変数を永続的にするには、 `+〜/ .bashrc +`ファイルに変数を入れます。 この手順はオプションですが、値をターミナルセッション間で保持したい場合に必要です。

nano ~/.bashrc

これに似た行をどこかに追加します。

~/.bashrcexport =

現在のターミナルセッションで変数をアクティブにするには、次のように入力します。

source ~/.bashrc

`+ docker-machine create +`コマンドを正常に呼び出すには、(少なくとも)ドライバー、APIトークン(またはそれを評価する変数)、およびリモートホストの一意の名前を指定する必要があります。 最初のDockerizedホストを作成するには、次を入力します。

docker-machine create --driver digitalocean --digitalocean-access-token $

ホストの作成中の部分的な出力は次のとおりです。 この出力では、ホストの名前は `+ centos-docker`です:

Output
...

Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker i up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env centos-docker

`+ docker-machine`がリモートでアクセスできるように、新しいホスト用にSSHキーペアが作成されます。 ドロップレットは目的のオペレーティングシステムでプロビジョニングされ、Dockerがシステムにインストールされます。 コマンドが完了すると、Docker Dropletが稼働します。

コマンドラインから新しく作成されたホストを表示するには、次のように入力します。

docker-machine ls

出力は次のようになります。

OutputNAME                ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
centos-docker   -        digitalocean   Running   tcp://203.0.113.71:2376            v18.05.0-ce

手順4-Dockerizedホストの作成時にベースOSを指定する

このステップは、 `+-digitalocean-image +`フラグを使用して作成されるDockerizedホストのベースOSとバージョンを指定する方法を示します。

たとえば、CentOS 7を使用してDockerizedホストを作成するには、次のように入力します。

docker-machine create --driver digitalocean  --digitalocean-access-token $

サーバーでDebian 8を実行したい場合はどうしますか? 次のコマンドを入力します。

docker-machine create --driver digitalocean  --digitalocean-access-token $

デフォルトでは、Docker MachineでDockerizedホストを作成するときに使用される基本オペレーティングシステムは、_supposed_であり、最新バージョン(またはUbuntuの最新のLTSバージョン)になります。 ただし、この公開時点では、Ubuntu 18.04は最新のLTSエディションですが、 `+ docker-machine create `コマンドはベースオペレーティングシステムとしてUbuntu 16.04 LTSを使用しています。 したがって、Ubuntu 18.04を実行する必要がある場合は、 `-digitalocean-image `フラグを ` docker-machine create +`コマンドに渡すことで、目的のバージョンとともにUbuntuを指定する必要があります。

docker-machine create --driver digitalocean  --digitalocean-access-token $

選択できるのはベースオペレーティングシステムだけではありません。 ドロップレットのサイズを指定することもできます。 デフォルトでは、これは最小のドロップレットであり、1 GBのRAM、単一のCPU、および25 GBのSSDを備えています。

使用するドロップレットのサイズを見つけるには、https://developers.digitalocean.com/documentation/v2/#sizes/ [DigitalOcean API documentation]で対応するスラッグを検索します。

たとえば、2 GBのRAM、2つのCPU、および60 GB SSDを備えたマシンをプロビジョニングするには、スラッグ `+ s-​​2vcpu-2gb +`を使用します。

docker-machine create --driver digitalocean  --digitalocean-access-token $

DigitalOceanドライバーを使用したDockerマシンの作成に固有のすべてのフラグを表示するには、次のように入力します。

docker-machine create --driver digitalocean -h

ステップ5-他のDockerマシンコマンドの実行

`+ create `サブコマンドを使用してDockerizedホストをプロビジョニングする方法を見てきました。 また、 ` ls `サブコマンドを使用してDocker Machineで使用可能なホストを一覧表示する方法も確認しました。 このステップでは、他のいくつかの ` docker-machine n`サブコマンドについてさらに学習します。

Docker化されたホストに関する詳細情報を取得するには、次のように `+ inspect +`サブコマンドを使用します。

docker-machine inspect

出力には次のような行が含まれている必要があります。 * Image *行は、使用されているLinuxディストリビューションのバージョンを示しています。

Output{
   "ConfigVersion": 3,
   "Driver": {
       "IPAddress": "203.0.113.71",
       "MachineName": "centos-docker",
       "SSHUser": "root",
       "SSHPort": 22,
       ...
       "Image": "",
       "Size": "",
       ...
   },

---

ホストの接続構成を印刷するには、次のように入力します。

docker-machine config

出力は次のようになります。

Output--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://:2376

`+ docker-machine config +`コマンドの出力の最後の行にはホストのIPアドレスが表示されますが、次のように入力してその情報を取得することもできます。

docker-machine ip

リモートホストの電源を切る必要がある場合、 `+ docker-machine`を使用して停止できます:

docker-machine stop

停止していることを確認します。

docker-machine ls

ホストのステータスが変更されました:

OuputNAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker                  digitalocean

再度開始するには:

docker-machine start

開始されたことを確認します。

docker-machine ls

ホストに対して + STATE s`が + Running`に設定されていることがわかります。

OuputNAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

centos-docker         -        digitalocean       tcp://203.0.113.71:2376            v18.05.0-ce

最後に、ホストを削除する場合:

docker-machine rm

手順6-SSH経由でDockerizedホストでコマンドを実行する

この時点で、ホストに関する情報を取得していますが、それ以上のことができます。 たとえば、ローカルシステムから `+ docker-machine `の ` ssh `サブコマンドを使用して、DockerホストでネイティブLinuxコマンドを実行できます。 このセクションでは、「 docker-machine」を介して「+ ssh」コマンドを実行する方法と、Docker化されたホストへのSSHセッションを開く方法について説明します。

オペレーティングシステムとしてCentOSを使用してホストをプロビジョニングした場合、ローカルシステムから次のコマンドを実行して、Dockerホスト上のパッケージを更新します。

docker-machine ssh  yum update

リモートDockerホストが使用しているカーネルが不明ですか? 次を入力します。

docker-machine ssh  uname -r

`+ ssh +`サブコマンドを使用してリモートDockerホストでコマンドを実行する以外に、Docker化されたホスト自体にログインすることもできます。 入力するのは簡単です。

docker-machine ssh

コマンドプロンプトは、リモートホストにログインしているという事実を反映するように変更されます。

リモートホストを終了するには、次のように入力します。

exit

ステップ7-Dockerizedホストのアクティベーション

Dockerホストをアクティブ化すると、ローカルDockerクライアントがそのシステムに接続され、リモートシステムで通常の `+ docker +`コマンドを実行できるようになります。 Dockerホストをアクティブにするには、次のコマンドを入力します。

eval $(docker-machine env )

または、次のコマンドを使用してアクティブ化できます。

docker-machine use

上記のコマンドのいずれかを入力すると、bashプロンプトが変わり、DockerクライアントがリモートDockerホストを指していることを示す必要があります。 この形式を取ります。 ホストの名前はプロンプトの最後に表示されます。

@:~

これで、このコマンドプロンプトで入力した `+ docker`コマンドはすべてリモートホスト上で実行されます。

`+ docker-machine ls +`コマンドが実行される端末でホストがアクティブな場合、* ACTIVE *列の下のアスタリスクはそれがアクティブなものであることを示します。

Output NAME         ACTIVE            DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker           digitalocean   Running    tcp://203.0.113.71:2376            v18.05.0-ce

リモートDockerホストを終了するには、次を入力します。

docker-machine use -u

ローカルシステムのプロンプトに戻ります。

次に、リモートマシンでコンテナを作成します。

ステップ8-リモートDockerizedホストでのDockerコンテナーの作成

これまで、DigitalOceanアカウントにDockerized Dropletをプロビジョニングし、それをアクティブにしました。つまり、Dockerクライアントはそれを指し示しています。 次の論理ステップは、その上でコンテナーをスピンアップすることです。 例として、公式のNginxコンテナを実行してみましょう。

`+ docker-machine use +`を使用してリモートマシンを選択します。

docker-machine use

このコマンドを実行して、そのマシンでNginxコンテナーを実行します。

docker run -d -p 8080:80 --name httpserver nginx

このコマンドでは、デフォルトのNginxページにどこからでもアクセスできるように、Nginxコンテナーのポート「80」をDockerizedホストのポート「8080」にマッピングしています。

コマンドが正常に実行された場合、Webブラウザーで `+ http://:8080 +`を指定することで、デフォルトのNginxページにアクセスできます。

Dockerホストがまだアクティブ化されている間(プロンプトで名前が表示されます)、そのホスト上のイメージを一覧表示できます。

docker images

出力には、使用したばかりのNginxイメージと、以前にダウンロードした他のイメージが含まれている必要があります。

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae513a47849c        3 weeks ago         109MB

ホスト上のアクティブまたは実行中のコンテナを一覧表示することもできます。

docker ps

このステップで実行したNginxコンテナーが唯一のアクティブなコンテナーである場合、出力は次のようになります。

OutputCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4284f9d25548        nginx               "nginx -g 'daemon of…"   20 minutes ago      Up 20 minutes       0.0.0.0:8080->80/tcp   httpserver

リモートホストのプロンプトを終了するには、「+ exit +」と入力します。 これにより、ターミナルも閉じられます。

exit

手順9-クラッシュレポートの無効化(オプション)

デフォルトでは、Docker Machineを使用したDockerizedホストのプロビジョニングが失敗するか、Docker Machineがクラッシュするたびに、BugsnagのDockerアカウントに診断情報が自動的に送信されます。 これに不安がある場合は、インストール済みの `+ .docker / machine `ディレクトリの下に ` no-error-report +`という空のファイルを作成して、レポートを無効にすることができます。

それを実現するには、単に次を入力します。

touch ~/.docker/machine/no-error-report

プロビジョニングが失敗した場合、またはDocker Machineがクラッシュした場合は、エラーメッセージのファイルを確認してください。

結論

これは、Docker Machineをインストールして使用し、1つのローカルシステムから複数のDocker Dropletをリモートでプロビジョニングする方法の概要です。 これで、DigitalOceanアカウントで必要な数のDockerizedホストを迅速にプロビジョニングできるようになります。

Docker Machinesの詳細については、https://docs.docker.com/machine/overview/ [公式ドキュメントページ]をご覧ください。 このチュートリアルでダウンロードした3つのbashスクリプトは、https://github.com/docker/machine/tree/master/contrib/completion/bash [このGitHubページ]でホストされています。