Ubuntu 18.04でDocker Machineを使用してリモートDockerホストをプロビジョニングおよび管理する方法

前書き

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

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

Docker MachineはほとんどのLinuxディストリビューションとmacOSおよびWindowsにインストールできますが、このチュートリアルでは、Ubuntu 18.04を実行しているローカルマシンにインストールし、Dockerized DigitalOcean Dropletsのプロビジョニングに使用します。 ローカルのUbuntu 18.04マシンがない場合は、Ubuntu 18.04サーバーでこれらの指示に従うことができます。

前提条件

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

  • DockerがインストールされたUbuntu 18.04を実行しているローカルマシンまたはサーバー。 手順については、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04 [Ubuntu 18.04にDockerをインストールして使用する方法]を参照してください。

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

ステップ1-Docker Machineのインストール

Docker Machineを使用するには、まずローカルにインストールする必要があります。 Ubuntuでは、これはGitHubの公式Dockerリポジトリから少数のスクリプトをダウンロードすることを意味します。

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

Docker Machineがインストールされます。 Docker Machineを使いやすくするために、いくつかの追加のヘルパーツールをインストールしましょう。

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

Docker Machine GitHubリポジトリには、 `+ docker `および ` docker-machine +`コマンドの操作を簡単にするためにインストールできる3つのBashスクリプトがあります。 これらのスクリプトをインストールすると、コマンドの完了とプロンプトのカスタマイズが提供されます。

この手順では、これら3つのスクリプトをDocker Machine GitHubリポジトリから直接ダウンロードして、ローカルマシンの `+ / etc / bash_completion.d +`ディレクトリにインストールします。

最初のスクリプトでは、プロンプトでアクティブなマシンを見ることができます。 これは、複数の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 `変数の値を変更する必要があります。 ` PS1 `変数は、Bashコマンドプロンプトを変更するために使用される特別なシェル変数です。 エディターで `〜/ .bashrc +`を開きます。

nano ~/.bashrc

そのファイル内には、 `+ PS1 +`で始まる3行があります。 これらは次のようになります。

〜/ .bashrc

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

...

PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '

...

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1"

次の例に示すように、各行に対して、末尾近くに `+ $(__ docker_machine_ps1" [%s] ")+`を挿入します。

〜/ .bashrc

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

...

PS1='${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ '

...

PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\[email protected]\h: \w\a\]$PS1"

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

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

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 +`コマンドのコマンドが完了します。

Docker Machineで新しいDockerホストを作成してテストしてみましょう。

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

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

export =

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

`+ nano +`でそのファイルを開きます:

nano ~/.bashrc

この行をファイルに追加します。

〜/ .bashrc

export =

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

source ~/.bashrc

`+ docker-machine create +`コマンドを正常に呼び出すには、使用する_driver_とマシン名を指定する必要があります。 ドライバーは、作成するインフラストラクチャのアダプターです。 クラウドインフラストラクチャプロバイダー用のドライバーと、さまざまな仮想化プラットフォーム用のドライバーがあります。

「+ digitalocean 」ドライバーを使用します。 選択したドライバーに応じて、マシンを作成するための追加オプションを提供する必要があります。 ` digitalocean +`ドライバーは、引数としてAPIトークン(またはそれを評価する変数)と、作成するマシンの名前を必要とします。

最初のマシンを作成するには、次のコマンドを入力して、 `+ docker-01 +`というDigitalOcean Dropletを作成します。

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

Docker Machineがドロップレットを作成すると、次の出力が表示されます。

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 is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env ubuntu1804-docker

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

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

docker-machine ls

出力は次のようになり、新しいDockerホストが実行されていることを示します。

OutputNAME        ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER        ERRORS
  -        digitalocean      tcp://209.97.155.178:2376           v18.06.1-ce

次に、マシンを作成するときにオペレーティングシステムを指定する方法を見てみましょう。

手順4-Dockerizedホストの作成時にベースOSとドロップレットオプションを指定する

デフォルトでは、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を指定する必要があります。

たとえば、Ubuntu 18.04を使用してマシンを作成するには、次のように入力します。

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

Ubuntuのバージョンに限定されません。 DigitalOceanでサポートされているオペレーティングシステムを使用してマシンを作成できます。 たとえば、Debian 8を使用してマシンを作成するには、次のように入力します。

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

CentOS 7をベースOSとして使用してDockerizedホストをプロビジョニングするには、次のように、イメージ名として「+ centos-7-0-x86 +」を指定します。

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

それでは、他のDocker Machineコマンドをいくつか見てみましょう。

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

`+ create `サブコマンドを使用してDocker化されたホストをプロビジョニングする方法と、 ` ls +`サブコマンドを使用してDocker Machineで使用可能なホストを一覧表示する方法を見てきました。 この手順では、さらに便利なサブコマンドをいくつか学習します。

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

docker-machine inspect

出力には、次の出力のような行が含まれます。 `+ Image `行は使用されているLinuxディストリビューションのバージョンを示し、 ` Size +`行はサイズスラッグを示します。

Output...
{
   "ConfigVersion": 3,
   "Driver": {
       "IPAddress": "203.0.113.71",
       "MachineName": "docker-01",
       "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
  -        digitalocean

もう一度起動するには、 `+ start +`サブコマンドを使用します。

docker-machine start

その後、ステータスを再度確認します。

docker-machine ls

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

OuputNAME                ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

          -        digitalocean      tcp://203.0.113.71:2376            v18.06.1-ce

次に、SSHを使用してリモートホストと対話する方法を見てみましょう。

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

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

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

docker-machine ssh  apt-get update

以下を使用して利用可能なアップデートを適用することもできます。

docker-machine ssh  apt-get upgrade

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

docker-machine ssh  uname -r

最後に、 `+ docker machine ssh +`コマンドでリモートホストにログインできます:

docker-machine ssh
  • root *ユーザーとしてログインすると、次のようなものが表示されます。

Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-131-generic x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

 Get cloud support with Ubuntu Advantage Cloud Guest:
   http://www.ubuntu.com/business/services/cloud

14 packages can be updated.
10 updates are security updates.

「+ exit +」と入力してログアウトし、ローカルマシンに戻ります。

次に、リモートホストでDockerのコマンドを送信します。

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

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

まず、Docker Machineを使用して、Ubuntu 18.04を使用して「+ docker-ubuntu」という新しいDockerホストを作成します。

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

Dockerホストをアクティブにするには、次のコマンドを入力します。

eval $(docker-machine env )

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

docker-machine use

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

@:~

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

`+ docker-machine ls +`を再度実行します:

docker-machine ls

「+ docker-01 」の「 ACTIVE +」列の下にアスタリスクが表示されます。

OutputNAME                ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
docker-01                   digitalocean   Running   tcp://203.0.113.71:2376             v18.06.1-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 : --name httpserver

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

コンテナーがビルドされると、Webブラウザーで `+ http://:8080 +`を指定することで、デフォルトのNginxページにアクセスできるようになります。

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

docker images

出力には、使用したばかりのNginxイメージが含まれています。

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
              latest              71c43202b8ac        3 hours ago         109MB

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

docker ps

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

OutputCONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS
PORTS                  NAMES
d3064c237372                       "nginx -g 'daemon of…"   About a minute ago   Up About a minute
0.0.0.0:8080->80/tcp   httpserver

リモートマシンでコンテナを作成する場合、Dockerクライアントはそれを指している必要があります。つまり、使用しているターミナルのアクティブマシンでなければなりません。 それ以外の場合は、ローカルマシンでコンテナを作成します。 繰り返しになりますが、コマンドプロンプトをガイドにしてください。

Docker Machineはリモートホストを作成および管理でき、それらを削除することもできます。

ステップ9 – Dockerホストの削除

Docker Machineを使用して、作成したDockerホストを削除できます。 `+ docker-machine rm `コマンドを使用して、作成した ` docker-01 +`ホストを削除します。

docker-machine rm

ドロップレットは、作成されたSSHキーとともに削除されます。 ホストを再度リストします。

docker-machine ls

今回は、出力に「+ docker-01 +」ホストが表示されません。 また、ホストを1つしか作成していない場合、出力はまったく表示されません。

コマンド `+ docker-machine use -u +`を実行して、ローカルDockerデーモンがローカルマシンを指すようにしてください。

ステップ10-クラッシュレポートの無効化(オプション)

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

ファイルを作成するには、次を入力します。

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

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

結論

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

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

Related