Container Linux

Container Linux（旧称：CoreOS Linux）は、 Linuxカーネルをベースにしたオープンソースの軽量なオペレーティングシステムである。クラスター向けのデプロイにインフラストラクチャを提供するために開発されており、自動化、アプリケーションのデプロイの容易さ、セキュリティ、信頼性、スケーラビリティに重点を置いて設計されている。オペレーティングシステムとしては、Container Linuxは、ソフトウェアコンテナ（英語版）内のアプリケーションのデプロイに必要な最小限の機能のみを提供するが、同時に、サービス・ディスカバリーや設定を共有するためのビルトインのメカニズムも備えている。 現地時間2018年1月30日、レッドハットがCoreOS, Inc.を買収する最終合意を締結したと発表。それに伴い、Container LinuxはFedora Atomic Hostに統合され、Fedora CoreOSとなった。Container Linuxについては現地時間2020年5月26日にEOLを迎えた旨のアナウンスがされており、同2020年9月1日以降関連リソースは削除または読み取り専用となっている。記事中でFedora CoreOSが公式の後継であるとされている。 Container Linuxは、Gentoo Linux、ChromeOS、Chromium OSと共通のSDKを利用しており、これらのオペレーティングシステムとソフトウェアの基盤を共有している。さらに、この共通基盤に新しい機能とカスタマイズを加えることで、サーバー向けのハードウェアやユースケースをサポートしている。2015年1月 (2015-01)現在[update]、CoreOSは主にAlex Polvi、Brandon Philips、Michael Marineauによって積極的に開発されており、主要機能は安定版リリースとして利用できる。 Container Linuxは、ペイロードとなるアプリケーションを配布する方法としてパッケージマネージャーを提供せず、その代わりに、すべてのアプリケーションをコンテナー内で実行する必要がある。一つの制御ホストとして機能するContainer Linuxインスタンスは、そのベースとしてLinuxカーネルのOSレベル仮想化（英語版）の機能を使用することで、隔離されたLinuxシステムとして動作する複数のコンテナを作成・設定する。このようにして、Container Linuxでは、ハイパーバイザーや本格的な仮想マシンを提供するのではなく、複数の隔離されたユーザー空間（英語版）のインスタンスを用いることにより、コンテナ間のリソース（英語版）のパーティション分割を実現している。このアプローチはLinuxカーネルのcgroupsおよびnamespaces（英語版）の機能に依存しており、これらの機能は、ユーザー空間のプロセスに対して、リソース使用量（CPU、メモリ、ディスクI/Oなど）を制限、集計、隔離する機能を提供している。 当初、Container Linuxは、Dockerのみをコンポーネントとして使用して、抽象化とインターフェイスの追加レイヤをLinuxカーネルのOSレベル仮想化機能に提供し、異なる環境上でアプリケーションを実行可能にするコンテナ向けの標準化フォーマットを提供していた。2014年12月、CoreOSは、rkt（当初はRocketという名前だった）を公開し、サポートを開始した。これは、アプリケーションコンテナイメージの別の標準フォーマットであり、関連するコンテナのランタイム環境の定義、コンテナイメージの検索と取得のためのプロトコルとして、Dockerの代替となるものである。CoreOSは、アプリケーションコンテナイメージ（application container image、ACI）に必要とされる属性を説明する、いわゆるアプリコンテナ（app container、appc）の仕様を定める実装としてrktを提供している。2015年6月、CoreOSは、appcとACIを独立した委員会の主導で定める仕様として提供し、特定のベンダー・OSに依存しないコンテナ化標準のイニシアティブのOpen Container Initiative（OCI、当初はOpen Container ProjectまたはOCPと呼ばれていた）の一部とすることを発表した。 Container Linuxは、Gentoo Linuxのebuildスクリプトを使用してシステムコンポーネントの自動コンパイルを行い、 systemdをメインのinitシステムとして使用し、systemdと各種Container Linuxの内部メカニズムを密接に統合してさせている。 Container Linuxは、FastPatchと呼ばれるデュアルパーティションの枠組みを活用することにより、OSのアップデート時にも追加のセキュリティと信頼性を実現している。FastPatchでは、アップデートはシステム全体に対して実行され、初めにパッシブなセカンダリーのブートパーティションにインストールされ、再起動またはkexecの実行時に有効化されるようになっている。このアプローチにより、OSの特定の一部分のみがアップデートされることにより起こりうる問題を回避することができ、OSの安定であることが分かっているバージョンに簡単にロールバックできることが保証され、追加のセキュリティのためにブートパーティションごとに署名を行うことができるようになる。ルートパーティションとルートファイルシステムは自動的に利用可能なディスクサイズまでサイズ変更される。ルートパーティションは読み書き可能なストレージ空間を提供するが、OS自体は/usr/usrに読み込み専用でマウント（英語版）される。 アップデート適用時に一度にクラスタの一部のみが再起動することを保証し、デプロイされた実行中のアプリケーションがリソースを要求するのを防ぐために、CoreOSはContainer Linux向けにlocksmithと呼ばれる再起動マネージャを提供している。locksmithを利用すると、アップデートの最終ステップで再起動する際に、異なるアップデート戦略の中から1つを選ぶことができる。たとえば、同時に再起動できるクラスタのメンバー数を指定できる。内部では、locksmithはクラスタのメンバー上でlocksmithdデーモンを起動しており、locksmithctlコマンドラインユーティリティマネージャでパラメータを設定できる。LocksmithはGo言語で書かれており、Apache License 2.0ライセンスで配布されている。 で使用しているディストリビューションシステムのアップデートは、GoogleのオープンスースOmahaプロジェクトをベースとしている。Omahaは、ローリングアップデートのメカニズムを提供しており、XMLがベースのリクエスト・レスポンス（英語版）プロトコルがベースになっている。また、CoreOSは、クラスタ全体のアップデートを管理するためのCoreUpdateというウェブベースのデジタルダッシュボードも提供している。CoreUpdateで利用可能な操作には、カスタムのアップデートポリシーを共有する異なるグループにユーザーを所属させる機能や、クラスタ全体のContainer Linuxのバージョンを確認する機能、アップデートの停止と再開、アップデートログの記録の確認機能などがある。CoreUpdateはHTTPベースのAPIも提供しており、サードパーティのユーティリティやデプロイシステム（英語版）と統合することができる。 Container Linuxは、クラスタ内のすべてのコンピュータ上で動作し、動的な設定レジストリとして、etcdを提供している。これにより、様々な設定データを簡単かつ信頼性の高い方法でクラスタメンバー間で共有できる。 etcdに保存されたキーバリューデータは、Raftアルゴリズムを用いて自動的なマスター選出とコンセンサスが確立され、自動的に分散、複製が行われるため、保存されたデータのすべての変更がクラスタ全体に反映されるとともに、1つのクラスタメンバーが障害で失われても、データの損失が生じない冗長性が実現されている。設定の管理に加えて、etcdは自身と自身が提供するサービスを通知することにより、サービスディスカバリの機能も提供している。etcdとの通信は、公開されたRESTベースのAPIにより行われ、内部ではHTTPプロトコル上のJSONが使用されている。APIは直接使用することもできるし（たとえば、curlやwgetを使用して）、CoreOSが提供する専用のコマンドラインユーティリティのetcdctl経由で間接的に利用することもできる。etcdはKubernetesのソフトウェアとしても利用されている。 Container Linuxは、2017年まで、fleetと呼ばれるクラスタマネージャも提供しており、Container Linuxの別のsystemdインスタンスをクラスタレベルで管理することができた。しかし、2017年2月7日、Kubernetesがクラスタマネージャのデファクトスタンダードとなっていることから、1年後の2018年2月1日にfleetを廃止することが発表された。fleetdを使用すると、Container Linuxは別々のsystemdインスタンスを結びつけて分散化されたinit systemを構築することができ、クラスタ全体にetcdをデプロイできる。内部では、fleetdデーモンがローカルのsystemdインスタンスとD-Bus経由で通信しており、etcdのデプロイはsystemdの公開APIで行われる。fleetdにより、1つまたは複数のコンテナ（英語版）をクラスタ全体にデプロイすることが可能になり、さらに冗長化、フェイルオーバー、特定のクラスタメンバーへのデプロイ、コンテナ間の依存関係の定義、コンテナのグループ化デプロイなどの発展的なオプションが利用できる。fleetctlと呼ばれるコマンドラインユーティリティを用いて、この分散initシステムを設定・監視することができる。内部では、fleetdデーモンとの間でHTTP上のJSONベースのAPIを用いて通信を行っており、このAPIは直接利用することもできる。クラスタメンバーのローカルで使用した場合は、fleetctlはローカルのfleetdインスタンスとUnixドメインソケットで通信し、外部のホストからはSSHの公開鍵で認証されたSSHトンネリングが使われる。 これらすべてのデーモンとコマンドラインユーティリティ（etcd、etcdctl、fleetd、fleetctl）は、Go言語で書かれており、Apache License 2.0ライセンスで配布されている。 専用のハードウェアで実行する場合には、Container Linuxはハードディスクドライブ（HDD）やソリッドステートドライブ（SSD）などのローカルディスクに永続的にインストールされる。リモートでブートする場合には、Preboot Execution Environment (PXE) in general, or iPXEを使用してネットワーク越しにブート（英語版）される。CoreOSはさまざまなハードウェア仮想化プラットフォームをサポートしており、Amazon EC2、DigitalOcean（英語版）、Google Compute Engine（英語版）、Microsoft Azure、OpenStack、QEMU/KVM、Vagrant、VMwareに対応している 。Container Linuxは、CoreOS向け「template」があるCitrix XenServerにもインストールできる。 Container Linuxは、Tectonicと呼ばれる商業ディストリビューションにデプロイすることもでき、追加コンポーネントとしてGoogleのKubernetesをクラスタ管理ユーティリティとして統合している。2015年4月 (2015-04)現在[update]、Tectonicはベータ版として一部の顧客にのみ提供される予定である。さらに、CoreOSは主にKubernetesとの統合のためのオーバーレイ・ネットワークを実装するコンポーネントとしてFlannelを提供している。 2015年2月 (2015-02)現在[update]、Container Linuxはx86-64アーキテクチャのみをサポートしている。 2018年1月、CoreOS, Inc.はレッドハットに買収され、その後、レッドハットはCoreOSのContainer Linuxを同社のProject Atomicと統合し、新しいOSであるRed Hat CoreOSを開発することを発表した。Project Atomicには、Fedora ProjectのFedora CoreOSに関係するオープンソースコミュニティがあり、双方の技術を取り込んでいる。 2018年3月6日、Kinvolk GmbHはCoreOS Container Linuxの派生OSとして、Flatcar Linuxを発表した。Flatcar Linuxは、アップストリームのCoreOS alpha/beta/stableチャンネルのリリースを追跡しており、2019年5月には、実験的なEdgeリリースチャンネルが追加された。 2014年、LWN.netはCoreOSを以下のように評価している。 大規模な分散システム—主な例としてはウェブアプリケーション—を統合しようとしている人にとっては、CoreOSは興味深い機能を多数備えているように見えるだろう。これらの機能により、この種のアプリケーションで必要な需要に応じたスケールの拡大や縮小が可能になり、アップグレードが頭痛の種にならないような安定したプラットフォームを提供できるようになるはずだ。「大規模なサーバーのデプロイ」にとって、CoreOSや同じような特徴を持つOSは、未来を先取りしているように思える。 [脚注の使い方] ^ “coreos/manifest: Release v94.0.0 (Container Linux v94.0.0)”. github.com (10月3日2013年). 9月22日2014年閲覧。 ^ “CoreOS Container Linux Release Notes # Stable channel”. coreos.com (5月22日2020年). 1月17日2021年閲覧。 ^ “CoreOS Container Linux Release Notes # Alpha channel”. coreos.com (5月22日2020年). 1月17日2021年閲覧。 ^ a b c d Timothy Prickett Morgan (2月15日2015年). “CoreOS Hyperscales Linux By Making It Invisible”. nextplatform.com. 6月14日2015年閲覧。 ^ “CoreOS Pilot Agreement”. coreos.com (3月13日2014年). September 12, 2014時点のオリジナルよりアーカイブ。3月26日2014年閲覧。 ^ “coreos/etcd: etcd/LICENSE at master”. github.com (7月31日2013年). 3月26日2014年閲覧。 ^ “CoreOS Linux is now Container Linux”. coreos.com. 2016年12月20日閲覧。 ^ a b c d e f Libby Clark (9月9日2013年). “Brandon Philips: How the CoreOS Linux Distro Uses Cgroups”. Linux.com. 2月13日2014年閲覧。 ^ a b “CoreOS – a new approach to Linux-based server systems”. itnews2day.com (8月22日2013年). 3月26日2014年閲覧。 ^ a b c d e “CoreOS documentation: Using CoreOS”. coreos.com. 2月13日2014年閲覧。 ^ “Red Hat、CoreOSを買収、Kubernetesとコンテナ技術における リーダーシップを拡大”. redhat.com (2月15日2018年). 1月17日2021年閲覧。 ^ “Fedora CoreOS Documentation :: Fedora Docs”. fedoraproject.org (1月17日2021年). 1月17日2021年閲覧。 ^ “End-of-life announcement for CoreOS Container Linux”. coreos.com (5月27日2020年). 1月17日2021年閲覧。 ^ a b “Building development images: Updating portage-stable ebuilds from Gentoo”. coreos.com. 5月24日2016年閲覧。 ^ a b “Distributions based on Gentoo”. gentoo.org (3月25日2016年). 5月24日2016年閲覧。 ^ Brian Harrington (7月8日2014年). “CoreOS: Anatomy of a CoreOS update”. youtube.com. Rackspace. 7月25日2014年閲覧。 ^ Alex Polvi (7月25日2014年). “CoreOS Stable Release”. coreos.com. 8月28日2014年閲覧。 ^ “CoreOS Release Notes”. coreos.com. 8月28日2014年閲覧。 ^ Brandon Philips (1月28日2015年). “etcd 2.0 Release – First Major Stable Release”. coreos.com. 6月14日2015年閲覧。 ^ Jonathan Corbet (10月29日2007年). “Notes from a container”. LWN.net. 7月3日2016年閲覧。 ^ Jake Edge (11月19日2014年). “Control group namespaces”. LWN.net. 7月3日2016年閲覧。 ^ a b “CoreOS documentation: Using Docker with CoreOS”. coreos.com. 6月14日2015年閲覧。 ^ “Docker 0.9: Introducing execution drivers and libcontainer”. docker.com (3月10日2014年). 1月20日2015年閲覧。 ^ Libby Clark (1月30日2015年). “CoreOS Co-Founder Alex Polvi Talks Containers, Rocket vs. Docker, and More”. Linux.com. 6月14日2015年閲覧。 ^ Charles Babcock (2月20日2015年). “Rocket Containers: How CoreOS Plans To Challenge Docker”. informationweek.com. 6月14日2015年閲覧。 ^ Alex Polvi (12月1日2014年). “CoreOS is building a container runtime, rkt”. coreos.com. 6月14日2015年閲覧。 ^ a b Josh Berkus (2月4日2015年). “New etcd, appc, and Rocket releases from CoreOS”. LWN.net. 6月22日2015年閲覧。 ^ a b Josh Berkus (5月13日2015年). “CoreOS Fest and the world of containers, part 1”. LWN.net. 6月22日2015年閲覧。 ^ Nathan Willis (12月3日2014年). “The Rocket containerization system”. LWN.net. 6月22日2015年閲覧。 ^ McAllister, Neil (2015年6月22日). “Docker and chums unveil standards org for software containers”. The Register. 2015-06-22. https://www.theregister.co.uk/2015/06/22/open_container_project/ 2017年1月19日閲覧. "Announced at the DockerCon conference in San Francisco on Monday, the Open Container Project (OCP) will maintain and develop a common container runtime and image format based in part on code and specs donated by Docker."  ^ Frederic Lardinois (6月22日2015年). “Docker, CoreOS, Google, Microsoft, Amazon and others come together to develop common container standard”. TechCrunch. https://techcrunch.com/2015/06/22/docker-coreos-google-microsoft-amazon-and-others-agree-to-develop-common-container-standard/ 6月24日2015年閲覧。  ^ “Industry Leaders Unite to Create Project for Open Container Standards”. opencontainers.org (6月22日2015年). August 13, 2015時点のオリジナルよりアーカイブ。6月24日2015年閲覧。 ^ Neil McAllister (7月22日2015年). “Open Container Project renames, says standard is just weeks away: Linux Foundation, Docker and friends opt for Open Container Initiative”. The Register. 1月29日2016年閲覧。 ^ “CoreOS documentation: Using systemd with CoreOS”. coreos.com. February 14, 2014時点のオリジナルよりアーカイブ。2月13日2014年閲覧。 ^ a b “CoreOS documentation: Updates & patches”. coreos.com. February 14, 2014時点のオリジナルよりアーカイブ。2月27日2015年閲覧。 ^ a b Phil Whelan (8月28日2013年). “Alex Polvi Explains CoreOS”. activestate.com. February 24, 2015時点のオリジナルよりアーカイブ。5月7日2015年閲覧。 ^ “CoreOS documentation: Adding disk space to your CoreOS machine”. coreos.com. 2月27日2015年閲覧。 ^ Alex Polvi (3月27日2014年). “Major Update: btrfs, Docker 0.9, add users, writable /etc, and more!”. coreos.com. 2月27日2015年閲覧。 ^ “Simple Introduction to CoreOS with CEO Alex Polvi and CTO Brandon Philips”. centurylinklabs.com (6月6日2014年). 6月22日2015年閲覧。 ^ “CoreOS documentation: Update strategies”. coreos.com. 4月17日2015年閲覧。 ^ “coreos/locksmith: locksmith/README.md at master”. github.com (2月1日2015年). 4月17日2015年閲覧。 ^ “coreos/locksmith: locksmith/LICENSE at master”. github.com (1月19日2014年). 4月17日2015年閲覧。 ^ “Omaha – software installer and auto-updater for Windows”. code.google.com. 10月11日2014年閲覧。 ^ “Omaha Overview”. omaha.googlecode.com (9月23日2009年). May 6, 2009時点のオリジナルよりアーカイブ。10月11日2014年閲覧。 ^ “Package omaha”. godoc.org (6月24日2014年). 7月4日2014年閲覧。 ^ “CoreOS documentation: CoreUpdate”. coreos.com. 7月4日2014年閲覧。 ^ Mark Moudy (5月16日2014年). “CoreOS + Docker Development Environment Demo”. github.com. 4月16日2015年閲覧。 ^ a b Jonathan Corbet (10月22日2014年). “Etcd and fleet”. LWN.net. 6月22日2015年閲覧。 ^ “CoreOS documentation: Using etcd with CoreOS”. coreos.com. 2月13日2014年閲覧。 ^ “CoreOS documentation: Getting started with etcd”. coreos.com. 2月13日2014年閲覧。 ^ Brandon Philips (1月15日2014年). “etcd @ GoSF”. speakerdeck.com. 2月13日2014年閲覧。 ^ Wood. “Container orchestration: Moving from fleet to Kubernetes”. coreos..com. CoreOS. 2019年11月11日閲覧。 ^ Justin Ellingwood (9月12日2014年). “How To Use Fleet and Fleetctl to Manage your CoreOS Cluster”. digitalocean.com. 6月22日2015年閲覧。 ^ “CoreOS documentation: Launching containers with fleet”. coreos.com. 4月3日2014年閲覧。 ^ “CoreOS documentation: Using the client”. coreos.com. 4月3日2014年閲覧。 ^ “coreos/fleet: fleet/README.md at master”. github.com (2月18日2014年). 4月3日2014年閲覧。 ^ “coreos/fleet: fleet/Documentation/deployment-and-configuration.md at master (Deploying fleet)”. github.com (4月14日2015年). 4月17日2015年閲覧。 ^ “coreos/fleet: fleet/Documentation/api-v1.md (fleet API v1)”. github.com (10月29日2014年). 4月17日2015年閲覧。 ^ “coreos/fleet: fleet/LICENSE at master”. github.com (2月6日2014年). 4月3日2014年閲覧。 ^ “CoreOS documentation: Installing CoreOS to disk”. coreos.com. 2月13日2014年閲覧。 ^ “CoreOS documentation: Booting CoreOS via PXE”. coreos.com. 2月13日2014年閲覧。 ^ “CoreOS documentation: Booting CoreOS via iPXE”. coreos.com. 2月13日2014年閲覧。 ^ Alex Crawford (9月5日2014年). “CoreOS Image Now Available On DigitalOcean”. coreos.com. 9月5日2014年閲覧。 ^ Jack Clark (5月23日2014年). “Google brings futuristic Linux software CoreOS onto its cloud”. The Register. 5月26日2014年閲覧。 ^ Alex Crawford (10月20日2014年). “CoreOS Now Available On Microsoft Azure”. coreos.com. 10月22日2014年閲覧。 ^ Steven J. Vaughan-Nichols (4月6日2015年). “CoreOS is bringing Google's Kubernetes to the enterprise”. ZDNet. http://www.zdnet.com/article/coreos-is-bringing-googles-kubernetes-to-the-enterprise/ 4月29日2015年閲覧。  ^ Eugene Yakubovich (8月28日2014年). “Introducing flannel: An etcd-backed overlay network for containers”. coreos.com. 6月22日2015年閲覧。 ^ “Tutorial on using CoreOS Flannel for Docker”. slideshare.net (November 2014). 6月22日2015年閲覧。 ^ Rosoff (2018年1月30日). “Red Hat pays $250 million for CoreOS, a start-up that sells Google-developed technology” (英語). CNBC. 2019年6月6日閲覧。 ^ “Fedora CoreOS, Red Hat CoreOS, and the future of Container Linux | CoreOS”. coreos.com. 2019年6月6日閲覧。 ^ “Announcing the Flatcar Linux project | Kinvolk”. kinvolk.io. 2019年6月6日閲覧。 ^ “Introducing the Flatcar Linux Edge Channel | Kinvolk”. kinvolk.io. 2019年6月6日閲覧。 ^ CoreOS: A different kind of Linux distribution [LWN.net] ポータル FLOSS ポータル コンピュータ アプリケーションの仮想化 – アプリケーションソフトウェアを実行するOSに対してカプセル化するソフトウェア技術 アプリケーション仮想化ソフトウェアの比較（英語版） – さまざまなポータブル言語とスクリプト言語の仮想マシンの比較 プラットフォーム仮想化ソフトウェアの比較（英語版） – 物理コンピューター全体をエミュレートする、ざまなエミュレーターやハイパーバイザーの比較 LXC（Linuxコンテナー） – Linuxが制御する1つのホスト上で、複数の隔離されたLinuxシステム（コンテナ）を実行するための環境 OSレベル仮想化（英語版） – 複数の隔離されたユーザー空間インスタンスに対するOSカーネルのサポートに基づいている Software as a Service (SaaS)  – ソフトウェアを中央でホストしてサブスクリプションベースでライセンスを供与するタイプのソフトウェアのライセンスと配信のモデル 仮想化 – コンピュータハードウェアプラットフォーム、オペレーティングシステム、ストレージデバイスなどの仮想バージョンを提供する一般的な概念 ウィキメディア・コモンズには、Container Linuxに関連するカテゴリがあります。 Official CoreOS and Tectonic websites, and GitHub source code repositories: CoreOS - GitHub, etcd - GitHub, fleet - GitHub, rkt - GitHub and CoreOS-overlay - GitHub Container Linux - DistroWatch First glimpse at CoreOS, September 3, 2013, by Sébastien Han CoreOS: Linux for the cloud and the datacenter, ZDNet, July 2, 2014, by Steven J. Vaughan-Nichols What's CoreOS? An existential threat to Linux vendors, InfoWorld, October 9, 2014, by Matt Asay Understanding CoreOS distributed architecture, March 4, 2015, a talk to Alex Polvi by Aaron Delp and Brian Gracely CoreOS fleet architecture, August 26, 2014, by Brian Waldon et al. Running CoreOS on Google Compute Engine, May 23, 2014 CoreOS moves from Btrfs to Ext4 + OverlayFS, Phoronix, January 18, 2015, by Michael Larabel Containers and persistent data, LWN.net, May 28, 2015, by Josh Berkus