Member-only story
新しいDocker 20.10のポイント
Docker 20.10を試してみた!
Docker は、アプリケーションを開発、パッケージング、実行するためのオープンプラットフォームです。Dockerエンジンを使用すると、Linux上でコンテナオブジェクトを簡単に構築、管理、共有、実行することができます。Dockerを使えば、アプリケーションを管理するのと同じ方法でインフラストラクチャを管理することができます。最も重要なことは、「自分のマシンだけで実行される」という問題を軽減できることです。
少し背景を説明すると、Docker Engineは3つのコアコンポーネントで構成されています。
・長時間稼働するデーモンプロセスを持つサーバー dockerd
・プログラムがDockerデーモンと対話するためのAPI
・ユーザーとの対話のためのコマンドラインインタフェース(CLI)
新しいDocker Engineのリリースは、すべてのコンポーネントにまで及び、ルートレスコンテナとすべてのロギングドライバにも対応しています。また、DockerはCLIをシンプルにするという道筋を忠実に守っています。ハイライトを見ていきましょう。
ルートレス
まず、Dockerがどのように機能するかを思い出してみましょう。DockerはLinuxカーネルの基本的な機能を利用して、実行中のプロセスとそれに対応するファイルを分離します。
これを実現し、プロセスをコンテナにパッケージ化するために、DockerはLinuxのnamespacesとcgroupsを組み合わせて使用します。メモリをリフレッシュするために、cgroupsはプロセスのリソース使用量(CPU、メモリ、ディスクなど)を制限する役割を担っています。namespaces は、カーネルのリソースを論理的に分割する Linux カーネルの機能です。これにより、1つのプロセスのセットでは1つのリソースのセットしか見ることができず、別のプロセスのセットでは別のリソースのセットしか見ることができないという効果があります。
2006 年、Linux カーネルの一部として cgroups の v2 が初めて導入されました。これにより、グループ管理とルートレスコンテナのリソース制限が変更されました。
現在、OCIの仕様書に従ってコンテナをspawnして実行するためのCLIツールであるruncはcgroups v2に対応しています。このように、Dockerは実験的な機能から完全にサポートされた機能へとルートレスを卒業することができます。
Logging drivers