web-dev-qa-db-ja.com

Chroot vs Docker

コンテナ(この場合はDocker)の基本を学ぼうとしています。 Dockerのドキュメントといくつかの読みから学ぶ限り、Dockerは基本的に runc (以前は [〜#〜] lxc [〜#〜] を使用してコンテナを実行することで分離を提供します=)。どちらの方法でも、ホストマシンと同じカーネルを使用します。したがって、コンテナイメージはホストカーネルと互換性がある必要があります。これは、 chroot の機能と非常によく似ています。誰かがchrootではなくDockerを使用することの違いや利点を私に説明できますか? (Dockerがパッケージ、docker-hub、およびDockerが提供するすべてのNice機能として提供する追加機能に加えて)

33
rkachach

Dockerでは、名前空間を介して複数のレベルでプロセスを分離できます。

  • mnt名前空間はルートファイルシステムを提供します(これは私が推測するchrootと比較できます)
  • pid名前空間。これにより、プロセスは自分自身とその子のみを見ることができます
  • コンテナに専用のネットワークスタックを持たせることができるネットワーク名前空間
  • ホスト上の非rootユーザーをコンテナ内のrootユーザーにマップできるユーザー名前空間(まったく新しい)
  • utsは専用のホスト名を提供します
  • ipcは専用の共有メモリを提供します

これらはすべて、chrootが提供するよりも多くの分離を追加します

30
Luc