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の記述の失敗について徹底解説

推薦する

MySQL にテーブルデータを挿入するときに中国語の文字化けが発生する問題を解決する方法

1. 問題開発中に、他のデータベースから MySQL データベース テーブルにデータを挿入すると、次...

MySQL のデータ削除とデータ テーブル メソッドの例

MySQL でデータやテーブルを削除するのは非常に簡単ですが、削除するとすべてのデータが消えてしまう...

Linux teeコマンドの使い方の詳しい説明

teeコマンドは主にstandout(標準出力ストリーム、通常はコマンド実行ウィンドウ)に出力し、同...

Vueは双方向データバインディングを実装します

この記事の例では、双方向データバインディングを実装するためのVueの具体的なコードを参考までに共有し...

JavaScript の遅延読み込み属性パターンに関する簡単な説明

目次1. はじめに2. オンデマンド属性モード3. 乱雑な遅延読み込み属性パターン4. クラスの唯一...

NodeJSプロセスがどのように終了するかについて詳しく説明します

目次序文積極的な撤退例外、拒否、および発行されたエラー信号まとめ序文NodeJS プロセスが終了する...

Dockerの基礎

序文: Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者はこれを使...

Nginx で複数のドメイン名がドメインをまたいでアクセスできるようにマップを使用する方法

一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...

Confluence と jira-software を Docker にデプロイする方法

バージョン: セントロス==7.2 jdk==1.8 合流==6.15.4 jira-ソフトウェア=...

Linux環境変数の設定戦略の詳細な説明

ソフトウェアのインストールをカスタマイズする場合、多くの場合、環境変数を設定する必要があります。以下...

Vue はトークンを取得してトークン ログインのサンプル コードを実装します

ログイン認証にトークンを使用する考え方は次のとおりです。 1. 初めてログインする場合、フロントエン...

CentOS サーバーに FFmpeg をインストールするための完全な手順

序文サーバーシステム環境は、CentOS 6.5 (最終) です。 FFmpeg をサーバーに正常に...

WeChatアプレットが複数行テキストのスクロール効果を実現

この記事の例では、WeChatアプレットで複数行のテキストスクロールを実装するための具体的なコードを...

CSS3 で @media を使用して Web ページの適応を実現するためのサンプル コード

現在、コンピュータモニターの画面解像度はますます高くなる傾向にありますが、携帯電話などのモバイルデバ...

ユーザーエクスペリエンスの76の経験ポイントの要約

ウェブサイト体験の分類1. 感覚体験:快適性を重視した視聴覚体験をユーザーに提供します。 2. イン...