1. Docker Secretとは1. シナリオ表示MySQL サービスなど、一部のサービスではパスワードが必要であることがわかっています。 バージョン: '3' サービス: ウェブ: 画像: wordpress ポート: -8080:80 ボリューム: - ./www:/var/www/html 環境: WORDPRESS_DB_NAME=ワードプレス WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD: ルート ネットワーク: - マイネットワーク 依存: -MySQLについて 展開する: モード: 複製 レプリカ: 3 再起動ポリシー: 条件: 失敗時 遅延: 5秒 最大試行回数: 3 アップデート構成: 並列処理: 1 遅延: 10秒 マイスク: 画像: mysql 環境: MYSQL_ROOT_PASSWORD: ルート MYSQL_DATABASE: ワードプレス ボリューム: -mysql-データ:/var/lib/mysql ネットワーク: - マイネットワーク 展開する: モード: グローバル 配置: 制約: - node.role == マネージャー ボリューム: mysqlデータ: ネットワーク: 私のネットワーク: ドライバー: オーバーレイ この docker-compose.yml の 2 つのサービス パスワードはプレーン テキストで、あまり安全ではないことがわかります。では、Docker シークレットとは何でしょうか。また、上記の問題を解決できるのでしょうか。 Docker の秘密マネージャー ノードは、分散ストレージ データベース Raft データベースを通じて状態の一貫性を維持していることがわかっています。このデータベース自体は情報を秘密に保持するため、このデータベースを使用してアカウント番号、パスワードなどの機密情報を保存し、サービスを承認することでアクセスを許可し、パスワードがプレーン テキストで表示されるのを防ぐことができます。 要約すると、シークレット スウォーム内のシークレットの管理は次の手順で実行されます。
2. Docker Secretの作成と使用1. 創造まず、作成されたヘルプ手順をいくつか見てみましょう。 [root@centos-7 ~]# docker シークレット --help 使用方法: docker secret コマンド Dockerシークレットを管理する コマンド: ファイルまたはSTDINからコンテンツとしてシークレットを作成する 検査 1つ以上のシークレットの詳細情報を表示する ls シークレットを一覧表示する rm 1つ以上のシークレットを削除する コマンドの詳細については、「docker secret COMMAND --help」を実行してください。 最初のコマンドは作成されたコマンドです。どのようなヘルプ情報があるか見てみましょう。 [root@centos-7 ~]# docker secret create --help 使用方法: docker secret create [OPTIONS] SECRET [file|-] ファイルまたはSTDINからコンテンツとしてシークレットを作成する オプション: -d, --driver 文字列 シークレットドライバー -l, --label シークレットラベルのリスト --template-driver 文字列 テンプレートドライバー シークレットはファイルまたは標準出力から取得できることがわかります。 Secret を作成するには、次の 2 つの方法があります。
1. ファイルに基づいて作成する まず、パスワードを保存するファイルを作成します [root@centos-7 ~]# vim mysql-パスワード 根 次に秘密を作成します [root@centos-7 ~]# docker secret create mysql-pass mysql-password 翻訳: mysql-pass はシークレットの名前で、mysql-password はパスワードを保存するために作成したファイルです。このコマンドを実行すると、ファイル内のパスワードが Swarm のマネージャーノードの Raft データベースに保存されます。セキュリティ上の理由から、パスワードはすでに Swarm 内にあるため、このファイルを直接削除できるようになりました。 [root@centos-7 ~]# rm -f mysql-パスワード これで秘密リストを表示できます: [root@centos-7 ~]# docker secret ls ID 名前 ドライバー 作成 更新 texcct9ojqcz6n40woe97dd7k mysql-pass 4分前 4分前 すでに存在します。 2. コマンドラインに基づいて作成する [root@centos-7 ~]# echo "root" | docker secret create mysql-pass2 - hrtmn5yr3r3k66o39ba91r2e4 [root@centos-7 ~]# docker secret ls ID 名前 ドライバー 作成 更新 texcct9ojqcz6n40woe97dd7k mysql-pass 6分前 6分前 hrtmn5yr3r3k66o39ba91r2e4 mysql-pass2 5秒前 5秒前 この方法は、成功させるのに非常に簡単です (II)その他の業務では、シークレットには他の操作はありますか? [root@centos-7 ~]# docker シークレット --help 使用方法: docker secret コマンド Dockerシークレットを管理する コマンド: ファイルまたはSTDINからコンテンツとしてシークレットを作成する 検査 1つ以上のシークレットの詳細情報を表示する ls シークレットを一覧表示する rm 1つ以上のシークレットを削除する コマンドの詳細については、「docker secret COMMAND --help」を実行してください。 create コマンドの他に、inspect、ls、rm コマンドもあることがわかります。 1. 検査する [root@centos-7 ~]# docker secret を検査する mysql-pass2 [ { "ID": "hrtmn5yr3r3k66o39ba91r2e4", 「バージョン」: { 「インデックス」: 4061 }, 「作成日時」: 「2020-02-07T08:39:25.630341396Z」、 「更新日時」: 「2020-02-07T08:39:25.630341396Z」、 「仕様」: { "名前": "mysql-pass2", 「ラベル」: {} } } ] 秘密の詳細を表示する 2.rm [root@centos-7 ~]# docker secret rm mysql-pass2 mysql-pass2 [root@centos-7 ~]# docker secret ls ID 名前 ドライバー 作成 更新 texcct9ojqcz6n40woe97dd7k mysql-pass 12 分前 12 分前 シークレットを削除する (III)単一コンテナでのシークレットの使用1. コンテナ内のシークレットを表示する シークレットを作成しました。サービスを開始した後、特定のサービスがそれを参照できるように、そのシークレットを承認するにはどうすればよいでしょうか?まず、サービスを作成するコマンドに類似のコマンドまたはパラメータがあるかどうかを確認します。 [root@centos-7 ~]# docker サービス作成 --help 使用方法: docker service create [OPTIONS] IMAGE [COMMAND] [ARG...] 新しいサービスを作成する オプション: --config config サービスに公開する設定を指定します ... --secret secret サービスに公開するシークレットを指定します ... ... 実際に、サービスを作成するときにサービスに秘密を公開できるコマンドが存在します。 2. サービスを作成する [root@centos-7 ~]# docker service create --name demo --secret mysql-pass busybox sh -c "while true; do sleep 3600; done" 翻訳: 全体の進捗状況: 1 タスク中 1 タスク 1/1: 実行中 検証: サービスが統合されました サービスがどのノードで実行されているかを確認します。 [root@centos-7 ~]# docker サービス ls ID 名前 モード レプリカ イメージ ポート zwgk5w0rpf17 デモが 1/1 に複製されました busybox:latest [root@centos-7 ~]# docker サービス ps デモ ID 名前 イメージ ノード 望ましい状態 現在の状態 エラー ポート yvr9lwvg8oca demo.1 busybox:latest localhost.localdomain 実行中 51 秒前に実行中 このサービスは localhost.localdomain ホストのノード上で実行されていることがわかります。このノードに移動してコンテナに入り、シークレットを表示できるかどうか確認してみましょう。 [root@localhost ~]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 36573adf21f6 busybox:latest "sh -c 'while true; …"4 分前 4 分前 demo.1.yvr9lwvg8ocatym20hdfublhd [root@localhost ~]# docker exec -it 36573adf21f6 /bin/sh /#ls bin dev etc home proc root run sys tmp usr var / # cd /run/secrets /run/secrets # ls mysql-pass /run/secrets # cat mysql-pass 根 /run/secrets # 確かに実現可能であることがわかります。 2. MySQLサービス MySQL イメージの詳細については、シークレットの説明が記載されている https://hub.docker.com/_/mysql を参照してください。 環境変数を介して機密情報を渡す代わりに、前述の環境変数に _FILE を追加して、init スクリプトがコンテナー内に存在するファイルからそれらの変数の値を読み込むようにすることができます。特に、これを使用して、/run/secrets/<secret_name> ファイルに保存されている Docker Secret からパスワードを読み込むことができます。例えば: $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag 現在、これは MYSQL_ROOT_PASSWORD、MYSQL_ROOT_HOST、MYSQL_DATABASE、MYSQL_USER、および MYSQL_PASSWORD のみをサポートしています。 そのため、データベースの機密情報を保存するためのファイル secret を作成する必要があります。このファイルは以前に作成されているため、ここで再度作成する必要はありません。 [root@centos-7 ~]# docker secret ls ID 名前 ドライバー 作成 更新 texcct9ojqcz6n40woe97dd7k mysql-pass 4 時間前 4 時間前 mysql サービスを開始します。 [root@centos-7 ~]# docker service create --name db --secret mysql-pass -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-pass mysql sbpagzqvpwt8ifymavf8o5xmi 全体の進捗状況: 1 タスク中 1 タスク 1/1: 実行中 検証: サービスが統合されました mysql サービスがどのノードにあるかを確認します。 [root@centos-7 ~]# docker サービス ls ID 名前 モード レプリカ イメージ ポート sbpagzqvpwt8 db 複製 0/1 mysql:latest [root@centos-7 ~]# docker サービス ps db ID 名前 イメージ ノード 望ましい状態 現在の状態 エラー ポート qlmfm6u7lg8u db.1 mysql:latest localhost.localdomain 実行中 2 秒前に開始 シークレットを表示するには、ワーカー ノードのサービス コンテナーに入ります。 [root@localhost ~]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 2ac2a810e931 mysql:latest "docker-entrypoint.s..." 3 分前 2 分前にアップ 3306/tcp、33060/tcp db.1.qlmfm6u7lg8u8i1v2m2c3ls3r [root@localhost ~]# docker exec -it 2ac2a810e931 /bin/sh # cd /run/secrets/ # ls mysql-pass # 猫mysql-pass 根 パスワードがわかったので、MySQL データベースに入ることができます。 #mysql -uroot -p パスワードを入力してください: MySQL モニターへようこそ。コマンドは ; または \g で終わります。 MySQL接続IDは9です サーバーバージョン: 8.0.19 MySQL コミュニティサーバー - GPL Copyright (c) 2000, 2020, Oracle およびその関連会社。無断複写・転載を禁じます。 OracleはOracle Corporationおよびその関連会社の登録商標です。 その他の名称は各社の商標である場合があります。 所有者。 ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。 マイSQL> (IV) スタック内のシークレットの使用スタックはスタックをデプロイするために docker-compose.yml ファイルを使用するので、docker-compose.yml でシークレットをどのように定義すればよいでしょうか? バージョン: '3' サービス: ウェブ: 画像: wordpress ポート: -8080:80 秘密: -私のパスワード 環境: WORDPRESS_DB_HOST: mysql WORDPRESS_DB_PASSWORD_FILE: /run/secrets/wordpress-pass ネットワーク: - マイネットワーク 依存: -MySQLについて 展開する: モード: 複製 レプリカ: 3 再起動ポリシー: 条件: 失敗時 遅延: 5秒 最大試行回数: 3 アップデート構成: 並列処理: 1 遅延: 10秒 マイスク: 画像: mysql 秘密: -私のパスワード 環境: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-pass MYSQL_DATABASE: ワードプレス ボリューム: -mysql-データ:/var/lib/mysql ネットワーク: - マイネットワーク 展開する: モード: グローバル 配置: 制約: - node.role == マネージャー ボリューム: mysqlデータ: ネットワーク: 私のネットワーク: ドライバー: オーバーレイ シークレットは、環境で WORDPRESS_DB_PASSWORD_FILE と MYSQL_ROOT_PASSWORD_FILE を定義することによって作成されます。当然、この docker-compose.yml ファイルを実行する前に、対応するシークレット ファイルを作成する必要があります。次に、docker stack deploy コマンドを使用してスタックをデプロイできます。 Docker Secret の管理と使用に関するこの記事はこれで終わりです。Docker Secret に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 16 の XHTML1.0 と HTML の互換性ガイドラインの概要
<br />改行タグの使用<br>改行タグ<br>は終わりのない...
React Native は、現在人気のオープンソース JavaScript ライブラリ React...
01 並列レプリケーションの概念MySQL のマスター スレーブ レプリケーション アーキテクチャで...
この例では、Linux への Python 3.8 のインストールを例に挙げます。 1. 依存パッケ...
目次1. mixin の使い方は? 2. ミックスイン使用時の注意2.1. ミックスイン オブジェク...
誤って source.list の内容を変更し、一連のエラーが発生した場合は、デフォルトのソース フ...
機能: 前のページまたは次のページにジャンプします。要素: ページングの基本要素は、前のページ + ...
この記事の例では、リストのシームレスなスクロールを実現するためのvueの具体的なコードを参考までに共...
まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...
1. 需要正しい Cookie 配信と SSO テストを確実に実行できるように、ローカル テスト ド...
Linux や Unix の cut コマンドは、ファイルの各行から一部を切り取って標準出力に出力す...
目次MySQL マスター スレーブ レプリケーション環境を設定する場合、マスター データベースとスレ...
0x00 はじめに数か月前、Firefox に脆弱性 (CVE-2019-17016) があること...
1. MMMの紹介: MMM は、Multi-Master Replication Manager...
Vue2 の記述スタイルから Vue3 の形式に切り替えると、記述スタイルとコード構造にいくつかの変...