CentOS7のDockerマシンでリモートDockerホストをプロビジョニングおよび管理する方法
序章
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をインストールするプロセスを実行します。
バイナリをダウンロードしてインストールするには、次のように入力します。
- wget https://github.com/docker/machine/releases/download/v0.14.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.14.0, build 89b8332
ステップ2—追加のDockerマシンスクリプトをインストールする
Docker Machine GitHubリポジトリには3つのbashスクリプトがあり、 docker
と docker-machine
コマンド。 これらは、コマンド補完と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
上記のファイルのインストールを完了するには、のカスタム値を設定する必要があります PS1
あなたの変数 .bashrc
ファイル。 を使用して開きます nano
(PS1は、bashコマンドプロンプトを変更するために使用される特別なシェル変数です):
- nano ~/.bashrc
そのファイルの最後に次の行をコピーして貼り付けます。
export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '
あなたのこの変更で ~/.bashrc
ファイル、マシンをアクティブ化すると、その名前がシェルプロンプトに挿入されます。
ファイルを保存して閉じます。
2番目のスクリプトは docker-machine-wrapper.bash
. それは追加します use
のサブコマンド docker-machine
コマンドを使用すると、DockerizedMachinesを簡単に切り替えることができます。 ダウンロードするには、次のように入力します
- 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
これでコマンドが機能するはずです。 それが機能しない場合は、 bash-completion
パッケージがインストールされていません。 その場合は、次を使用してインストールしてください。
- sudo yum install bash-completion
それはそれを修正する必要があります。
ステップ3—Dockerマシンを使用してDocker化されたホストをプロビジョニングする
ローカルマシンでDockerとDockerMachineを実行しているので、DockerMachineのを使用してDigitalOceanアカウントにDocker化されたドロップレットをプロビジョニングできます。 docker-machine create
指図。 まだ行っていない場合は、次を使用してDigitalOceanAPIトークンをbash変数に割り当てます。
- export shell-variable=your-api-token
注:このチュートリアルでは、DOAPIトークンのbash変数としてDOTOKENを使用します。 変数名はDOTOKENである必要はなく、すべて大文字である必要はありません。
変数を永続的にするには、それをあなたの ~/.bashrc
ファイル。 この手順はオプションですが、ターミナルセッション間で値を維持する場合に必要です。
- nano ~/.bashrc
これに似た行をどこかに追加します。
~/.bashrcexport DOTOKEN=your-api-token
現在のターミナルセッションで変数をアクティブ化するには、次のように入力します。
- source ~/.bashrc
を呼び出すには docker-machine create
コマンドを正常に実行するには、(少なくとも)ドライバー、APIトークン(またはそれに評価される変数)、およびリモートホストの一意の名前を指定する必要があります。 最初のDocker化されたホストを作成するには、次のように入力します。
- 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が起動して実行されます。
コマンドラインから新しく作成されたホストを表示するには、次のように入力します。
- 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—Docker化されたホストを作成するときにベースOSを指定する
この手順では、で作成されるDockerizedHostのベースOSとバージョンを指定する方法を示します。 --digitalocean-image
国旗。
たとえば、CentOS 7を使用してDocker化されたホストを作成するには、次のように入力します。
- docker-machine create --driver digitalocean --digitalocean-image centos-7-x64 --digitalocean-access-token $DOTOKEN machine-name
サーバーでDebian8を実行したい場合はどうなりますか? 次のコマンドを入力します。
- 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
指図:
- 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
:
- docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name
DigitalOceanドライバーを使用したDockerマシンの作成に固有のすべてのフラグを表示するには、次のように入力します。
- docker-machine create --driver digitalocean -h
ヒント: DigitalOceanダッシュボードのドロップレットページを更新すると、を使用して作成した新しいホストが表示されます。 docker-machine
指図。
ステップ5—他のDockerマシンコマンドの実行
を使用してDocker化されたホストをプロビジョニングする方法を見てきました create
サブコマンド。 また、DockerMachineで使用可能なホストを一覧表示する方法も確認しました。 ls
サブコマンド。 このステップでは、他のいくつかについて学びます docker-machine
サブコマンド。
Docker化されたホストに関する詳細情報を取得するには、 inspect
次のようなサブコマンド:
- 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",
...
},
---
ホストの接続構成を印刷するには、次のように入力します。
- 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アドレスを明らかにしますが、次のように入力してその情報を取得することもできます。
- docker-machine ip machine-name
リモートホストの電源を切る必要がある場合は、次を使用できます docker-machine
それを止めるには:
- docker-machine stop machine-name
停止していることを確認します。
- docker-machine ls
ホストのステータスが変更されました:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker digitalocean Timeout
再開するには:
- docker-machine start machine-name
開始されていることを確認します。
- docker-machine ls
あなたはそれを見るでしょう STATE
これで設定されました Running
ホストの場合:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
最後に、ホストを削除する場合:
- docker-machine rm machine-name
ステップ6—SSH経由でDocker化されたホスト上でコマンドを実行する
この時点で、ホストに関する情報を取得していますが、それ以上のことができます。 たとえば、DockerホストでネイティブLinuxコマンドを実行するには、 ssh
のサブコマンド docker-machine
ローカルシステムから。 このセクションでは、実行方法について説明します ssh
経由のコマンド docker-machine
DockerizedホストへのSSHセッションを開く方法も同様です。
オペレーティングシステムとしてCentOSを使用してホストをプロビジョニングしたと仮定して、ローカルシステムから次のコマンドを実行して、Dockerホスト上のパッケージを更新します。
- docker-machine ssh machine-name yum update
リモートDockerホストが使用しているカーネルがわかりませんか? 次のように入力します。
- docker-machine ssh machine-name uname -r
使用することに加えて ssh
リモートDockerホストでコマンドを実行するサブコマンド。これを使用して、Docker化されたホスト自体にログインすることもできます。 入力するのと同じくらい簡単です。
- docker-machine ssh machine-name
コマンドプロンプトは、リモートホストにログインしているという事実を反映して変化します。
root@machine-name#
リモートホストを終了するには、次のように入力します。
exit
ステップ7—Docker化されたホストのアクティブ化
Dockerホストをアクティブ化すると、ローカルのDockerクライアントがそのシステムに接続され、通常の実行が可能になります。 docker
リモートシステム上のコマンド。 Dockerホストをアクティブ化するには、次のコマンドを入力します。
- eval $(docker-machine env machine-name)
または、次のコマンドを使用してアクティブ化することもできます。
- 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
リモートマシンを選択するには:
- 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イメージと、以前にダウンロードした他のイメージが含まれている必要があります。
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
ヒント:リモートホスト上にコンテナを作成する場合は、Dockerクライアントがそれを指している必要があります。つまり、現在のターミナルでアクティブなホストである必要があります。を使用します。 それ以外の場合は、ローカルマシンでコンテナを作成します。 コマンドプロンプトをガイドにします。
手順9—クラッシュレポートの無効化(オプション)
デフォルトでは、Docker Machineを使用してDocker化されたホストをプロビジョニングしようとして失敗した場合、またはDocker Machineがクラッシュした場合、一部の診断情報がBugsnagのDockerアカウントに自動的に送信されます。 これに慣れていない場合は、という空のファイルを作成してレポートを無効にすることができます no-error-report
あなたのインストールの下で .docker/machine
ディレクトリ。
これを行うには、次のように入力します。
- touch ~/.docker/machine/no-error-report
プロビジョニングが失敗した場合、またはDocker Machineがクラッシュした場合は、ファイルでエラーメッセージを確認してください。
結論
これは、Docker Machineをインストールして使用し、1つのローカルシステムから複数のDockerドロップレットをリモートでプロビジョニングするための概要です。 これで、DigitalOceanアカウントに必要な数のDocker化されたホストをすばやくプロビジョニングできるようになります。
Docker Machinesの詳細については、公式ドキュメントページにアクセスしてください。 このチュートリアルでダウンロードされた3つのbashスクリプトは、このGitHubページでホストされています。