ハイパーバイザーの機能とコンテナ基盤の機能を併せ持つ「Proxmox Virtual Environment」で仮想マシンやコンテナを管理する方法を解説する本連載。今回は、LXCコンテナを作成したり、その中でアプリケーションコンテナを動かしたりする方法を紹介します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
ハイパーバイザーの機能とコンテナ基盤の機能を併せ持つ「Proxmox Virtual Environment」で仮想マシンやコンテナを管理する方法を解説する本連載。前回はProxmox VE上に仮想マシンを作成し、サーバOSを構築する方法を解説しました。
今回は、Proxmox VEで仮想環境を作成するもう一つの方法であるLXCコンテナを作成する方法を解説するとともに、仮想マシンとの違いを整理します。一般的に「コンテナ」と聞くと、「DockerやPodmanで使えるもの」と思い浮かべるかと思いますが、LXCコンテナと一般的な「コンテナ」にはどのような違いがあるのでしょうか。
LXC(Linux Containers)は「システムコンテナ」とも呼ばれ、cgroupsやユーザー名前空間といったLinuxカーネルの機能を使ってOS全体を仮想化することを目的としていますが、一般的なコンテナは「アプリケーションコンテナ」とも呼ばれ、LXCの技術を応用して特定のアプリケーションと依存ライブラリをパッケージ化し、アプリケーションの配布と実行を簡単に実現することを目的としています。
そのため、LXCコンテナを使った仮想化では、通常のLinuxサーバと同じようにSSH(Secure Shell)などでログインして、複数のアプリケーションをインストールして運用することになります。
では、なぜProxmox VEは仮想マシンだけではなく、LXCコンテナも使えるのでしょうか。
仮想マシンは、ハードウェアの動作をエミュレートすることで、LinuxだけではなくWindowsなどさまざまなOSを独立して動かすことができます。一方で、起動中の仮想マシンのメモリ使用状況を見ても分かる通り、アイドル状態でも数GBのメモリを占有します。
これはカーネルの動作に必要なメモリがそれぞれの仮想マシンでどうしても消費されてしまうことが原因です。
LXCコンテナの場合はホストOS、つまりProxmox VEのカーネルを共有しながら、プロセスなどはユーザー名前空間で隔離して動作するため、カーネル部分のオーバーヘッドが必要ありません。
つまり、仮想ハードウェアごと分ける必要はなく、アプリケーションコンテナと同様にプロセスの名前空間として隔離するだけで十分なら、LXCコンテナで仮想環境を構築することでメモリ使用量を節約できます。
仮想マシンを作成する際はOSのインストールを実施するため、インストールメディアのISOファイルを使用しました。Proxmox VEでコンテナを作成する場合はOSの基本的なファイルがアーカイブされたコンテナテンプレートを使います。
まずはコンテナテンプレートを入手しましょう。
Proxmox VE管理画面の左のメニューからストレージ(デフォルトだと「local」)を選択し、右側に表示されたメニューから「CTテンプレート」を選択します。次に、上に表示されている「テンプレート」ボタンを選択します。
ダウンロード可能なコンテナテンプレートの一覧が表示されるので、今回はRocky Linuxのコンテナテンプレートである「rockylinux_10-default」をダウンロードします。
該当の項目を選択し、右下の「ダウンロード」ボタンを選択します。
コンテナテンプレートのダウンロードが始まり、画面上に「TASK OK」と出力されたらダウンロード完了です。右上の×印を選択してダイアログを閉じます。
最初の画面に戻ると、ダウンロードしたRocky Linuxのコンテナテンプレートが表示されていることが分かります。
コンテナテンプレートをダウンロードしたので、早速コンテナを作成してみましょう。Proxmox VE管理画面の右上に表示されている、「CTを作成」という青いボタンを選択します。
仮想マシンを作成するときと同様に、作成するコンテナ名や構成などを設定する画面が表示されます。以下の内容を入力します。
設定を進めていくと確認画面が表示されるので、内容に問題がなければ「完了」ボタンを選択します。
すると、コンテナテンプレートのダウンロード時と同じような画面が表示されます。画面上に「TASK OK」と出力されたらコンテナの作成が完了です。右上の×印を選択してダイアログを閉じます。
管理画面に戻り、右上の「開始」ボタンを選択します。これでコンテナが起動しますが、すぐに起動が完了します。右上の「コンソール」ボタンを選択してコンソール画面を表示して、ログインします。
仮想マシンと同様の操作でログインできることが分かるかと思います。しかし、画面上のメモリ使用状況を見ると、仮想マシンの場合と比べて大幅に少ないメモリ使用量で仮想環境が起動しています。
このように、LXCコンテナは仮想マシンと比べて操作性があまり変わりませんが、軽量に動作します。
さて、LXCコンテナは軽量で動作することが分かりました。では、アプリケーションコンテナを動かす場合はどうすれば良いでしょうか。Proxmox VE自体でアプリケーションコンテナを動かすことは可能ですが、現時点ではテクノロジープレビューの位置付けです。
では、アプリケーションコンテナは仮想マシン上で動かすしかないかというと、そうではありません。LXCコンテナの上でアプリケーションコンテナを動かすことができます。
LXCコンテナの中でアプリケーションコンテナを動かすには、LXCコンテナを作成するときの「全般」タブで表示されていた「ネスト」という項目を有効にする必要があります。デフォルト(既定)で有効ですので、もし無効にしてしまった場合は一度コンテナをシャットダウンして、左のメニューの「オプション」を選択後、「機能」を選択して「編集」ボタンを選択し、「ネスト」のチェックボックスを有効にしてください。
それでは、先ほど作成したRocky LinuxのLXCコンテナを使って、アプリケーションコンテナを動かしてみましょう。ここから先はコンソール画面上での操作になりますので、前述の通りコンテナにログインしてから操作してください。
今回はコンテナランタイムとしてPodmanを使います。次のコマンドを実行してPodmanをインストールしてください。
dnf -y install podman
次に、試しに動かすアプリケーションコンテナとして、ブラウザを使って簡単に動作確認ができるNginxを実行しようと思います。以下のコマンドを実行してNginxコンテナを起動してみましょう。
podman run -p 80:80 docker.io/library/nginx
Nginxコンテナが起動できたら、ブラウザでRocky LinuxコンテナのIPアドレスに対してアクセスしてみましょう。「Welcome to nginx!」というメッセージが表示されていれば、正常に起動できています。
今回は、Proxmox VEの強みであるLXCコンテナの作成と、その上でアプリケーションコンテナを起動する方法を紹介しました。
OSとして完全に独立して動かす必要がある場合は仮想マシン、Proxmox VEのカーネルを共有してもいいのであれば軽量に動かすことができるLXCコンテナというように、用途や要件に応じて使い分けるとリソースを最大限効率的に使用できるでしょう。特に、アプリケーションコンテナを動かす用途なら仮想マシンである必要はなく、LXCコンテナの上で動かすといいでしょう。
サイオステクノロジー所属。OSS よろず相談室でサポート対応をしているテクニカルサポートエンジニア。Ansibleに出会ってから自動化に取りつかれ、自身の業務やプライベートであらゆるものの自動化に取り組む。プライベートではJavaでちょっとしたツールの開発を趣味にしている。
国内VMwareクラウド事業者を大量切り捨て 残るのは数社のみ
VMware製仮想マシンを無料でHyper-V環境に移行できる変換ツール Microsoftが提供開始
約6割が根本原因特定に苦慮 AI時代も「Linux」の理解が問われる理由
クラウドが当たり前なのに、なぜかオンプレミス回帰が起こる“矛盾”の正体Copyright © ITmedia, Inc. All Rights Reserved.