GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

リモートDockerホストを使用する方法と理由

docker CLIプログラムは、コンテナーを実行するDockerデーモンから独立しています。通常、両方のコンポーネントはローカルマシンで実行されますが、dockerを実行できます。 リモートDockerホストに対するコマンド。

リモートホストの使用は、いくつかのシナリオで役立つ場合があります。小規模な開発チーム用に共有DockerEngineインストールをセットアップする場合があります。その後、各開発者は、ローカルのdocker execを使用してリモートコンテナに接続できます。 コマンド。

強力なサーバーが使用されていない場合、リモートホストはより頻繁に価値があります。ノートパソコンの速度が遅い、またはストレージが不足している場合は、ネットワークで専用のDockerホストを使用すると、パフォーマンスが大幅に向上する可能性があります。あなたはまだ地元のdockerのすべての便利さを手に入れます ターミナルのCLI。

リモートホストの設定

リモートホストとなるシステムにDockerがインストールされていることを確認してください。必要なのはdocker-cliだけです Docker Engineを実行しないため、ローカルマシンでパッケージ化します。

Dockerを新しくインストールすると、デフォルトでUnixソケットが提供されます。リモートアクセスにはTCPソケットが必要です。 dockerdを実行します (Dockerデーモン実行可能ファイル)-H バインドするソケットを定義するフラグ。

sudo dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

このコマンドは、DockerをマシンのループバックアドレスのデフォルトのUnixソケットとポート2375にバインドします。 -Hを繰り返すことで、追加のソケットとIPアドレスにバインドできます。 フラグ。

dockerdを実行するたびにフラグを渡す必要があります 。再起動後もそれらを保持する場合は、シェルエイリアスを作成するか、Dockerサービス定義を変更します。 systemdを使用して後者を実現する方法は次のとおりです。 、ほとんどのLinuxディストリビューションがサービス管理に使用します。

/etc/systemd/system/docker.service.d/options.confを編集します (または、存在しない場合は作成します)。 [Service]を見つけます セクションを作成し、ExecStartを変更します 行:

[Service]
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375

systemdをリロードします 変更を適用するための構成:

sudo systemctl daemon-reload

Dockerがすでに実行されている場合は、sudo systemctl restart dockerを使用します サービスを再開します。 Dockerデーモンは、起動するたびにTCPポート2375にバインドするようになりました。ポートへのトラフィックがファイアウォール構成で許可されていることを確認してください。 ufwを使用している場合は、ufw allow 2375を実行します ポートを開きます。

リモートホストへの接続

DockerCLIはDOCKER_HOSTを使用します 接続するホストを決定するための環境変数。変数が設定されていない場合は、ローカルデーモンのUnixソケットが使用されます。

1つのdockerにリモートホストを使用できます DOCKER_HOSTの前にコマンドを追加します 変数:

DOCKER_HOST=tcp://192.168.0.1:2375 docker run httpd:latest -d

これにより、httpd:latestから新しいコンテナが開始されます 192.168.0.1:2375でDockerエンジンを使用したイメージ 。

1つのセッションで複数のコマンドを実行する場合は、DOCKER_HOSTをエクスポートします。 シェルへの変数:

export DOCKER_HOST=tcp://192.168.0.1:2375

docker run httpd:latest -d --name httpd
docker ps
docker rm httpd --force

dockerを作成できます DOCKER_HOSTを設定して、常にリモートホストを使用してください シェルの構成ファイルでグローバルに。 Bashでこれを行う方法は次のとおりです。

echo "export DOCKER_HOST=tcp://192.168.0.1:2375" >> ~/.bashrc

ここで、DOCKER_HOST 環境変数は、シェルが起動するたびに設定されます。

セキュリティの強化

基本的なTCPソケットは保護されていません。ネットワーク経由でマシンにアクセスできる人は誰でも、Dockerソケットを使用してコンテナを制御できます。

DockerはTCPではなくSSHをサポートしています。ホストにSSHサーバーが使用可能な場合、これは通常、より適切なオプションです。認証されていないユーザーがアクセスするのを防ぎます。 SSHを使用する場合、追加の構成は必要ありません。 DOCKER_HOST SSH接続文字列を渡すことができます:

DOCKER_HOST=ssh://user@hostname docker run -d --name httpd

または、SSHバインディングを使用して、リモートホストのDockerUnixソケットをローカルマシンに直接バインドすることもできます。

ssh -L /var/run/docker.sock:/var/run/docker.sock

これで、DOCKER_HOSTを使用する必要はありません。 まったく。リモートのdocker.sock ローカルの対応物にバインドされます。 Dockerはこれを標準のUnixソケットとして自動検出します。

SSHベースのソリューションの1つを使用することは、Dockerデーモンのセキュリティにアプローチするための推奨される方法です。認証局とサーバーおよびクライアントキーを提供する場合、DockerはTLSもサポートします:

dockerd --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=0.0.0.0:2375

これで、認証局ca.pemによって信頼された有効なSSL証明書を提示すれば、クライアントはポート2375で接続できるようになります。 。

関連: PEMファイルとは何ですか。どのように使用しますか?

コンテキストの作成

Dockerを使用すると、さまざまなホストに接続するためのいくつかの「コンテキスト」を設定できます。 DOCKER_HOSTの代わりにコンテキストを使用できます 環境変数。複数のリモートホストを簡単に切り替えることができます。

docker context create --docker host=tcp://192.168.0.1:2375 --description remote
docker context create --docker host=unix:///var/run/docker.sock --description local
>

これらのコマンドは、2つの異なるコンテキストを作成します。1つはローカルのdocker.sock用です。 1つはリモート接続用です。

docker context useを使用してコンテキストを切り替えることができます コマンド:

docker context use remote

# Container is started on "remote"
docker run httpd:-latest -d

docker context use local

# Lists containers running on "local"
docker ps

コンテキストは、複数のDockerホストを操作するときに役立ちます。 DOCKER_HOSTを継続的にリセットするよりも面倒ではありません。 ホスト間を移動すると変化します。

リモートホストの欠点

リモートホストはビルドのパフォーマンスを向上させることができることを前述しました。このステートメントは、DockerEngineを実行しているマシンがローカルハードウェアよりも高速である場合にのみ当てはまります。リモートホストの最大の欠点は、ネットワークを介した対話の余分なオーバーヘッドです。また、ネットワークに依存するようになります。接続が失われると、コンテナを管理できなくなります。

メインビルドサーバーとしてリモートホストを使用する場合は、信頼性の高い高速ネットワーク接続が必要です。最初のdocker build stageは、イメージのビルドコンテキスト(通常は作業ディレクトリ)のコンテンツをDockerEngineに送信します。これは、Dockerがローカルで実行されている場合は高速ですが、リモートマシンへのアップロードにははるかに時間がかかる場合があります。

ネットワークを介してDockerデーモンインスタンスを公開することは、セキュリティ上のリスクです。アクセスが許可されたユーザーとデバイスに制限されていることを確認する必要があります。 Dockerデーモンソケットが意図せずに公開されると、攻撃者はホストに無制限にアクセスできるようになる可能性があります。 Dockerは通常、rootとして実行されます したがって、信頼できる個人だけがコンテナを開始できることが重要です。

結論

リモートDockerホストを設定すると、コンテナインスタンスをローカル開発マシンから分離できます。専用のDockerビルドサーバーは、パフォーマンスの向上とイメージストレージスペースの拡大を実現します。

実装のセキュリティを監査するように注意する必要があります。プレーンTCPソケットは、プライベートネットワークでは安全な場合がありますが、機密性の高い環境では展開しないでください。 SSHを使用すると、必須のキーベースの認証など、SSHのセキュリティを適切に管理する場合のリスクを軽減できます。


Docker
  1. Dockerを使用してOpenVPNサーバーをインストールしてホストする方法

  2. Ubuntu20.04にDockerをインストールして使用する方法

  3. CentOSにDockerComposeをインストールして使用する方法

  1. プライベートDockerレジストリを設定して使用する方法

  2. Ubuntu20.04にDockerをインストールして使用する方法

  3. Dockerを使用する時期と理由

  1. Ubuntu18.04にDockerをインストールして使用する方法

  2. Ubuntu18.04にDockerComposeをインストールして使用する方法

  3. CentOS7にDockerをインストールして使用する方法