RHEL、Rocky、AlmaLinux に LXC (Linux コンテナ) をインストールする
LXD は、コンテナ内または仮想マシンとして実行される Linux システムに没入感を提供する、次世代のコンテナおよび仮想マシン マネージャーであると説明されています。
幅広いストレージ バックエンドとネットワーク タイプをサポートする、膨大な数の Linux ディストリビューションのイメージを提供します。また、イメージを個々の PC/ラップトップ、さらにはクラウド インスタンスにインストールするオプションも提供します。
LXD では、3 つの方法を使用してコンテナと VM を管理できます。 lxc クライアントやコマンドライン ツール、REST API、さらにはサードパーティの統合も活用できます。
LXDの特徴
注目すべき LXD の機能は次のとおりです。
- LXD はイメージベースであり、さまざまな Linux ディストリビューションに対応したイメージが含まれています。
- セキュリティを最優先にして構築されています。
- コンテナと対話するための REST API と lxc コマンドライン ツールを提供します。
- 幅広いストレージ バックエンド、ストレージ ボリューム、ストレージ プールのサポートを提供します。
- ネットワーク管理は、ブリッジ ネットワークとクロスホスト トンネルの作成を通じて行われます。
- CPU、RAM、ディスク使用量、ブロック I/O、カーネル リソースなどのリソースの高度な制御。
- 柔軟性と拡張性 – PC にコンテナを展開し、さまざまなノード上で数千のコンテナを集約できるクラスターを構成できます。
LXCとは何ですか?
LXD が提供する lxc コマンドライン クライアント ツールと混同しないでください。LXC (Linux コンテナ) は強力な API やその他のツールを使用して、ユーザーが単一ホスト内でコンテナと仮想マシンをシームレスに作成および管理できるようにする、一般的な OS レベルの仮想化テクノロジです。これは、テンプレート、ツール言語、ライブラリ バインディングで構成されます。
LXCの特徴
LXC は、次のカーネル機能を利用してプロセスを処理します。
- カーネル名前空間: pid、mount、uts network、および user。
- CGroups (コントロール グループ)。
- Chroots – pivot_root を使用します。
- セコンプポリシー。
- SELinux および Apparmor プロファイル。
Linuxcontainers.org は、LXD と LXC の両方を支える包括的なプロジェクトです。その目的は、Linux コンテナ テクノロジ向けのディストリビューションおよびベンダー中立のプラットフォームを提供することです。
前置きはこれくらいにして、CentOS、Rocky Linux< などの RHEL ベースの Linux ディストリビューションで LXC コンテナを作成および管理する方法を説明します。 と AlmaLinux。
要件
最小限のインストールで動作する Linux オペレーティング システム:
- RHEL Linuxのインストール
- CentOS Linuxのインストール
- Rocky Linuxのインストール
- AlmaLinuxのインストール
ステップ 1: SELinux を許可モードに設定する
まず、SELinux を構成し、許可に設定することから始めます。ただし、その前に、次のようにシステム パッケージを更新しましょう。
sudo dnf update
SELinux を許可に設定するには、次のコマンドを実行します。
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
これを有効にするには、サーバーを再起動します。
sudo reboot
そしてSELinuxの状態を確認します。
getenforce
ステップ 2: EPEL リポジトリをインストールする
EPEL は Fedora プロジェクト のリポジトリであり、RedHat Enterprise Linux およびその他の RHEL ベースのディストリビューション用の高品質パッケージのセットを提供します。
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: スナップをインストールして有効にする
RHEL 8 に LXD をインストールする最も簡単な方法は、スナップ パッケージとしてインストールすることです。まずは、 次のようにスナップをインストールしましょう。
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: LXD Containerization Manager をインストールする
スナップから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}
ここでは、Debian 10 の tec-container1 と Rocky Linux 8 の 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 コマンドライン ユーティリティ ツールを使用してコンテナを作成および管理する方法について詳しく説明しました。このガイドが役に立ったと信じています。