Docker Machineの詳細な説明

Docker Machineの詳細な説明

Docker と Docker Machine の違い

Docker はクライアント サーバー アーキテクチャ アプリケーションであり、正式名称は Docker Engine です。 Docker は Docker Engine の単なるニックネームです。もちろん、Docker には会社名など他の意味もあります。簡潔にするために、この記事の Docker は Docker Engine と同等です。

Docker について話すとき、それが 3 つの部分で構成されていることを知っておく必要があります。

  1. Dockerデーモン
  2. Dockerデーモンと対話するためのREST API
  3. コマンドラインクライアント

次の図はそれらの関係を明確に示しています。

Docker Machine は、Docker をインストールおよび管理するためのツールです。独自のコマンドライン ツール docker-machine があります。

Dockerデーモンソケット

Docker クライアントは REST API を介して Docker デーモンと通信するため、使用できるメソッドを見てみましょう。

  1. Unixソケット
  2. Systemdソケットのアクティベーション
  3. 通信プロトコル

1 と 2 は、単純に同じホスト上のプロセス間の通信方法として理解できます。 3 については、TCP プロトコルを介したネットワーク間通信は理解しやすいです。

1 と 2 は同一マシン上のプロセス間通信に使用されているため、同一ホスト上にインストールされた Docker クライアントと Docker デーモンはこのように通信していると推測できます。確かにその通りです。Docker をインストールするときにデフォルトで追加される Docker デーモンの起動構成を表示するには、/etc/systemd/system/multi-user.target.wants/docker.service ファイルを開きます。

図の -H は、Docker デーモンがリッスンするソケットを指定するために使用されます。ここで指定されているタイプは、システム ソケットのアクティブ化です。タイプ 1 および 2 を使用した通信では、プロセスに root 権限が必要です。これは、Docker インストール プロセス中に、ルート権限を持つユーザーとユーザー グループが自動的に作成される主な理由でもあります。新しく作成されたユーザーとユーザー グループの名前は docker です。Docker を操作する必要があるすべてのユーザーをこのグループに追加することをお勧めします。そうしないと、コマンドを実行するときに次の問題が発生します。

複数の -H パラメータを同時に指定して、Docker デーモンが異なるソケット タイプを同時にリッスンできるようにすることもできます。たとえば、TCP ポート 2376 のリスナーを追加するには、次のコマンドライン パラメータを使用できます。

$ sudo dockerd -H fd:// -H tcp://0.0.0.0:2376

上記のコマンドを実行し、マシンがリッスンしているポートを確認します。

この時点で、リモート ホスト上の Docker クライアントからこのホストのポート 2376 にアクセスできるようになります。

DOCKER_HOST 環境変数

Docker クライアントのデフォルト設定では、ローカル Docker デーモンにアクセスします。DOCKER_HOST 変数を指定すると、Docker クライアントはこの変数で指定された Docker デーモンにアクセスします。 docker-machine env コマンドを確認しましょう。

実行された $ eval $(docker-machine env krdevdb) コマンドは、DOCKER_HOST 環境変数を設定します。

セキュリティ問題への対応

当社の Docker デーモンは TCP ポートをリッスンしていますが、残念ながら現時点では保護対策を講じていません。したがって、どの Docker クライアントも TCP ポートを介して Docker デーモンと対話できますが、これは明らかに許容されません。解決策は、Docker デーモンと Docker クライアントの両方で TLS 証明書認証を有効にすることです。この方法では、Docker デーモンと Docker クライアント間の通信が暗号化され、特定の証明書がインストールされているクライアントだけが対応する Docker デーモンと対話できるようになります。

これでこの記事の準備は完了です。次は Docker Machine について説明します。

Docker マシン作成コマンド

create コマンドは Docker Machine ドライバーに応じて異なる操作を実行しますが、ここでは特に次の 2 つの手順に重点を置きます。

docker-machine は指定したホスト上で次の操作を実行します。

  1. Docker をインストールして設定します。
  2. Docker サービスを保護するための証明書を生成します。

Dockerデーモンを構成する

Docker のインストール プロセスについては秘密はないので、ここでは詳細には触れません。 Docker デーモンの構成に焦点を当てます。よく観察すると、docker-machine によってインストールされた Docker には、/etc/systemd/system ディレクトリの下に追加の Docker 関連のディレクトリ、docker.service.d があることがわかります。このディレクトリには 10-machine.conf というファイルが 1 つだけあります。

まあ、ここで -H tcp://0.0.0.0:2376 が存在することは、私たちにとってはそれほど驚くべきことではありません。私たちがあらゆる準備をしてきたので、これは当然のことだと思うはずです。 --tls で始まるパラメータは主に証明書に関するものです。後ほどセキュリティ設定で詳しく紹介します。少しわかりにくいのは、上の図の /usr/bin/docker です。最新バージョンの Docker Machine では、Docker デーモンのセットアップに古い方法がまだ使用されています。次のバージョンでこれが更新されることを期待します。

この構成ファイルは、Docker インストールのデフォルトの構成ファイルを上書きし、Docker Machine によって指定された方法で Docker デーモンを起動するため、非常に重要です。これで、リモートからアクセスできる Docker デーモンができました。

証明書を生成する

Docker デーモン構成ファイルには、--tls で始まる 4 つのパラメーター、つまり --tlsverify、--tlscacert、--tlscert、および –tlskey があります。 --tlsverify オプションは、Docker デーモンに TLS 経由でリモート クライアントを検証するように指示します。他の 3 つのパラメータはそれぞれ pem 形式のファイルのパスを指定します。指定するファイル パスを確認します。

手動でインストールされた Docker と比較すると、これらの 3 つのファイルが /etc/docker ディレクトリに存在しないことがわかります。これらは間違いなく Docker Machine によって生成され、主に Docker デーモンの TLS 検証機能を有効にするために使用されます。

それでは、Docker Machine がインストールされているホストに戻りましょう。

/home/nick/.docker/machines/krdevdb ディレクトリを確認すると、同じ名前のファイル (ca.pem、server-key.pem、server.pem) がいくつか見つかりました。それらをホスト drdevdb 上のファイルと比較したところ、同じであることがわかりました。

この写真をもう一度見てみましょう。

これまで取り上げてきた DOCKER_HOST に加えて、他に 3 つの環境変数があります。 DOCKER_TLS_VERIFY は、Docker クライアントに TLS 検証を有効にするように指示します。 DOCKER_CERT_PATH は、TLS 検証が依存するファイルのディレクトリを指定します。これは、先ほど確認した /home/nick/.docker/machines/krdevdb ディレクトリです。

この時点で、私たちを悩ませてきたセキュリティの問題がようやく説明されました。Docker Machine が create コマンドを実行すると、セキュリティを確保するために一連の秘密鍵とデジタル証明書 (*.pem) ファイルが生成されます。これらのファイルはローカルとリモート Docker ホストに保存されます。ローカルのファイルは Docker クライアントを構成するために使用され、リモート ホストのファイルは Docker デーモンを構成するために使用されます。これにより、両側で TLS 検証マークが設定され、安全な通信が実現されます。

要約する

この記事の前半からわかるように、Docker は実際に提供すべきものをすべて提供していますが、構成が面倒です。しかし、ユーザーにとって必要なのは常に、よりシンプルで簡単な構成です。そのため、ユーザーの観点から見ると、Docker Machine は本当に素晴らしいです。 1 つのコマンドで、仮想マシンと Docker をインストールできるだけでなく、手動で行うには困難な多くの構成を完了できます。次に、明確でシンプルなコマンドをいくつか示します。そうすれば、生徒たちは楽しく過ごせます!

Docker Machine に関する詳細な記事はこれで終わりです。Docker Machine についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker-machineの使い方の詳しい説明
  • Docker Machine を使用して Docker をリモートでデプロイする方法
  • Docker Machine は Azure 仮想ホストを作成します
  • Docker マシン ディープラーニング
  • Docker Machine とは何ですか?

<<:  JavaScript が Taobao の虫眼鏡効果を模倣

>>:  英語のシングルクォーテーション「''」を含むSQLの記述の失敗について徹底解説

推薦する

JavaScript での実行コンテキストと実行スタックの例の説明

JavaScript - 原則シリーズ日常の開発では、既存のプロジェクトを引き継ぐときは常に、まず他...

mysql での rpm インストールの詳細な説明

インストールとアンインストールの表示 # rpm -qa | grep mysql を表示 # アン...

Windows が MySQL サービスを開始できず、エラー 1067 を報告する場合の解決策

突然、MySQLにログインすると、アクセスが拒否されたか、データベースに接続できないと表示されました...

HTMLハイパーリンクaタグのhrefジャンプとonclick間の実行順序の例

HTMLハイパーリンクaタグのhrefジャンプとonclickの実行関係htmlのaタグのhrefは...

MySQLデータベースのパスワードを忘れた場合の解決策

先ほど MySQL パスワードを設定したのに、外食したり荷物を受け取ったりするときにパスワードを忘れ...

js を使用して年カルーセル選択効果をネイティブに実装する例

序文js を使用して、年の回転選択効果を実現します。では早速、写真を見てみましょう。 1. アイデア...

1 つの記事で v-model とその修飾子を学ぶ

目次序文v-model の修飾子:怠け者トリム番号さまざまな入力タイプやその他の要素での v-mod...

MySQLの暗黙的な変換問題の解決

1. 問題の説明 root@mysqldb 22:12: [xucl]> テーブル t1\G ...

MYSQLが中国語を認識できない問題の恒久的な解決策

ほとんどの場合、MySQL はインストールしたばかりのときは中国語をサポートしません。これはエンコー...

スクロールバーの美化効果を実現するための CSS3 のサンプル コード

具体的なコードは次のとおりです。 /*スクロールバーの幅*/ ::-webkit-スクロールバー{ ...

Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関する詳細なチュートリアル

ElasticSearch クラスターは、クラスターを構築するための動態請求的方式と靜態配置文件をサ...

RGBカラーテーブルコレクション

RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...

将来最も成功する企業はテクノロジー企業でしょうか、それともデザイン企業でしょうか?

ムーアの法則はもはや適用されない2004年にフレックストロニクスがフロッグデザインを買収したのを皮切...

Vue マルチページ構成の詳細

目次1. 複数ページの違い2. SPAとMPA 3. Vue Cli スキャフォールディング構成1....

JavaScript タイマーの詳細

目次1. 簡単な紹介2. 間隔を設定する2.1 説明2.2 パラメータ2.3 戻り値2.4 使用法3...