GNU/Linux >> Linux の 問題 >  >> Linux

Linuxコンテナー(LXC)について知っておくべきことすべて

クラウドの蜂起以来、マイクロサービスは着実に人気を博しています。 AmazonやNetflixのような企業は、クラウドプラットフォームを使用して、最も需要の高いサービスを提供しています。コンテナは、このようなクラウドネイティブアプリケーションの中核に位置します。コンテナーは、マイクロサービスを容易にし、優れたスケーリングや迅速な展開などの利点を提供する分離された環境です。 VMwareのような従来のハイパーバイザーベースの仮想マシンと、DockerやLinux Containers(LXC)のようなOSレベルの仮想化サービスには大きな違いがあります。このガイドでは、Linux用の堅牢なシステムレベルの仮想化ツールであるLXCの実用的な知識を読者に提供します。

Linuxコンテナをマスターするためのオールインワンガイド

LXCについて詳しく知りたいLinux管理者の方には、これが最適なガイドです。この投稿では、LXCのさまざまな機能と利点、および他のコンテナー化サービスよりもこれを選択する場合について説明します。また、LXCをインストールして使い始める方法も紹介します。

Linuxコンテナ:機能と基本

では、LXCとは何ですか?すでに述べたように、これは、分離されたLinux環境のクラスターをスピンできる仮想化サービスです。ホストマシンのリソース負荷を軽減することにより、モノリシック仮想マシンに比べて多くの利点があります。これにより、クラウドネイティブソフトウェアの構築、テスト、および展開に最適です。 LXCは、他のOSレベルの仮想化ツールとは異なり、はるかに優れたLinux環境を提供します。

LXCは、ハイパーバイザーのような派手なリソース制御メカニズムを使用しません。むしろ、Linuxカーネルによって直接提供されるホスト封じ込め機能を利用します。依存する主要なコンポーネントは名前空間です およびcgroups 。これらは、バージョン2.6.24以降に最初にカーネルに追加されました。 cgroupsの主な設計原則 別名「コントロールグループ」 リソースの制限、優先順位付け、アカウンティング、および制御を提供することです。名前空間は、あるコンテナのプロセススペースとリソース情報を他のコンテナから隠す役割を果たします。

さらに、LXCには、Chrootsだけでなく、ApparmorやSELinuxプロファイルなどのさまざまなLinux強化ポリシーのサポートも組み込まれています。ほぼすべてのアーキテクチャで、クラウドで簡単に実行できます。さらに、ホストに関係なく、任意のLinuxディストリビューションを起動できます。つまり、ホストマシンがUbuntuを実行しているとしましょう。 LXCコンテナを使用して、このマシンでRedHatまたはCentOSを簡単に実行できます。

LXCは、他のコンテナ化サービスとは異なり、MacOSまたはWindowsを実行できません。これは、LXCコンテナーがホストカーネルに直接依存しているためです。したがって、これらのシステムの1つを必要とするアプリを実行する場合は、Dockerなどの別のプラットフォームを検討する必要があります。全体として、LXCは最小限のリソースオーバーヘッドで分離されたLinux環境を実行する必要がある人々に最も適しています。

LinuxコンテナとDocker

---

DevOpsチームで作業している場合、またはサイト信頼性の専門家として作業している場合は、Dockerに精通している必要があります。これは、最近のクラウドネイティブアプリで最も人気のあるコンテナ化プラットフォームです。したがって、LXCがDockerとどのように異なるのか、またはどちらが優れているのかを自問することができます。他のテクノロジーと同様に、答えはユースケースによってのみ異なります。それでも、これら2つの一般的な仮想化プラットフォームの違いについていくつかの洞察を示します。

Dockerは、LXCと比較して比較的新しいテクノロジーです。実際、初期の頃はLXCを内部で使用していました。ただし、Dockerはそれ以来長い道のりを歩んできており、独自のソリューションを実装しています。現在、DockerとLXCの主な違いは、デザインの選択です。 Dockerは、アプリケーションの構築に重点を置いています。一方、LXCはスタンドアロンのLinux仮想環境を提供するように設計されています。

開発者は通常、Dockerを使用して、新しいバージョンが到着するとすぐに破棄できるアプリを作成します。ただし、LXCを使用するアプリは永続的であることが意図されています。リモートのLinuxホストにSSH接続して環境を管理するのと同じように、LXCコンテナにSSH接続できます。 Dockerはこれを許可しておらず、デプロイメントとテストを管理するために専用のツールを使用することになります。最終的には、これらのいずれかを使用してクラウドアプリを構築できます。長期間維持する必要のあるアプリを構築する場合、通常、DockerではなくLXCを選択します。

LXC:コンポーネント

LXCランタイムは、一連の個々のコンポーネントで構成されています。これには、コアの liblxcが含まれます ライブラリ、コンテナを制御するための標準ツールのセット、さまざまな配布テンプレート、およびメインAPIのいくつかの言語バインディング。言語サポートには、Python、Go、Ruby、Lua、およびHaskellが含まれます。さらに、glibc、uclib、bionicなどのCライブラリなど、lxcがインストールされないハードな依存関係がいくつかあります。 LXCにはカーネルバージョン2.6.32も必要です 以上。

LXC:仮想化タイプ

Linuxコンテナー(LXC)は、特定のLinuxアプリケーションまたはネットワークサービスを実行するために使用できる名目上のオペレーティングシステム環境を提供します。ホストシステムのカーネルを直接使用するため、Linux以外のマシンでは実行できません。ユーザーは、Ubuntu、Fedora、Debian、Red Hat、CentOSなど、コンテナー用の多数の配布テンプレートから選択できます。

このタイプのコンテナの主な利点は、機密性の高いサービスを分離できることです。このタイプの仮想化を使用して、マルウェア分析、倫理的ハッキング、またはスタンドアロンホストを必要とするタスクのための環境を作成できます。ただし、これらは意図された目的にすぎません。したがって、Linuxマシンで通常実行する任意のサービスを実行することもできます。これは、Dockerのアプリケーション中心のアプローチとは対照的です。

LXC:ツールのサポート

堅牢なツールのサポートは、クラウドアプリケーションとスタンドアロンサービスの管理に不可欠です。 LXCは、従来のLinuxマシンとほぼ同じツールの豊富なセットを提供します。したがって、LXCコンテナーを管理するために、凝った管理ツールをインストールする必要はありません。 ssh、htop、iptables、LinuxCronジョブなどの標準のLinuxパッケージを使用できます。これにより、管理者はコンテナ化されたサービスを簡単に管理および自動化できます。

さらに、lxc cliは、LXCコンテナーをその場で作成、実行、管理するための包括的なツールセットを提供します。このガイドでは、これをインストールして基本的な機能を実行する方法を学習します。さらに、LXDツールチェーンを使用して追加のツールを使用することもできます。 LXDについては、次のセクションで詳しく説明します。全体として、LXCは、特殊なツールを提供しながら、標準のLinuxパッケージを使用するユーザーの能力を制限しません。

LXC:エコシステム

LXCエコシステムはLinuxのエコシステムと実質的に同じです。これにより、DockerやrktよりもLinuxコンテナーを使い始めるのが簡単になります。これらのコンテナにすべての標準Linuxパッケージをインストールして実行できるため、構成と保守が簡単です。したがって、KubernetesやSwarmforLXCなどの追加ツールが必要ないことがわかっても圧倒されないでください。

LXC:使いやすさ

Linux仮想マシンからコンテナ化されたプラットフォームに移行する主な理由の1つは、使いやすさの向上です。 LXCは、モノリシックパッケージをインストールする必要を完全になくすことで、これを一歩先に進めます。これにより、生産性が向上するだけでなく、ワークフローの処理がはるかに簡単になります。 LXCコンテナーには、軽量のリソースフットプリントを維持しながらシステム構成を処理する個別のinitシステムが付属しています。

さらに、スムーズなユーザーエクスペリエンスと成熟したエコシステムにより、LXCは従来の仮想マシンよりもはるかに優れた選択肢となっています。 LXCコンテナーを数分以内に起動し、その中でお気に入りのLinuxディストリビューションを実行できます。 Linuxアプリケーションのインストールと管理は、日常のコマンドをいくつか入力するのと同じくらい簡単です。そのため、まったく新しいツールセットを学びたくなくても、分離されたサービスを実行できるようにしたい場合は、LXCコンテナーが優れたオプションを提供します。

LXC:人気

LinuxコンテナがDockerが享受している人気に欠けていることは間違いありません。これは、WindowsまたはMac OS環境を実行できないことなど、いくつかの簡潔な設計上の選択に起因します。 DockerはLXCよりも軽量であるため、よりスケーラブルです。ただし、LXCはDockerよりもはるかに古く、そのコンテナーはDockerよりも大幅にスタンドアロンです。

さらに、LXCはマルウェア分析ラボなどのテスト環境の作成に非常に適しています。これにより、機密性の高いプロジェクトを定期的に行う上級ITプロフェッショナルの間で非常に人気があります。 LXCは、ライフサイクルの長いアプリを開発および保守する業界でも人気があります。全体として、Dockerやrktに比べると人気はありませんが、LXCはセキュリティを強化し、メンテナンスを容易にします。

LXC:パフォーマンス

すでに述べたように、仮想マシン上でコンテナ化されたプラットフォームを使用する主な理由の1つは、リソースの負荷が軽減されることです。これにより、はるかに優れたパフォーマンスが実現します。 LXCは、KVM(カーネルベースの仮想マシン)などの従来の仮想マシンの10倍以上の密度を提供します。これは、KVMゲストマシンと比較して、単一のLinuxホストで最大10倍のコンテナーを実行できることを意味します。

さらに、ハイパーバイザーは不要な遅延の問題も発生しやすくなります。 KVMと比較して、LXCはレイテンシーを57%に削減します。さらに、LXCコンテナーは、ハイパーバイザーに支えられた仮想エミュレーターよりもはるかに高速にロードされます。たとえば、LXCインスタンスはKVMと比較して94%速く起動します。ご覧のとおり、LXCはリソースの負荷と遅延を減らすことで、パフォーマンスを大幅に向上させます。また、読み込み時間が短いほど、スムーズなユーザーエクスペリエンスが提供されます。

LXC:統合

Linuxコンテナの主な利点の1つは、既存のソフトウェアと非常によく統合できることです。 LXCで従来のLinuxアプリケーションのみを使用することに限定されません。たとえば、LXCとDockerの両方を相互に補完するものとして使用できます。つまり、DockerマイクロサービスをLXCインスタンスでホストするだけで、より優れた分離とVMのような特性を提供できます。これにより、Dockerアプリの実行と管理が非常に便利になります。

さらに、Linuxネイティブアプリのみを実行するという制限もなくなります。そのため、WindowsまたはMac上にDockerマイクロサービスを簡単に作成し、Linuxコンテナー内から実行できます。これは本当にすてきな方法です。 LXCは、人気のあるクラウドコンピューティングプラットフォームであるOpenStackにも適しています。これは多くの業界リーダーによって使用されており、通常はIaaS(Infrastructure-as-a-Service)として展開されます。これにより、クラウドアプリの導入と管理がこれまでになく簡単になります。

LXC:移行

多くの管理者にとって移行は非常に重要であり、LXCはこの点で適切なサポートを提供します。 Linuxコンテナをあるホストから別のホストに移行する方法は複数あります。いくつかの制限はありますが、ライブマイグレーションを実行することもできます。コンテナを別のプラットフォームに移行する最も簡単な方法は、バックアップを取り、sshを介して物理的またはリモートでターゲットマシンに復元することです。

LXDAPIとSimplestreamsプロトコルを使用してコンテナーを移行することもできます。次のセクションでLXDについて説明します。ですから、これについてまだ知らなくても心配しないでください。移行プロセスの各ステップについては、あまり詳しく説明しません。おそらく、それについては別のガイドで説明します。今のところ、ライブマイグレーションに関する詳細については、UbuntuのWebサイトを参照してください。 LXCの主任開発者であるStéphaneGraberも、彼のWebサイトでLXCの移行について説明しました。

LXC:サポート

他の新しいプラットフォームと同様に、エンタープライズサポートは非​​常に重要です。ありがたいことに、LXCはこの点で一流のサービスを提供しています。そのため、個人目的またはビジネス目的のどちらでLinuxコンテナーを使用する場合でも、必要なときにいつでも追加のサポートを受けることが保証されます。さらに、LXCはCanonicalによって開発されているため、Ubuntuやその他の人気のあるオープンソースソフトウェアの背後にある会社です。したがって、サービスの品質は最高です。

Canonicalは、クラウドネイティブアプリケーションにLXCを使用したい企業向けの商用サポートも提供しています。ただし、UbuntuLTSリリースでも提供されます。 LXCバージョン2.0および3.0は長期サポートリリースです。したがって、すべてのプラットフォームで安定したコンテナが必要な場合は、これらのバージョンを使用する必要があります。他の配布テンプレートのサポートは通常、その特定の配布に依存します。

LXD:はじめに

LXCは、Linuxカーネルの組み込みの封じ込め機能へのアクセスを提供するユーザースペースインターフェイスとして始まりました。それはそのタスクの能力以上のものです。ただし、Dockerとその強力なエコシステムの出現により、開発者はより成熟したプラットフォームの開発に焦点を移しました。その結果がLXDです。これは、仮想マシンのようなエクスペリエンスを提供できるが、LXCコンテナーを使用できる堅牢なコンテナー管理システムです。

LXDは、Dockerイメージと同様にイメージに基づいています。また、サービスと簡単にやり取りするためのシンプルで強力なRESTAPIも実装しています。このAPIは、Unixソケットを使用してローカルシステムに接続し、標準のネットワークプロトコルを介してリモート接続することもできます。

LXDの機能には、セキュリティ、スケーラビリティ、ユーザーエクスペリエンス、ライブマイグレーション、高度なリソース制御、ネットワーク管理、ストレージ管理の向上などがあります。全体として、LXDはLXCを補完するものであり、代替品ではありません。内部でLXCを使用し、低レベルの詳細を単純に取り除きます。

LXCのインストールと使用

Linuxコンテナのメリットについて詳しく説明しました。さあ、手を汚して、この素晴らしいテクノロジーの使用を始めましょう。ただし、最初に、マシンにLXCをインストールする必要があります。

標準のLinuxマシンにLXCをインストールする方法を示しています。 LinuxにLXCをインストールし、CLIを使用してコンテナーを作成する方法を学習します。お気に入りのLinuxターミナルエミュレータを開いて、次のコマンドを入力するだけです。

$ sudo apt-get install lxc

これにより、ローカルマシンにlxcCLIがインストールされます。これが完了すると、コンテナのビルドと実行に必要なすべてのlxcコマンドと配布テンプレートにアクセスできるようになります。これで、次の簡単なコマンドを使用して基本的なコンテナを作成できます。

$ lxc-create -t <template> -n <container name>

-t フラグはテンプレートの名前を指定し、 -n フラグはコンテナの名前を指定します。このコマンドは、指定された配布テンプレートに基づいてコンテナーを作成します。以下のコマンドを使用して、使用可能なすべてのテンプレートのリストを表示します。

$ ls /usr/share/lxc/templates/

したがって、以下のコマンドは、Alpineテンプレートを使用してtest-containerという名前のコンテナーを作成します。

$ lxc-create -t alpine -n test-container

これにより、Alpineのインストールに必要なファイルがダウンロードされます。これにはしばらく時間がかかり、完了するとデフォルトのユーザーとパスワードが表示されます。これで、以下のコマンドを使用してコンテナを起動できます。

$ sudo lxc-start -n test-container

次のコマンドを使用して、デフォルトのユーザー名とパスワードを使用してこのコンテナに接続します。

$ sudo lxc-console -n test-container

これにより、実行中のコンテナに接続されます。このコンテナから切断するには、Ctrl + a+qキーの組み合わせを使用します。以下を使用して、rootとしてコンテナに直接接続することもできます。

$ sudo lxc-attach -n test-container

以下のコマンドを使用して、このコンテナの情報の一部を確認してください。

$ sudo lxc-info -n test-container

コンテナの名前と、その状態、PID、IPアドレス、メモリ使用量、CPU使用率などが表示されます。複数のコンテナを開始した場合は、以下を使用してそれらのリストを表示できます。

$ sudo lxc-ls

特定のコンテナを停止するには、次のコマンドを使用します。

$ sudo lxc-stop -n test-container

コンテナが不要になった場合は、システムからコンテナを削除することもできます。この目的には、以下のコマンドを使用してください。

$ sudo lxc-destroy -n test-container

これにより、テストコンテナとそのすべての構成がホスト環境から消去されます。使用可能な各コマンドの詳細については、LXCのドキュメントページにアクセスしてください。

LXDのインストールと使用

すでに説明したように、LXDはLXCのラッパーであり、追加機能のリストがあります。これは本質的に、Linuxコンテナ用のイメージベースの管理システムです。次のコマンドを使用してlxdをインストールできます。

$ sudo snap install lxd

LXDをインストールする場合は、LXCを個別にインストールする必要はありません。スナップパッケージとは別に、LXDはDebianパッケージとしても利用できます。ソースからインストールすることもできます。ここで、いくつかの構成作業を行う必要があります。 1つ目は、 / snap / bin / lxdを追加することです。 $ PATHへ あなたのシステムの。

$ echo 'export PATH="/snap/bin/lxd:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

ここでlxd構成を初期化する必要があります。これを行うには、次のLinuxターミナルコマンドを実行するだけです。

$ sudo lxd init

それはあなたにたくさんのオプションを尋ねます。今のところ、デフォルトのものを選択するだけです。構成が完了すると、最初のコンテナーを作成できるようになります。 LXDは、イメージを使用してコンテナインスタンスを作成します。次のコマンドは、使用可能なイメージリポジトリのリストを示しています。新しい画像ソースを追加したり、ローカルで構築したりできます。今のところ、公式のリモコンを使い続けます。

$ sudo lxc launch images:alpine

このコマンドは、高山の画像を使用してインスタンスを作成します。かなり軽量な画像で、私たちの目的に非常によく合います。必要に応じて他の画像を使用できます。これで、以下のコマンドを使用して、この新しく作成されたコンテナへのシェルを取得できます。

$ sudo lxc exec test-container /bin/sh

Ubuntuイメージに基づいてコンテナを作成した場合は、 / bin / shを置き換えます。 / bin / bashを使用 bashシェルを呼び出すため。コンテナイメージがサポートしている限り、標準のLinuxシェルを使用することもできます。シェルに接続せずに、コンテナ内でコマンドを実行することもできます。

$ sudo lxc exec test-container -- ip a

これにより、Linuxipコマンドを使用してコンテナインターフェイスのIPアドレスが出力されます。最後に、以下のコマンドを使用してテストコンテナを停止できます。

$ sudo lxc stop test-container

LXDは、Linuxコンテナー用の多くの追加コマンドをサポートしています。詳細については、LXDドキュメントページにアクセスしてください。

終わりの考え

Linuxコンテナーは、ハイパーバイザーなしで軽量VMを実装するための優れた方法です。これにより、それらは非常にスケーラブルでリソースに優しいものになります。さらに、LXCは、クラウドネイティブアプリケーションを開発するための実行可能なアプローチも提供します。 LXCコンテナーとDockerコンテナーの主な違いは、LXCはOS中心であるのに対し、Dockerコンテナーはアプリケーション中心であるということです。

したがって、パーソナルラボ環境または堅牢なクラウド対応サービスの構築を探している場合は、DockerやrktよりもLXCの方が優れたオプションであると考えてください。それでもなお、Dockerはアプリケーションの仮想化に最適です。したがって、Dockerを試してみたい場合は、日常のDockerコマンドに関するガイドを確認してください。


Linux
  1. Ubuntu13.04について知っておくべきことすべて

  2. Linux tmpディレクトリ:知っておくべきことすべて

  3. Linuxファイル圧縮:知っておくべきことすべて

  1. Linuxファイルのパーミッション:知っておくべきことすべて

  2. LinuxのSwappiness:知っておくべきことすべて

  3. Linuxファイルシステムについて知っておくべきことすべて

  1. LinuxChmodコマンドについて知っておくべきことすべて

  2. UbuntuDNSサーバーについて知っておくべきことすべて

  3. LinuxUbuntuサーバーについて知っておくべきことすべて