序章

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

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

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

前提条件

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

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

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

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

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

  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

実行可能にする:

  1. chmod +x docker-machine

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

  1. 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

そのファイル内には、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\]$(__docker_machine_ps1 " [%s]")\$ '

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

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

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

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

  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 これでコマンドが機能するはずです。

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

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

  1. export DOTOKEN=your-api-token

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

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

そのファイルを nano:

  1. nano ~/.bashrc

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

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

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

  1. source ~/.bashrc

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

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

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

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

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

  1. docker-machine ls

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

Output
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS ubuntu1604-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-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を使用してマシンを作成するには、次のように入力します。

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

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

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

CentOS 7をベースOSとして使用してDocker化されたホストをプロビジョニングするには、次のように指定します。 centos-7-0-x86 画像名として、次のように:

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

基本オペレーティングシステムだけが選択肢ではありません。 ドロップレットのサイズを指定することもできます。 デフォルトでは、これは最小のドロップレットであり、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ディストリビューションのバージョンを示し、 size 行は、サイズスラッグを示しています。

Output
... { "ConfigVersion": 3, "Driver": { "IPAddress": "203.0.113.71", "MachineName": "ubuntu1604-docker", "SSHUser": "root", "SSHPort": 22, ... "Image": "ubuntu-16-04-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 ubuntu1604-docker digitalocean Timeout

再開するには:

  1. docker-machine start machine-name

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

  1. docker-machine ls

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

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

次に、以下を使用して削除できます。

  1. docker-machine rm machine-name

ドロップレットは、によって作成されたSSHキーとともに削除されます docker-machine. これで、Docker化されたホストを一覧表示すると、削除したばかりのホストは表示されないはずです。

  1. docker-machine ls

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

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

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

  1. docker-machine ssh machine-name apt-get update

以下を使用して、利用可能な更新を適用することもできます。

  1. docker-machine ssh machine-name apt-get upgrade

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

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

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

  1. docker-machine ssh machine-name

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

Output
[email protected]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 ubuntu1604-docker * digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce

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

docker-machine use -u

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

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

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

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

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

  1. docker-machine use machine-name

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

  1. 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

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

  1. 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ページでホストされています。