リモートDockerサーバーを使用してワークフローを高速化する方法

前書き

CPUを集中的に使用するイメージとバイナリの構築は、非常に遅く時間のかかるプロセスであり、ラップトップを時々スペースヒーターに変えることができます。 遅い接続でDockerイメージをプッシュするのにも長い時間がかかります。 幸いなことに、これらの問題を簡単に修正できます。 Dockerを使用すると、これらのすべてのタスクをリモートサーバーにオフロードできるため、ローカルマシンでそれほど苦労する必要はありません。

この機能はDocker 18.09で導入されました。 SSH経由でDockerホストにリモート接続するためのサポートを提供します。 クライアントでの設定はほとんど必要なく、リモートマシンで特別な設定を実行せずに通常のDockerサーバーのみが必要です。 Docker 18.09より前は、Docker Machineを使用してリモートDockerサーバーを作成し、それを使用するようにローカルDocker環境を構成する必要がありました。 この新しい方法は、その追加の複雑さを取り除きます。

このチュートリアルでは、リモートDockerサーバーをホストするドロップレットを作成し、それを使用するようにローカルマシンで `+ docker +`コマンドを設定します。

前提条件

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

  • DigitalOceanアカウント。 まだお持ちでない場合は、https://cloud.digitalocean.com/registrations/new [アカウントを作成]できます。

  • ローカルマシンまたは開発サーバーにインストールされているhttps://www.docker.com/[Docker]。 Ubuntu 18.04を使用している場合は、https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04 [How To]のステップ1および2に従ってください。 Ubuntu 18.04にDockerをインストールして使用する];それ以外の場合は、https://docs.docker.com/install/ [公式ドキュメント]に従って他のオペレーティングシステムへのインストールに関する情報を確認してください。 リンクされたチュートリアルのステップ2で説明されているように、必ず非ルートユーザーを `+ docker +`グループに追加してください。

ステップ1 – Dockerホストの作成

開始するには、適切な処理能力でドロップレットをスピンアップします。 CPU最適化プランはこの目的に最適ですが、標準プランも同様に機能します。 リソースを集中的に使用するプログラムをコンパイルする場合、CPU最適化プランは専用のCPUコアを提供し、ビルドの高速化を可能にします。 それ以外の場合、標準プランでは、よりバランスのとれたCPUとRAMの比率が提供されます。

Docker One-click imageがすべてのセットアップを処理してくれます。 https://cloud.digitalocean.com/droplets/new?size=c-8-16gib&image=docker-18-04 [このリンクをフォロー]をクリックして、コントロールパネルからDockerを使用して16GB / 8vCPU CPU最適化ドロップレットを作成します。

または、 `+ doctl +`を使用して、ローカルコマンドラインからドロップレットを作成できます。 それをインストールするには、https://github.com/digitalocean/doctl/blob/master/README.md [GitHubのdoctl READMEファイル]の指示に従ってください。

次のコマンドは、Dockerワンクリックイメージに基づいてFRA1領域に新しい16GB / 8vCPU CPU最適化ドロップレットを作成します。

doctl compute droplet create docker-host \
   --image  \
   --region  \
   --size  \
   --wait \
   --ssh-keys

`+ 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                                        16384     8        100     fra1      Ubuntu Docker 5:18.09.6~3 on 18.04    active

チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-use-doctl-the-official-digitalocean-command-line-client[How doctlを使用するには、公式のDigitalOceanコマンドラインクライアント]。

ドロップレットが作成されると、Dockerサーバーを使用する準備が整います。 セキュリティのために、* root *の代わりに使用するLinuxユーザーを作成します。

まず、* root *ユーザーとしてSSHを使用してDropletに接続します。

接続したら、新しいユーザーを追加します。 このコマンドは、* sammy *という名前の1つを追加します。

adduser

次に、ユーザーを* docker *グループに追加して、Dockerホストでコマンドを実行する権限を付与します。

sudo usermod -aG docker sammy

最後に、「+ exit +」と入力してリモートサーバーを終了します。

サーバーの準備ができたので、ローカルの `+ docker`コマンドを使用して設定します。

ステップ2 –リモートホストを使用するためのDockerの構成

ローカルマシンの代わりにリモートホストをDockerホストとして使用するには、リモートホストを指すように `+ DOCKER_HOST +`環境変数を設定します。 この変数は、リモートサーバーに接続するようにDocker CLIクライアントに指示します。

export DOCKER_HOST=ssh://@

これで、実行するDockerコマンドはすべてドロップレットで実行されます。 たとえば、Webサーバーコンテナを起動してポートを公開すると、Dropletで実行され、DropletのIPアドレスで公開したポートからアクセスできます。

DockerホストとしてDropletにアクセスしていることを確認するには、「+ docker info +」を実行します。

docker info

Dropletのホスト名が[+ Name +]フィールドに次のように表示されます。

Output…
Name:
…

留意すべきことの1つは、 `+ docker build `コマンドを実行すると、ビルドコンテキスト( ` Dockerfile +`からアクセス可能なすべてのファイルとフォルダー)がホストに送信され、ビルドプロセスが実行されることです。 ビルドコンテキストのサイズとファイルの量によっては、ローカルマシンでイメージをビルドする場合に比べて時間がかかる場合があります。 解決策の1つは、Dockerイメージ専用の新しいディレクトリを作成し、イメージで使用されるファイルのみをコピーまたはリンクして、不要なファイルが誤ってアップロードされないようにすることです。

`+ export `を使用して ` DOCKER_HOST +`変数を設定すると、その値はシェルセッションの間持続します。 ローカルDockerサーバーを再度使用する必要がある場合は、次のコマンドを使用して変数をクリアできます。

unset DOCKER_HOST

結論

リモートDockerホストを作成し、ローカルに接続しました。 次にノートパソコンのバッテリーが少なくなったとき、または重いDockerイメージを作成する必要があるときは、ローカルマシンの代わりに光沢のあるリモートDockerサーバーを使用します。

また、https://www.digitalocean.com/community/tutorials/how-to-optimize-docker-images-for-production [本番用にDockerイメージを最適化する方法]またはhttps:// wwwの学習にも興味があるかもしれません。 .digitalocean.com / community / tutorials / building-optimized-containers-for-kubernetes [Kubernetes向けに最適化する方法]。