Docker と Docker Machine の違いDocker はクライアント サーバー アーキテクチャ アプリケーションであり、正式名称は Docker Engine です。 Docker は Docker Engine の単なるニックネームです。もちろん、Docker には会社名など他の意味もあります。簡潔にするために、この記事の Docker は Docker Engine と同等です。 Docker について話すとき、それが 3 つの部分で構成されていることを知っておく必要があります。
次の図はそれらの関係を明確に示しています。 Docker Machine は、Docker をインストールおよび管理するためのツールです。独自のコマンドライン ツール docker-machine があります。 DockerデーモンソケットDocker クライアントは REST API を介して Docker デーモンと通信するため、使用できるメソッドを見てみましょう。
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 は指定したホスト上で次の操作を実行します。
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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: JavaScript が Taobao の虫眼鏡効果を模倣
>>: 英語のシングルクォーテーション「''」を含むSQLの記述の失敗について徹底解説
序文:私は友人のプロジェクトのバグを修正するのを手伝ったのでこれを書きました。この関数を書くのは初め...
赤とピンク、およびそれらの 16 進コード。 #990033 #CC6699 #FF6699 #FF...
今日、MySQL の無料インストール版をデプロイしたところ、テーブル 'mysql.plug...
目次1 バージョンと計画1.1 バージョン情報: 1.2 クラスター計画2. 展開1. ファイアウォ...
1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...
シナリオ: laradock 開発環境 (php7.3+mysql5.7) がローカルに構築されてい...
Bステーションでパスワードを入力するときに目を覆っているこの画像を見たことがある人もいると思いますこ...
Python 3のインストール1. 依存環境をインストールするPython3 はインストール プロセ...
MySQL で、id、a、b の 3 つのフィールドを持つ新しいテーブルを作成します。次のように、同...
バックアップがあれば、非常に簡単です。最新のバックアップ データを生成し、mysqlbinlog を...
Dockerは複数のSpringbootを実行する1番目: ポートマッピング 2番目: メモリサイズ...
遅延読み込み(レイジー読み込み)とプリロードは、Web 最適化によく使用される手段です。 。 1. ...
中国初のカッター github.com/chokcocoまず、ここに画像があります。純粋な CSS ...
Nginx は、リバース プロキシ機能を使用して負荷分散を実装できるほか、フォワード プロキシ機能を...
ページを書いているときに、ページの内容が小さくてフッターがページの真ん中に留まってしまうといった状況...