序章

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

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

DockerMachineはほとんどのLinuxディストリビューションとMacOSXおよびWindowsにインストールできますが、このチュートリアルでは、CentOS 7を実行しているローカルマシンにインストールし、Docker化されたDigitalOceanドロップレットをプロビジョニングするために使用します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • DockerがインストールされたCentOS7を実行しているローカルマシン。 (手順については、 CentOS 7 にDockerをインストールして使用する方法を参照してください)
  • DigitalOceanAPIトークン。 お持ちでない場合は、このガイドを使用して生成してください。 トークンを生成するときは、そのトークンに読み取り/書き込みスコープがあることを確認してください。 これがデフォルトであるため、生成中にオプションを変更しない場合は、読み取り/書き込み機能があります。 また、コマンドラインで使いやすくするために、その記事に記載されているように、必ずトークンを変数に割り当ててください。

ステップ1—ローカルコンピューターへのDockerマシンのインストール

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

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

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

ファイルの名前は次のようになります docker-machine-Linux-x86_64. 名前を変更します docker-machine 作業を容易にするために:

  1. mv docker-machine-Linux-x86_64 docker-machine

実行可能にする:

chmod +x docker-machine

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

sudo mv docker-machine /usr/local/bin

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

  1. docker-machine version

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

Output
docker-machine version 0.14.0, build 89b8332

ステップ2—追加のDockerマシンスクリプトをインストールする

Docker Machine GitHubリポジトリには3つのbashスクリプトがあり、 dockerdocker-machine コマンド。 これらは、コマンド補完とbashプロンプトのカスタマイズを提供します。

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

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

  1. 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 ファイル。 を使用して開きます nano (PS1は、bashコマンドプロンプトを変更するために使用される特別なシェル変数です):

  1. nano ~/.bashrc

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

〜/ .bashrc
export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '

あなたのこの変更で ~/.bashrc ファイル、マシンをアクティブ化すると、その名前がシェルプロンプトに挿入されます。

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

2番目のスクリプトは docker-machine-wrapper.bash. それは追加します use のサブコマンド docker-machine コマンドを使用すると、DockerizedMachinesを簡単に切り替えることができます。 ダウンロードするには、次のように入力します

  1. 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 コマンド。 以下を使用してダウンロードします。

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

これまでに行った変更を適用するには、ターミナルを閉じてから再度開きます。 SSH経由でマシンにログインしている場合は、セッションを終了して再度ログインします。 のコマンド補完 dockerdocker-machine これでコマンドが機能するはずです。 それが機能しない場合は、 bash-completion パッケージがインストールされていません。 その場合は、次を使用してインストールしてください。

  1. sudo yum install bash-completion

それはそれを修正する必要があります。

ステップ3—Dockerマシンを使用してDocker化されたホストをプロビジョニングする

ローカルマシンでDockerとDockerMachineを実行しているので、DockerMachineのを使用してDigitalOceanアカウントにDocker化されたドロップレットをプロビジョニングできます。 docker-machine create 指図。 まだ行っていない場合は、次を使用してDigitalOceanAPIトークンをbash変数に割り当てます。

  1. export shell-variable=your-api-token

注:このチュートリアルでは、DOAPIトークンのbash変数としてDOTOKENを使用します。 変数名はDOTOKENである必要はなく、すべて大文字である必要はありません。

変数を永続的にするには、それをあなたの ~/.bashrc ファイル。 この手順はオプションですが、ターミナルセッション間で値を維持する場合に必要です。

  1. nano ~/.bashrc

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

~/.bashrc
export DOTOKEN=your-api-token

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

  1. source ~/.bashrc

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

  1. docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name

ホストが作成されているときの部分的な出力は次のとおりです。 この出力では、ホストの名前は次のとおりです。 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

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

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

  1. docker-machine ls

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

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

ステップ4—Docker化されたホストを作成するときにベースOSを指定する

この手順では、で作成されるDockerizedHostのベースOSとバージョンを指定する方法を示します。 --digitalocean-image 国旗。

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

  1. docker-machine create --driver digitalocean --digitalocean-image centos-7-x64 --digitalocean-access-token $DOTOKEN machine-name

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

  1. docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name

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

  1. docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name

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

DigitalOcean APIドキュメントで対応するスラッグを検索して、使用するドロップレットのサイズを見つけます。

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

  1. docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name

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

  1. docker-machine create --driver digitalocean -h

ヒント: DigitalOceanダッシュボードのドロップレットページを更新すると、を使用して作成した新しいホストが表示されます。 docker-machine 指図。

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

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

Docker化されたホストに関する詳細情報を取得するには、 inspect 次のようなサブコマンド:

  1. docker-machine inspect machine-name

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

Output
{ "ConfigVersion": 3, "Driver": { "IPAddress": "203.0.113.71", "MachineName": "centos-docker", "SSHUser": "root", "SSHPort": 22, ... "Image": "centos-7-0-x64", "Size": "s-1vcpu-1gb", ... }, ---

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

  1. docker-machine config machine-name

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

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アドレスを明らかにしますが、次のように入力してその情報を取得することもできます。

  1. docker-machine ip machine-name

リモートホストの電源を切る必要がある場合は、次を使用できます docker-machine それを止めるには:

  1. docker-machine stop machine-name

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

  1. docker-machine ls

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

Ouput
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS centos-docker digitalocean Timeout

再開するには:

  1. docker-machine start machine-name

開始されていることを確認します。

  1. docker-machine ls

あなたはそれを見るでしょう STATE これで設定されました Running ホストの場合:

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

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

  1. docker-machine rm machine-name

ステップ6—SSH経由でDocker化されたホスト上でコマンドを実行する

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

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

  1. docker-machine ssh machine-name yum update

リモートDockerホストが使用しているカーネルがわかりませんか? 次のように入力します。

  1. docker-machine ssh machine-name uname -r

使用することに加えて ssh リモートDockerホストでコマンドを実行するサブコマンド。これを使用して、Docker化されたホスト自体にログインすることもできます。 入力するのと同じくらい簡単です。

  1. docker-machine ssh machine-name

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

root@machine-name#

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

exit

ステップ7—Docker化されたホストのアクティブ化

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

  1. eval $(docker-machine env machine-name)

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

  1. docker-machine use machine-name

ヒント複数のDockerホストを操作する場合、 docker-machine use コマンドは、一方から他方に切り替える最も簡単な方法です。

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

username@localmachine:~ [machine-name]$

今、 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 使用している端末で入力したコマンドは、リモートホストで実行されます。 ただし、通常のLinuxコマンドはすべてローカルコンピューターで実行されます。

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

docker-machine use -u

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

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

ステップ8—リモートのDocker化されたホストでのDockerコンテナの作成

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

使用する docker-machine use リモートマシンを選択するには:

  1. docker-machine use machine-name

次に、このコマンドを実行して、そのマシンで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イメージと、以前にダウンロードした他のイメージが含まれている必要があります。

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

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

  1. docker ps

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

Output
CONTAINER 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

ヒント:リモートホスト上にコンテナを作成する場合は、Dockerクライアントがそれを指している必要があります。つまり、現在のターミナルでアクティブなホストである必要があります。を使用します。 それ以外の場合は、ローカルマシンでコンテナを作成します。 コマンドプロンプトをガイドにします。

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

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

これを行うには、次のように入力します。

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

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

結論

これは、Docker Machineをインストールして使用し、1つのローカルシステムから複数のDockerドロップレットをリモートでプロビジョニングするための概要です。 これで、DigitalOceanアカウントに必要な数のDocker化されたホストをすばやくプロビジョニングできるようになります。

Docker Machinesの詳細については、公式ドキュメントページにアクセスしてください。 このチュートリアルでダウンロードされた3つのbashスクリプトは、このGitHubページでホストされています。