RHEL、Rocky、AlmaLinuxにLXC(Linuxコンテナー)をインストールする


LXDは、コンテナー内または仮想マシンとして実行されるLinuxシステムに没入型を提供する次世代のコンテナーおよび仮想マシンマネージャーとして説明されています。

さまざまなストレージバックエンドとネットワークタイプをサポートする、膨大な数のLinuxディストリビューションのイメージを提供します。また、個々のPC /ラップトップ、さらにはクラウドインスタンスにイメージをインストールするオプションも提供します。

LXDを使用すると、3つの方法を使用してコンテナーとVMを管理できます。 lxcクライアントまたはコマンドラインツール、REST API、さらにはサードパーティの統合を活用できます。

注目すべきLXD機能は次のとおりです。

  • LXDはイメージベースであり、さまざまなLinuxディストリビューション用のイメージを備えています。
  • セキュリティを最優先に構築されています。
  • コンテナとやり取りするためのRESTAPIとlxcコマンドラインツールを提供します。
  • さまざまなストレージバックエンド、ストレージボリューム、ストレージプールをサポートします。
  • ネットワーク管理は、ブリッジネットワークとクロスホストトンネルの作成を通じて行われます。
  • CPU、RAM、ディスク使用量、ブロックI/O、カーネルリソースなどのリソースの高度な制御。
  • 柔軟でスケーラブル– PCにコンテナーをデプロイし、さまざまなノードで数千のコンテナーを集約できるクラスターを構成できます。

LXDが提供するlxcコマンドラインクライアントツールと混同しないでください。LXC(Linux Container)は、強力なAPIやその他のツールを使用して、ユーザーがコンテナーや仮想マシンをシームレスに作成および管理できるようにする、人気のあるOSレベルの仮想化テクノロジーです。単一のホスト。テンプレート、ツール言語、およびライブラリバインディングで構成されています。

LXCは、次のカーネル機能を利用してプロセスを処理します。

  • カーネル名前空間:pid、mount、uts network、およびuser。
  • CGroups(コントロールグループ)。
  • Chroots –pivot_rootを使用します。
  • Seccompポリシー。
  • SELinuxおよびApparmorプロファイル。

Linuxcontainers.orgは、LXDとLXCの両方の背後にある包括的なプロジェクトです。その目的は、Linuxコンテナーテクノロジー用のディストリビューションおよびベンダーに依存しないプラットフォームを提供することです。

その紹介が邪魔にならないように、CentOS、Rocky Linux、AlmaLinuxなどのRHELベースのLinuxディストリビューションでLXCコンテナーを作成および管理する方法を示します。

最小限のインストールで動作するLinuxオペレーティングシステム:

  • RHELLinuxのインストール
  • CentOSLinuxのインストール
  • RockyLinuxのインストール
  • AlmaLinuxのインストール

ステップ1:SELinuxをパーミッシブモードに設定する

すぐに、SELinuxを構成し、permissiveに設定することから始めます。ただし、その前に、システムパッケージを次のように更新しましょう。

$ sudo dnf update

SELinuxをpermissiveに設定するには、次のコマンドを実行します。

$ sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config

これを有効にするには、サーバーを再起動します。

$ sudo reboot

そして、SELinuxのステータスを確認します。

$ getenforce

ステップ2:EPELリポジトリをインストールする

EPELは、RedHatEnterpriseLinuxおよびその他のRHELベースのディストリビューション向けの高品質パッケージのセットを提供するFedoraProjectのリポジトリです。

$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
OR
$ sudo yum install epel-release

ステップ3:カーネルパラメーターを追加する

LXDをインストールする前に、いくつかの追加パラメーターが必要です。したがって、rootユーザーに切り替えます。

$ su -

そして、次のようにパラメータを追加します。

$ grubby --args="user_namespace.enable=1" --update-kernel="$(grubby --default-kernel)"
$ grubby --args="namespace.unpriv_enable=1" --update-kernel="$(grubby --default-kernel)"
$ echo "user.max_user_namespaces=3883" | sudo tee -a /etc/sysctl.d/99-userns.conf

パラメータを設定したら、次に進んでスナップを有効にします。

ステップ4:スナップをインストールして有効にする

LXDをRHEL8にインストールする最も簡単な方法は、スナップパッケージとしてインストールすることです。ただし、最初に、次のようにスナップをインストールしましょう。

$ sudo dnf install snapd

これにより、示されているように、他のPython依存関係と一緒にsnapdデーモンまたはサービスがインストールされます。

スナップを取り付けた状態で、次に進み、メインスナップ通信ソケットを有効にします。

$ sudo systemctl enable --now snapd.socket

さらに、/ var/lib/snapd /snapから/snapへのシンボリックリンクを作成して、クラシックサポートを有効にします。

$ sudo ln -s /var/lib/snapd/snap  /snap

スナップパスを更新するには、システムを再起動します。

$ sudo reboot

ステップ5:LXDContainerizationManagerをインストールする

LXDをスナップからインストールする方法は2つあります。図のように、最新バージョンのLXDをインストールできます。

$ sudo snap install —-classic lxd

または、次のように最新の安定したLTSバージョンをインストールすることもできます。

$ sudo snap install lxd --channel=4.0/stable

sudoユーザーに切り替えずにlxcコマンドを実行できるようにするには、現在ログインしているユーザーをlxdグループに追加します。

$ sudo usermod -aG lxd $USER

ユーザーが属するすべてのグループを一覧表示して、ユーザーがlxdグループに追加されていることを確認します。

$ groups tecmint

次に、次のようにnewgrpコマンドを実行します。

$ newgrp lxd

このコマンドは、ログインセッション中に現在のグループIDを変更します。現在のグループIDをlxdである名前付きグループに設定します。

ステップ6:LXD環境を初期化する

LXDコンテナーの作成と管理を開始する前に、コマンドを実行してLXD環境を初期化する必要があります。

$ lxc init

以下は、環境をセットアップするための一連のプロンプトです。デフォルトは問題なく機能しますが、独自の設定を自由に指定してください。

バックエンドとしてlvmオプションを使用してtec-poolというストレージプールを作成しました。

構成したばかりのLXD環境を確認するために、使用できるコマンドがいくつかあります。たとえば、デフォルトのLXDプロファイルを表示するには、次のコマンドを実行します。

$ lxc profile show default

ネットワークアダプタとIPv4およびIPv6アドレスを表示するには、次のコマンドを実行します。

$ lxc network list

次のように、さらに絞り込んで、lxdbr0インターフェイスに関するより詳細な情報を表示できます。

$ lxc network show lxdbr0

ストレージプールを確認することもできます。

$ lxc storage list

ストレージプールに関する複雑な詳細をさらに取得できます。

$ lxc storage show tec-pool

実行中のlxcコンテナーを一覧表示するには、次のコマンドを実行します。

$ lxc list

現時点では、実行中のコンテナはまだありません。したがって、列ラベルのみを含む空のテーブルが表示されます。

ステップ7:ビルド済みのLXCコンテナーイメージを一覧表示する

Dockerと同様に、LXCプラットフォームは、コンテナーを作成できるビルド済みイメージのリポジトリーを提供します。仮想マシンを含むすべてのオペレーティングシステムのすべてのビルド済みイメージを一覧表示するには、次のコマンドを実行します。

$ lxc image list images: 

これにより、すべてのオペレーティングシステムのコンテナイメージと仮想マシンの膨大なリストが作成されます。特定のLinuxディストリビューションに絞り込むには、次の構文を使用します。

$ lxc image list images: grep -i os-type

たとえば、Rocky Linuxで利用可能なイメージを検索するには、次のコマンドを実行します。

$ lxc image list images: grep -i rocky

Debianイメージを検索している場合は、次のコマンドを実行します。

$ lxc image list images: grep -i debian

ステップ8:LXCコンテナーを起動する

lxcコンテナーを起動するには、次の構文を使用します。

$ lxc launch images:{distro}/{version}/{arch} {container-name-here}

ここでは、Debian10のtec-container1とRockyLinux8のtec-container2の2つのコンテナーを起動します。

$ lxc launch images:debian/10/amd64 tec-container1
$ lxc launch images:rockylinux/8/amd64 tec-container2 

lxcコンテナーを一覧表示するには、次のコマンドを実行します。

$ lxc list

出力には、コンテナーに関する多数の情報が表示されます。これには、コンテナーの名前、状態(実行中か停止中か)、IPv4およびIPv6アドレス、タイプ(コンテナーまたは仮想マシン)、およびスナップショットの数が含まれます。

実行中のコンテナーのみを一覧表示するには、次のコマンドを実行します。

$ lxc list | grep -i running

同様に、停止したコンテナの場合は、次を実行します。

$ lxc list | grep -i stopped

次のコマンドを使用して、実行中のプロセス、CPUとメモリの使用率、帯域幅などのコンテナの情報とメトリックを調べて、いくつか言及することができます。

$ lxc info tec-container1 

ステップ9:LXCコンテナへのシェルアクセスを取得する

次の構文を使用して、コンテナへのbashアクセスを取得できます。

$ lxc exec container-name  name-of-the-shell

tec-container1へのシェルアクセスを取得するには、次のコマンドを実行します。

$ lxc exec tec-container1 bash

シェルアクセスを取得したら、次のようにシステムの更新を含む一般的なシェルコマンドを実行することにより、rootユーザーとしてコンテナとの対話を開始できます。

$ apt update

コンテナを終了するには、次のコマンドを実行します。

$ exit

または、次の形式を使用して、シェルにアクセスせずにコンテナで直接コマンドを実行することもできます。

$ lxc exec container-name command

たとえば、次のコマンドを実行してパッケージリストを更新し、Debianコンテナで実行されているOSのバージョンを確認し、日付を確認できます。

$ lxc exec tec-container1 apt update
$ lxc exec tec-container1 cat /etc/debian_version
$ lxc exec tec-container1 date

ステップ10:ファイルをLXCコンテナーにプル/プッシュする

実行できるもう1つの操作は、コンテナーとの間でファイルを転送することです。これを示すために、LXDコンテナに新しいディレクトリを作成し、そこに移動します。

# mkdir data && cd data

次に、サンプルファイルを作成し、いくつかのデータを追加します。そのために、vimエディターでサンプルファイルを作成します

# vim file1.txt

次に、サンプルテキストを入力してファイルを保存します。

Hello World, Welcome to LXD containers.

コンテナからローカルホストシステムにファイルをプルするには、次の構文を使用します。

$ lxc file pull {container-name}/{path/to/file} {/path/to/local/dest}

この場合、コマンドは次のようになります。

$ lxc file pull tec-container2/root/data/file1.txt /home/tecmint

ローカルディレクトリからコンテナにファイルをプッシュまたはコピーするには、次の構文を使用します。

$ lxc file push {/path/to/file} {container-nane} /path/to/dest/dir/

この場合、ホームディレクトリにfile2.txtというサンプルファイルがあり、tec-container2コンテナの/ root /data/パスにコピーされています。

$ lxc file push /home/tecmint/file2.txt tec-container2/root/data/

コンテナ内のファイルの存在を確認するために、次のコマンドを実行します。

$ lxc exec tec-container2 ls /root/data

ステップ11:LXCコンテナを停止/開始/再起動して削除する

lxcコマンドラインユーティリティを使用すると、コンテナの停止、開始、再起動、削除などのコンテナ管理タスクを実行できます。

lxcコンテナーを停止するには、次の構文を使用します。

$ lxc stop container-name

たとえば、tec-container1を停止するには、次のコマンドを実行します。

$ lxc stop tec-container1

lxcコンテナーを起動するには、次の構文を使用します。

$ lxc start container-name

たとえば、tec-container1を起動するには、次のコマンドを実行します。

$ lxc start tec-container1

両方のlxcコンテナーを再起動するには、次のコマンドを実行します。

$ lxc restart tec-container1
$ lxc restart tec-container2

lxcコンテナーを削除するには、最初にコンテナーを停止してから削除する必要があります。たとえば、削除するには、次のコマンドを実行します。

$ lxc stop tec-container1
$ lxc delete tec-container1

または、図のようにこれら2つのコマンドを組み合わせることができます。

$ lxc stop tec-container1 && lxc delete tec-container1

ステップ12:LXCコマンドラインオプションに関するヘルプを取得する

LXCが提供する他のコマンドオプションのヘルプを表示するには、次のコマンドを実行するだけです。

$ lxc --help
OR
$ lxc command --help e.g
$ lxc file --help

これは、LXDコンテナーと、lxcコマンドラインユーティリティツールを使用してそれらを作成および管理する方法について深く掘り下げたものです。このガイドがお役に立てば幸いです。