Ubuntu18.04でDockerマシンを使用してリモートDockerホストをプロビジョニングおよび管理する方法
序章
Docker Machine は、パーソナルコンピューターからリモートで複数のDockerホストを簡単にプロビジョニングおよび管理できるようにするツールです。 このようなサーバーは一般にDocker化されたホストと呼ばれ、Dockerコンテナーを実行するために使用されます。
Docker Machineはローカルシステムまたはリモートシステムにインストールできますが、最も一般的なアプローチは、ローカルコンピューター(ネイティブインストールまたは仮想マシン)にインストールし、Docker化されたリモートサーバーをプロビジョニングするために使用することです。
Docker Machineは、macOSやWindowsだけでなく、ほとんどのLinuxディストリビューションにもインストールできますが、このチュートリアルでは、Ubuntu 18.04を実行しているローカルマシンにインストールし、Docker化されたDigitalOceanドロップレットをプロビジョニングするために使用します。 ローカルのUbuntu18.04マシンがない場合は、Ubuntu18.04サーバーでこれらの手順に従うことができます。
前提条件
このチュートリアルに従うには、次のものが必要です。
- DockerがインストールされたUbuntu18.04を実行しているローカルマシンまたはサーバー。 手順については、 Ubuntu18.04にDockerをインストールして使用する方法を参照してください。
- DigitalOceanAPIトークン。 お持ちでない場合は、このガイドを使用して生成してください。 トークンを生成するときは、そのトークンに読み取り/書き込みスコープがあることを確認してください。 これがデフォルトであるため、生成中にオプションを変更しない場合は、読み取り/書き込み機能があります。
ステップ1—DockerMachineをインストールする
Docker Machineを使用するには、最初にローカルにインストールする必要があります。 Ubuntuでは、これはGitHubの公式Dockerリポジトリから少数のスクリプトをダウンロードすることを意味します。
Docker Machineバイナリをダウンロードしてインストールするには、次のように入力します。
- wget https://github.com/docker/machine/releases/download/v0.15.0/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 0.15.0, build b48dc28d
DockerMachineがインストールされています。 Docker Machineの操作を簡単にするために、いくつかの追加のヘルパーツールをインストールしましょう。
ステップ2—追加のDockerマシンスクリプトをインストールする
Docker Machine GitHubリポジトリには3つのBashスクリプトがあり、インストールして docker
と docker-machine
コマンドが簡単になります。 これらのスクリプトをインストールすると、コマンド補完とプロンプトのカスタマイズが可能になります。
このステップでは、これら3つのスクリプトをにインストールします。 /etc/bash_completion.d
Docker Machine GitHubリポジトリから直接ダウンロードして、ローカルマシンのディレクトリを作成します。
注:インターネットからシステム全体の場所にスクリプトをダウンロードしてインストールする前に、ブラウザでソースURLを表示して、まずスクリプトの内容を確認する必要があります。
最初のスクリプトを使用すると、プロンプトでアクティブなマシンを確認できます。 これは、複数の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
このファイルのインストールを完了するには、の値を変更する必要があります PS1
あなたの変数 .bashrc
ファイル。 The PS1
variableは、Bashコマンドプロンプトを変更するために使用される特別なシェル変数です。 開ける ~/.bashrc
エディターで:
- nano ~/.bashrc
そのファイル内には、で始まる3行があります PS1
. それらは次のようになります。
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
...
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
...
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
行ごとに、 $(__docker_machine_ps1 " [%s]")
次の例に示すように、終わり近くにあります。
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ '
...
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ '
...
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"
ファイルを保存して閉じます。
2番目のスクリプトは docker-machine-wrapper.bash
. それは追加します use
のサブコマンド 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
. のbash補完を追加します docker-machine
コマンド。 以下を使用してダウンロードします。
- 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マシンを使用してDocker化されたホストをプロビジョニングする
ローカルマシンでDockerとDockerMachineを実行しているので、DockerMachineのを使用してDigitalOceanアカウントにDocker化されたドロップレットをプロビジョニングできます。 docker-machine create
指図。 まだ行っていない場合は、DigitalOceanAPIトークンを環境変数に割り当てます。
- export DOTOKEN=your-api-token
注:このチュートリアルでは、DOAPIトークンのbash変数としてDOTOKENを使用します。 変数名はDOTOKENである必要はなく、すべて大文字である必要はありません。
変数を永続的にするには、それをあなたの ~/.bashrc
ファイル。 この手順はオプションですが、シェルセッション間で値を保持する場合に必要です。
そのファイルを nano
:
- nano ~/.bashrc
次の行をファイルに追加します。
export DOTOKEN=your-api-token
現在のターミナルセッションで変数をアクティブ化するには、次のように入力します。
- source ~/.bashrc
を呼び出すには docker-machine create
コマンドを正常に実行するには、使用するドライバーとマシン名を指定する必要があります。 ドライバーは、作成するインフラストラクチャーのアダプターです。 クラウドインフラストラクチャプロバイダー用のドライバーと、さまざまな仮想化プラットフォーム用のドライバーがあります。
を使用します digitalocean
運転者。 選択したドライバーに応じて、マシンを作成するための追加オプションを提供する必要があります。 The digitalocean
ドライバーには、引数としてAPIトークン(またはそれに評価される変数)と、作成するマシンの名前が必要です。
最初のマシンを作成するには、このコマンドを入力して、と呼ばれるDigitalOceanドロップレットを作成します docker-01
:
- docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN docker-01
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キーペアを作成します。 ドロップレットはオペレーティングシステムでプロビジョニングされ、Dockerがインストールされます。 コマンドが完了すると、DockerDropletが起動して実行されます。
コマンドラインから新しく作成されたマシンを表示するには、次のように入力します。
- docker-machine ls
出力は次のようになり、新しいDockerホストが実行されていることを示します。
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker-01 - digitalocean Running tcp://209.97.155.178:2376 v18.06.1-ce
次に、マシンを作成するときにオペレーティングシステムを指定する方法を見てみましょう。
ステップ4—Docker化されたホストを作成するときにベースOSとドロップレットオプションを指定する
デフォルトでは、Docker MachineでDocker化されたホストを作成するときに使用される基本オペレーティングシステムは、最新のUbuntuLTSであると想定されています。 ただし、この発行時点では、 docker-machine create
Ubuntu 18.04は最新のLTSエディションですが、コマンドは引き続きUbuntu16.04LTSをベースオペレーティングシステムとして使用しています。 したがって、最近プロビジョニングされたマシンでUbuntu 18.04を実行する必要がある場合は、Ubuntuを目的のバージョンとともに指定する必要があります。 --digitalocean-image
にフラグを立てる docker-machine create
指図。
たとえば、Ubuntu 18.04を使用してマシンを作成するには、次のように入力します。
- docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN docker-ubuntu-1804
Ubuntuのバージョンに限定されません。 DigitalOceanでサポートされている任意のオペレーティングシステムを使用してマシンを作成できます。 たとえば、Debian 8を使用してマシンを作成するには、次のように入力します。
- docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN docker-debian
CentOS 7をベースOSとして使用してDocker化されたホストをプロビジョニングするには、次のように指定します。 centos-7-0-x86
画像名として、次のように:
- docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $DOTOKEN docker-centos7
基本オペレーティングシステムだけが選択肢ではありません。 ドロップレットのサイズを指定することもできます。 デフォルトでは、これは最小のドロップレットであり、1 GBのRAM、1つのCPU、および25GBのSSDを備えています。
DigitalOcean APIドキュメントで対応するスラッグを検索して、使用するドロップレットのサイズを見つけます。
たとえば、2 GBのRAM、2つのCPU、および60 GBのSSDを搭載したマシンをプロビジョニングするには、スラッグを使用します s-2vcpu-2gb
:
- docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN docker-03
DigitalOceanドライバーを使用したDockerマシンの作成に固有のすべてのフラグを表示するには、次のように入力します。
- docker-machine create --driver digitalocean -h
ヒント: DigitalOceanダッシュボードのドロップレットページを更新すると、を使用して作成した新しいマシンが表示されます。 docker-machine
指図。
それでは、他のDockerMachineコマンドのいくつかを見ていきましょう。
ステップ5—追加のDockerマシンコマンドを実行する
を使用してDocker化されたホストをプロビジョニングする方法を見てきました create
サブコマンド、およびDockerMachineで使用可能なホストを一覧表示する方法 ls
サブコマンド。 このステップでは、さらにいくつかの便利なサブコマンドを学習します。
Docker化されたホストに関する詳細情報を取得するには、 inspect
次のようなサブコマンド:
- docker-machine inspect docker-01
出力には、次の出力のような行が含まれます。 The Image
行は、使用されているLinuxディストリビューションのバージョンと Size
線はサイズスラッグを示します:
Output...
{
"ConfigVersion": 3,
"Driver": {
"IPAddress": "203.0.113.71",
"MachineName": "docker-01",
"SSHUser": "root",
"SSHPort": 22,
...
"Image": "ubuntu-16-04-x64",
"Size": "s-1vcpu-1gb",
...
},
---
ホストの接続構成を印刷するには、次のように入力します。
- docker-machine config docker-01
出力は次のようになります。
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://203.0.113.71:2376
の出力の最後の行 docker-machine config
コマンドはホストのIPアドレスを明らかにしますが、次のように入力してその情報を取得することもできます。
- docker-machine ip docker-01
リモートホストの電源を切る必要がある場合は、次を使用できます docker-machine
それを止めるには:
- docker-machine stop docker-01
停止していることを確認します。
- docker-machine ls
出力は、マシンのステータスが変更されたことを示しています。
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker-01 - digitalocean Stopped Unknown
再開するには、 start
サブコマンド:
- docker-machine start docker-01
次に、そのステータスをもう一度確認します。
- docker-machine ls
あなたはそれを見るでしょう STATE
これで設定されました Running
ホストの場合:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
docker-01 - digitalocean Running tcp://203.0.113.71:2376 v18.06.1-ce
次に、SSHを使用してリモートホストと対話する方法を見てみましょう。
ステップ6—SSH経由でDocker化されたホスト上でコマンドを実行する
この時点で、マシンに関する情報を取得していますが、それ以上のことができます。 たとえば、DockerホストでネイティブLinuxコマンドを実行するには、 ssh
のサブコマンド docker-machine
ローカルシステムから。 このセクションでは、実行方法について説明します ssh
経由のコマンド docker-machine
DockerizedホストへのSSHセッションを開く方法も同様です。
オペレーティングシステムとしてUbuntuを使用してマシンをプロビジョニングしたと仮定して、ローカルシステムから次のコマンドを実行して、Dockerホスト上のパッケージデータベースを更新します。
- docker-machine ssh docker-01 apt-get update
以下を使用して、利用可能な更新を適用することもできます。
- docker-machine ssh docker-01 apt-get upgrade
リモートDockerホストが使用しているカーネルがわかりませんか? 次のように入力します。
- docker-machine ssh docker-01 uname -r
最後に、リモートホストにログインできます。 docker machine ssh
指図:
docker-machine ssh docker-01
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—Docker化されたホストのアクティブ化
Dockerホストをアクティブ化すると、ローカルのDockerクライアントがそのシステムに接続され、通常の実行が可能になります。 docker
リモートシステム上のコマンド。
まず、Docker Machineを使用して、という新しいDockerホストを作成します docker-ubuntu
Ubuntu 18.04を使用する:
- docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN docker-ubuntu
Dockerホストをアクティブ化するには、次のコマンドを入力します。
- eval $(docker-machine env machine-name)
または、次のコマンドを使用してアクティブ化することもできます。
- docker-machine use machine-name
ヒント:複数のDockerホストを操作する場合、 docker-machine use
コマンドは、一方から他方に切り替える最も簡単な方法です。
これらのコマンドのいずれかを入力すると、プロンプトが変化して、DockerクライアントがリモートのDockerホストを指していることを示します。 この形になります。 ホストの名前は、プロンプトの最後に表示されます。
username@localmachine:~ [docker-01]$
今、 docker
このコマンドプロンプトで入力したコマンドは、そのリモートホストで実行されます。
実行する docker-machine ls
また:
- docker-machine ls
下にアスタリスクが表示されます ACTIVE
の列 docker-01
:
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—リモートのDocker化されたホストでのDockerコンテナの作成
これまでに、DigitalOceanアカウントにDockerized Dropletをプロビジョニングし、それをアクティブ化しました。つまり、Dockerクライアントがそれをポイントしています。 次の論理的なステップは、その上でコンテナを起動することです。 例として、公式のNginxコンテナを実行してみましょう。
使用する docker-machine use
リモートマシンを選択するには:
- docker-machine use docker-01
次に、このコマンドを実行して、そのマシンでNginxコンテナーを実行します。
- docker run -d -p 8080:80 --name httpserver nginx
このコマンドでは、ポートをマッピングしています 80
Nginxコンテナで移植する 8080
Dockerizedホストで、どこからでもデフォルトのNginxページにアクセスできるようにします。
コンテナが構築されると、Webブラウザで次の位置に移動することでデフォルトのNginxページにアクセスできるようになります。 http://docker_machine_ip:8080
.
Dockerホストがまだアクティブ化されている間(プロンプトにその名前が表示されているように)、そのホスト上のイメージを一覧表示できます。
- docker images
出力には、使用したNginxイメージが含まれます。
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 71c43202b8ac 3 hours ago 109MB
ホスト上でアクティブまたは実行中のコンテナを一覧表示することもできます。
- docker ps
この手順で実行したNginxコンテナーが唯一のアクティブなコンテナーである場合、出力は次のようになります。
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
d3064c237372 nginx "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 docker-01
ドロップレットは、そのために作成されたSSHキーとともに削除されます。 ホストを再度リストします。
- docker-machine ls
今回は、 docker-01
出力にリストされているホスト。 また、ホストを1つだけ作成した場合、出力はまったく表示されません。
必ずコマンドを実行してください docker-machine use -u
ローカルDockerデーモンをローカルマシンに戻すため。
手順10—クラッシュレポートを無効にする(オプション)
デフォルトでは、Docker Machineを使用してDocker化されたホストをプロビジョニングしようとして失敗した場合、またはDocker Machineがクラッシュした場合は常に、BugsnagのDockerアカウントに診断情報が送信されます。 これに慣れていない場合は、という空のファイルを作成してレポートを無効にすることができます no-error-report
ローカルコンピュータの .docker/machine
ディレクトリ。
ファイルを作成するには、次のように入力します。
- touch ~/.docker/machine/no-error-report
プロビジョニングが失敗した場合、またはDocker Machineがクラッシュした場合は、ファイルでエラーメッセージを確認してください。
結論
Docker Machineをインストールし、それを使用して、ローカルシステムからリモートでDigitalOceanに複数のDockerホストをプロビジョニングしました。 ここから、DigitalOceanアカウントに必要な数のDockerizedホストをプロビジョニングできるようになります。
Docker Machineの詳細については、公式ドキュメントページにアクセスしてください。 このチュートリアルでダウンロードされた3つのBashスクリプトは、このGitHubページでホストされています。