Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティングシステムカーネル機能の cgroups (コントロールグループ) によって実現されます。これには、ユーザーパラメータの制限、アカウント管理、リソース (CPU、メモリ、ディスク I/O、ネットワーク) の使用の分離が含まれます。Docker は、実行時にコンテナ内のプロセスのユーザーとグループを指定できます。指定しない場合は、デフォルトで root になります。ただし、分離によってセキュリティが失われることはありません。従来、特定のアプリケーションは特定のユーザーとして実行され、コンテナ内のプロセスがプログラムを指定するユーザーまたはグループをホスト上に事前に作成する必要はありません。 プロセス制御グループ cgroup は主に次のことを実行できます。
cgroup (制御プロセス グループ) に関連するのは、名前空間 (コマンド スペース) の概念です。 名前空間における名前の分離には、主に 6 つの種類があります。
新しい名前空間はピアから分離されますが、その「親」名前空間のプロセスは、子名前空間のすべてのプロセスを引き続き認識します (ただし、PID 番号は異なります)。
通常のユーザー docker コンテナ内で root を実行する たとえば、busybox は Docker コンテナ内でソフトウェアを root として実行できます。ただし、Docker コンテナ自体は通常のユーザーとして実行されます。 この状況を考えてみましょう エコーテスト | docker run -i busybox cat 前者は現在のユーザーの現在のシステムプロセスであり、後者はコンテナー内のユーザーとプロセスに転送されて実行されます。 コンテナ内で PID 1 として実行している場合、Linux はシグナル システムのデフォルトの動作を無視し、プロセスが終了しないようにコーディングされていない限り、SIGINT または SIGTERM シグナルを受信してもプロセスは終了しません。Dockerfile STOPSIGNAL シグナルを介して停止シグナルを指定できます。 のように: ストップシグナル SIGKILL Dockerfileを作成する アルパイン:最新より apk add --update htop && rm -rf /var/cache/apk/* を実行します。 CMD ["htop"] $ docker build -t myhtop . #イメージをビルド $ docker run -it --rm --pid=host myhtop #ホストプロセスと同じ名前空間で実行 通常のユーザーdocker runはコンテナ内の異なるユーザーdemo_userを指定します docker run --user=demo_user:group1 --group-add group2 <イメージ名> <コマンド> ここで、demo_user、group1 (プライマリ グループ)、group2 (セカンダリ グループ) はホストのユーザーとグループではなく、コンテナ イメージの作成時に作成されます。 Dockerfile の USER 命令で実行ユーザーが指定されていない場合、コンテナはプロセスを root ユーザーとして実行します。 Dockerでユーザーを指定する方法 特定のコマンドを実行するには、Dockerfile でユーザーを指定します。 USER <ユーザー>[:<グループ>] #または USER <UID>[:<GID>] docker run -u(--user)[user:group] または --group-add パラメータメソッド $ docker run busybox cat /etc/passwd ルート:x:0:0:root:/root:/bin/sh ... www-data:x:33:33:www-data:/var/www:/bin/false 誰も:x:65534:65534:誰も:/home:/bin/false $ docker run --user www-data ビジーボックスID uid=33(www-データ) gid=33(www-データ) Dockerコンテナ内のユーザーの権限 次の状況を比較すると、ホスト内の通常のユーザーによって作成されたファイルは、Docker コンテナ内のルートユーザー所有者にマッピングされます。 $ mkdir テスト && touch テスト/a.txt && cd テスト $ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c 'ls -al /mnt/*' -rw-r--r-- 1 ルート ルート 0 10月22日 15:36 /mnt/a.txt コンテナのボリューム ディレクトリに作成されたファイルは、ホスト上で現在 Docker を実行しているユーザーに対応します。 $ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox /bin/sh -c 'touch b.txt' $ ls -al -rw-r--r-- 1 xwx スタッフ 0 10 22 23:36 a.txt -rw-r--r-- 1 xwx スタッフ 0 10 22 23:54 b.txt Docker ボリュームのファイルアクセス権限 ボリュームを作成して使用します。Docker は相対パスのマウント ポイントをサポートしていません。複数のコンテナーが同時に同じボリュームを使用できます。 $ docker volume create hello #ボリュームhelloを作成 $ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'touch /world/a.txt && ls -al' #コンテナにビルドされたファイルの合計は 8 個です drwxr-xr-x 2 ルート ルート 4096 10月22日 16:38 。 drwxr-xr-x 1 ルート ルート 4096 10月22日 16:38 .. -rw-r--r-- 1 ルート ルート 0 10月22日 16:38 a.txt $ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'rm /world/a.txt && ls -al' #コンテナから合計8個を削除します drwxr-xr-x 2 ルート ルート 4096 10月22日 16:38 。 drwxr-xr-x 1 ルート ルート 4096 10月22日 16:38 .. 外部でファイルを作成し、コンテナ内の指定されたユーザーとして削除する $ touch c.txt && sudo chmod root:wheel c.txt $ docker run -u 100 -it --rm -v `pwd`:/world -w /world busybox /bin/sh -c 'rm /world/c.txt && ls -al' 実際に削除できる rm: '/world/c.txt'を削除しますか? y 合計 4 drwxr-xr-x 4 100 root 128 10月23日 16:09 . drwxr-xr-x 1 ルート ルート 4096 10月23日 16:09 .. -rw-r--r-- 1 100 ルート 0 10月22日 15:36 a.txt -rw-r--r-- 1 100 ルート 0 10月22日 15:54 b.txt Docker の一般ユーザーのポート権限は 1024 未満 $ docker run -u 100 -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' nc: bind: 権限が拒否されました # ユーザー ID が 100 の場合、ポート 80 を開くことができません$ docker run -u 100 -it --rm -p 70:8800 busybox /bin/sh -c 'nc -l -p 8800' # コンテナー ポートが 1024 より大きい場合は、... $ docker run -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' #コンテナ内で root を使用することもできます... 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL の binlog ログと、binlog ログを使用してデータを回復する方法を説明します。
>>: JavaScript で H5 ゴールド コイン関数を実装する (サンプル コード)
この記事は、参考のためにMySQL 8.0.12のインストールグラフィックチュートリアルを記録してい...
仮想マシンは非常に便利なテストソフトウェアです。ハードウェアに損傷を与えることなく、さまざまなテスト...
この記事では、MySQL 8.0.16圧縮パッケージのインストールと設定方法を参考までに紹介します。...
よく遭遇する問題: 下部の要素を「下部に貼り付ける」効果を CSS でどのように実現するか。この記事...
目次序文1. 何ですか2. Node.jsでEventEmitterを使用する方法3. 実施プロセス...
半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...
1 / Webプロジェクトファイルをwebappsディレクトリに直接コピーするこれは最も一般的に使...
JSON 形式のフィールドは、MySQL 5.7 で追加された新しい属性ですが、基本的には文字列とし...
ウェブページを作り始めたばかりの友人の多くは、拡張子が非常に多いことに気づきます。実際、htm と ...
最近、コンピューターの電源を入れたところ、Geek Academy が新規ユーザーに 1 か月の無料...
XHTML は CSS レイアウトの基礎です。jb51.net は常に XHTML 知識の習得を重視...
CSS3アニメーションとJSアニメーションの違いJSはフレームアニメーションを実装しますCSS3はト...
下図のように、 selectポップアップレイヤーの下部に操作ボタンを配置するのが一般的な設計方法です...
導入インストールするシステムの数が多い場合、USB フラッシュ ドライブまたは CD を使用した手動...
SQL 左結合、右結合、内部結合、自然結合 さまざまな結合の概要SQL には、左結合、右結合、内部結...