リモートDockerサーバーを使用してワークフローを高速化する方法
序章
CPUを集中的に使用するイメージとバイナリの構築は非常に時間のかかるプロセスであり、ラップトップをスペースヒーターに変えることがあります。 低速接続でのDockerイメージのプッシュにも長い時間がかかります。 幸いなことに、これらの問題には簡単な修正があります。 Dockerを使用すると、これらすべてのタスクをリモートサーバーにオフロードできるため、ローカルマシンでそのような大変な作業を行う必要はありません。
この機能はDocker18.09で導入されました。 SSH経由でDockerホストにリモート接続するためのサポートを提供します。 クライアントでの構成はほとんど必要なく、リモートマシンで特別な構成を実行せずに通常のDockerサーバーのみが必要です。 Docker 18.09より前は、Docker Machineを使用してリモートDockerサーバーを作成し、それを使用するようにローカルDocker環境を構成する必要がありました。 この新しい方法は、その追加の複雑さを取り除きます。
このチュートリアルでは、リモートDockerサーバーをホストするドロップレットを作成し、 docker
ローカルマシンでコマンドを実行して使用します。
前提条件
このチュートリアルに従うには、次のものが必要です。
- DigitalOceanアカウント。 アカウントをまだお持ちでない場合は、アカウントを作成できます。
- Dockerがローカルマシンまたは開発サーバーにインストールされています。 Ubuntu 18.04を使用している場合は、 Ubuntu18.04にDockerをインストールして使用する方法の手順1と2に従ってください。 それ以外の場合は、他のオペレーティングシステムへのインストールについて、公式ドキュメントに従ってください。 必ず非rootユーザーをに追加してください
docker
リンクされたチュートリアルのステップ2で説明されているように、グループ。
ステップ1-Dockerホストを作成する
開始するには、適切な量の処理能力を備えたドロップレットを起動します。 CPU最適化プランはこの目的に最適ですが、標準プランも同様に機能します。 リソースを大量に消費するプログラムをコンパイルする場合、CPU最適化プランは、より高速なビルドを可能にする専用のCPUコアを提供します。 それ以外の場合、標準プランはよりバランスの取れたCPUとRAMの比率を提供します。
Dockerワンクリック画像がすべてのセットアップを処理します。 このリンクに従って、コントロールパネルからDockerを使用して16GB /8vCPUCPU最適化ドロップレットを作成します。
または、 doctl
ローカルコマンドラインからドロップレットを作成します。 インストールするには、GitHubのdoctlREADMEファイルの指示に従ってください。
次のコマンドは、Dockerワンクリックイメージに基づいて、FRA1リージョンに新しい16GB /8vCPUCPU最適化ドロップレットを作成します。
- 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/,$//')
The doctl
コマンドは ssh-keys
新しいDropletに適用する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
あなたは使用についてもっと学ぶことができます doctl
チュートリアルのコマンドDoctlの使用方法、公式DigitalOceanコマンドラインクライアント。
ドロップレットが作成されると、Dockerサーバーを使用する準備が整います。 セキュリティ上の理由から、rootの代わりに使用するLinuxユーザーを作成してください。
まず、SSHを使用してrootユーザーとしてDropletに接続します。
- ssh root@your_server_ip
接続したら、新しいユーザーを追加します。 このコマンドは、sammyという名前のコマンドを追加します。
- adduser sammy
次に、ユーザーを docker グループに追加して、Dockerホストでコマンドを実行する権限をユーザーに付与します。
- sudo usermod -aG docker sammy
最後に、次のように入力してリモートサーバーを終了します exit
.
サーバーの準備ができたので、ローカルを構成しましょう docker
それを使用するコマンド。
ステップ2–リモートホストを使用するようにDockerを構成する
ローカルマシンの代わりにリモートホストをDockerホストとして使用するには、 DOCKER_HOST
リモートホストを指す環境変数。 この変数は、DockerCLIクライアントにリモートサーバーに接続するように指示します。
- export DOCKER_HOST=ssh://sammy@your_server_ip
これで、実行するDockerコマンドはすべてDropletで実行されます。 たとえば、Webサーバーコンテナを起動してポートを公開すると、Dropletで実行され、DropletのIPアドレスで公開したポートからアクセスできるようになります。
DockerホストとしてDropletにアクセスしていることを確認するには、 docker info
.
- docker info
ドロップレットのホスト名が Name
そのようなフィールド:
Output…
Name: docker-host
…
覚えておくべきことの1つは、 docker build
コマンド、ビルドコンテキスト(からアクセス可能なすべてのファイルとフォルダー Dockerfile
)がホストに送信され、ビルドプロセスが実行されます。 ビルドコンテキストのサイズとファイルの量によっては、ローカルマシンでイメージをビルドする場合に比べて時間がかかる場合があります。 1つの解決策は、Dockerイメージ専用の新しいディレクトリを作成し、イメージで使用されるファイルのみをコピーまたはリンクして、不要なファイルが誤ってアップロードされないようにすることです。
設定したら DOCKER_HOST
を使用して変数 export
、その値はシェルセッションの期間中持続します。 ローカルのDockerサーバーを再度使用する必要がある場合は、次のコマンドを使用して変数をクリアできます。
unset DOCKER_HOST
結論
リモートDockerホストを作成し、ローカルに接続しました。 次回ラップトップのバッテリーが少なくなったとき、または重いDockerイメージを構築する必要があるときは、ローカルマシンの代わりに光沢のあるリモートDockerサーバーを使用してください。
また、本番環境用にDockerイメージを最適化する方法、またはKubernetes用にそれらを最適化する方法を学ぶことにも興味があるかもしれません。