前書き
CPUを集中的に使用するイメージとバイナリの構築は、非常に遅く時間のかかるプロセスであり、ラップトップを時々スペースヒーターに変えることができます。 遅い接続でDockerイメージをプッシュするのにも時間がかかります。 幸いなことに、これらの問題を簡単に修正できます。 Dockerを使用すると、これらのすべてのタスクをリモートサーバーにオフロードできるため、ローカルマシンでそれほど苦労する必要はありません。
この機能はDocker 18.09で導入されました。 SSH経由でDockerホストにリモート接続するためのサポートを提供します。 クライアントでの設定はほとんど必要なく、リモートマシンで特別な設定を実行せずに通常のDockerサーバーのみが必要です。 Docker 18.09より前は、Docker Machineを使用してリモートDockerサーバーを作成し、それを使用するようにローカルDocker環境を構成する必要がありました。 この新しい方法は、その追加の複雑さを取り除きます。
このチュートリアルでは、リモートDockerサーバーをホストするドロップレットを作成し、それを使用するようにローカルマシンでdocker
コマンドを構成します。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
DigitalOceanアカウント。 まだ持っていない場合は、create an accountできます。
-
Dockerがローカルマシンまたは開発サーバーにインストールされています。 Ubuntu 18.04を使用している場合は、How To Install and Use Docker on Ubuntu 18.04の手順1と2に従います。それ以外の場合は、他のオペレーティングシステムへのインストールについて、official documentationに従ってください。 リンクされたチュートリアルのステップ2で説明されているように、root以外のユーザーを必ず
docker
グループに追加してください。
[[step-1 -–- creating-the-docker-host]] ==ステップ1-Dockerホストの作成
開始するには、適切な処理能力でドロップレットをスピンアップします。 CPU最適化プランはこの目的に最適ですが、標準プランも同様に機能します。 リソースを集中的に使用するプログラムをコンパイルする場合、CPU最適化プランは専用のCPUコアを提供し、ビルドの高速化を可能にします。 それ以外の場合、標準プランでは、よりバランスのとれたCPUとRAMの比率が提供されます。
Docker One-click imageは、すべてのセットアップを処理します。 Follow this linkを使用して、コントロールパネルからDockerを使用して16GB / 8vCPUCPU最適化ドロップレットを作成します。
または、doctl
を使用して、ローカルコマンドラインからドロップレットを作成することもできます。 インストールするには、doctl README file on GitHubの指示に従ってください。
次のコマンドは、Dockerワンクリックイメージに基づいてFRA1領域に新しい16GB / 8vCPU CPU最適化ドロップレットを作成します。
doctl compute droplet create docker-host \
--image docker-18-04 \
--region fra1 \
--size c-8 \
--wait \
--ssh-keys $(doctl compute ssh-key list --format ID --no-header | sed 's/$/,/' | tr -d '\n' | sed 's/,$//')
doctl
コマンドは、ssh-keys
値を使用して、新しいドロップレットに適用するSSHキーを指定します。 サブシェルを使用してdoctl compute ssh-key-list
を呼び出し、DigitalOceanアカウントに関連付けられているSSHキーを取得し、sed
およびtr
コマンドを使用して結果を解析し、データを正しい形式にフォーマットします。 このコマンドには、アカウントのすべてのSSHキーが含まれますが、強調表示されたサブコマンドを、アカウントにあるキーのフィンガープリントに置き換えることができます。
ドロップレットが作成されると、他の詳細情報の中にそのIPアドレスが表示されます。
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags Features Volumes
148681562 docker-host your_server_ip 16384 8 100 fra1 Ubuntu Docker 5:18.09.6~3 on 18.04 active
チュートリアルHow To Use doctl, the Official DigitalOcean Command-Line Clientで、doctl
コマンドの使用について詳しく知ることができます。
ドロップレットが作成されると、Dockerサーバーを使用する準備が整います。 セキュリティ上の理由から、rootの代わりに使用するLinuxユーザーを作成します。
まず、rootユーザーとしてSSHを使用してDropletに接続します。
ssh root@your_server_ip
接続したら、新しいユーザーを追加します。 このコマンドは、sammyという名前のコマンドを追加します。
adduser sammy
次に、ユーザーをdockerグループに追加して、Dockerホストでコマンドを実行する権限をユーザーに付与します。
sudo usermod -aG docker sammy
最後に、exit
と入力して、リモートサーバーを終了します。
サーバーの準備ができたので、それを使用するようにローカルdocker
コマンドを構成しましょう。
[[step-2 -–- configuring-docker-to-use-the-remote-host]] ==ステップ2–リモートホストを使用するようにDockerを構成する
ローカルマシンの代わりにリモートホストをDockerホストとして使用するには、DOCKER_HOST
環境変数をリモートホストを指すように設定します。 この変数は、リモートサーバーに接続するようにDocker CLIクライアントに指示します。
export DOCKER_HOST=ssh://sammy@your_server_ip
これで、実行するDockerコマンドはすべてドロップレットで実行されます。 たとえば、Webサーバーコンテナを起動してポートを公開すると、Dropletで実行され、DropletのIPアドレスで公開したポートからアクセスできます。
DockerホストとしてDropletにアクセスしていることを確認するには、docker info
を実行します。
docker info
ドロップレットのホスト名が次のようにName
フィールドに表示されます。
Output…
Name: docker-host
…
覚えておくべきことの1つは、docker build
コマンドを実行すると、ビルドコンテキスト(Dockerfile
からアクセス可能なすべてのファイルとフォルダー)がホストに送信され、ビルドプロセスが実行されることです。 ビルドコンテキストのサイズとファイルの量によっては、ローカルマシンでイメージをビルドするのに比べて時間がかかる場合があります。 解決策の1つは、Dockerイメージ専用の新しいディレクトリを作成し、イメージで使用されるファイルのみをコピーまたはリンクして、不要なファイルが誤ってアップロードされないようにすることです。
export
を使用してDOCKER_HOST
変数を設定すると、その値はシェルセッションの間保持されます。 ローカルDockerサーバーを再度使用する必要がある場合は、次のコマンドを使用して変数をクリアできます。
unset DOCKER_HOST
結論
リモートDockerホストを作成し、ローカルに接続しました。 次にノートパソコンのバッテリーが少なくなったとき、または重いDockerイメージを作成する必要があるときは、ローカルマシンの代わりに光沢のあるリモートDockerサーバーを使用します。