はじめに
前回の記事ではProxmox VE環境に仮想マシンを追加して起動する方法を説明しました。
今回は、Proxmox VEで追加できるもう一方の仮想環境であるコンテナーの追加方法と使い方の説明をします。仮想マシンと比べて軽量なLXCコンテナーの特徴やVMとの使い分けに関しても触れます。
コンテナーについて
LXC(Linux Containers)は、Linuxカーネルによる隔離機能(cgroupsやnamespaces)を使った仮想化技術です。Proxmox VEでは、仮想マシン以外に作成できる仮想環境としてこのLXCによるコンテナーが利用できます。ハードウェア全体を仮想化する仮想マシンに対して、LXCはProxmox VEが動いているホストのLinuxカーネルを共有して動作するのでオーバーヘッドが少なく起動が高速です。
テンプレートイメージのダウンロード
LXCコンテナを作成する前にテンプレートイメージをダウンロードしておきます。
- 左のサイドバーでlocalストレージ(または他のコンテナイメージ格納用に用意したストレージ)を選択し、CT Templatesタブをクリックします。
- 「Templates」ボタンをクリックすると、利用可能なテンプレートの一覧が表示されます。今回は例としてUbuntu 24.04 (ubuntu-24.04-standard) を選択してダウンロードします。利用可能なLXCテンプレート一覧LXCテンプレートのダウンロード画面(完了)
- ダウンロードが完了したらイメージが一覧に表示されます。
コンテナー作成
上のCreate CTボタンをクリックしてコンテナーの作成画面を表示します。
General
- Hostname: コンテナーに割り当てるホスト名を指定します。
- Password, Confirm password: コンテナーのrootユーザのパスワードを設定します。
- SSH public key(s): コンテナーにrootユーザーでSSHする際のSSH公開鍵を設定します。Load SSH Key Fileボタンで公開鍵ファイル(.pub)を指定することでも追加可能です。
- Unprivileged container: 非特権モードでコンテナーを起動します。一部カーネルの機能を使う場合にチェックを外す必要がありますが、基本はチェックを入れたままで良いです。
- Nesting: ネスティング機能を有効にします。Dockerを利用する場合などにチェックが必要です。

Template
コンテナーに使用するテンプレートを指定します。今回は先程ダウンロードしたUbuntu 24.04を選択します。

Disks
割り当てるディスクのサイズを指定します。

CPU
利用するCPUコア数を指定します。

Memory
割り当てるメモリーとスワップのサイズを指定します。

Network
ネットワークインターフェースの設定をします。VMとは違いIPアドレスもここで設定します。IPアドレスを自動設定する場合にはDHCPをクリックしておきます。

DNS
利用するDNSサーバーを設定します。何も入力しなければホストのProxmox VEに設定してあるDNSサーバーが指定されます。

Confirm
設定の確認画面が出てくるので、問題なければFinishボタンでコンテナーを作成します。

コンテナー起動
左のサイドバーで作成したコンテナーを選択して、Startボタンをクリックするとコンテナーが起動します。VMに比べると起動はすぐに完了します。

Consoleタブに行くとコンソールでログイン画面が表示されます。(画面上に一切文字が出ていない場合はEnterキーを押すとログイン画面が出てきます。)

ログイン画面でrootと入力してEnterを押し、コンテナー作成の際に指定したパスワードを打ち込んでEnterを押すと、rootユーザーにログインします。

管理ユーザー追加・SSHサーバー設定
デフォルトではrootユーザーにログインするようになっています。セキュリティの観点から、管理用のユーザーを作成して利用するようにします。またSSHサーバーの設定も変更し、rootへの直接ログインを禁止して公開鍵認証のみ利用可能にします。
- まず、以下のコマンドを実行して管理用のユーザーを作成します。(例としてユーザー名は
ubuntu
)root@ct-ub2204:~$ adduser --comment "" ubuntu info: Adding user `ubuntu' ... info: Selecting UID/GID from range 1000 to 59999 ... info: Adding new group `ubuntu' (1000) ... info: Adding new user `ubuntu' (1000) with group `ubuntu (1000)' ... info: Creating home directory `/home/ubuntu' ... info: Copying files from `/etc/skel' ... New password: # パスワードを設定 Retype new password: # 再入力 passwd: password updated successfully info: Adding new user `ubuntu' to supplemental / extra groups `users' ... info: Adding user `ubuntu' to group `users' ...
ユーザー追加コマンド - 作成したユーザーでsudoコマンドを実行できるようにsudoグループに追加します。
root@ct-ub2204:~$ usermod -aG sudo ubuntu
sudoグループへの追加コマンド - 作成したユーザーでログインし直します。
root@ct-ub2204:~$ exit logout Ubuntu 24.04.1 LTS ct-ub2204 tty1 ct-ub2204 login: ubuntu Password # パスワードを入力 ubuntu@ct-ub2204:~$
- SSHでログインするための公開鍵を設定します。
ubuntu@ct-ub2204:~$ mkdir -m 700 ~/.ssh ubuntu@ct-ub2204:~$ echo 'ssh-ed25519 AAAA======...' >> ~/.ssh/authorized_keys
- SSHの設定を変更してます。
ubuntu@ct-ub2204:~$ sudo -e /etc/ssh/sshd_config # 変更箇所 # rootユーザーへのログインを禁止 PermitRootLogin prohibit-password ↓ PermitRootLogin no # 公開鍵認証でのみログイン可能 #PasswordAuthentication yes ↓ PasswordAuthentication no ubuntu@ct-ub2204:~$ sudo systemctl reload sshd
Dockerのインストールと起動確認
試しにLXCコンテナー上でDockerのイメージを起動してみます。
LXCコンテナー上でDockerを利用するためにはNesting機能を有効化する必要があります。Nestingが有効化されているかどうかは、OptionsタブのFeatures欄から確認できます。nesting=1と表示されていなければEditを押してnestingにチェックを入れてください。(Unprivileged ContainerはYesのままで問題なし)

Dockerのインストールは、基本的にDocker公式のUbuntuへのインストール手順に従ってもらえばOKです。
Dockerインストール完了後、動作確認としてAlpine Linuxのイメージを起動してみます。
ubuntu@ct-ub2204:~# sudo docker run --rm -it alpine:latest
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
???: Pull complete
Digest: sha256:???
Status: Downloaded newer image for alpine:latest
/ # cat /etc/alpine-release
3.21.2
/ # exit
ubuntu@ct-ub2204:~#
VMとのLXCの使い分け
- VM(仮想マシン)
- Linux以外のOSを利用する場合
- ホストとの完全な隔離が必要な場合
- DockerやKubernetesなどを使う場合
- 高度な仮想化機能(ライブマイグレーション機能など)を使いたい場合
- LXC(コンテナー)
- オーバーヘッドが少なく低リソースにしたい場合
- 単一のアプリケーションやサービスを実行する場合
- 簡易的な仮想環境を迅速に作りたい場合
- 使うOSのLXCテンプレートがProxmoxの一覧にあるか公開されている場合
まとめ
Proxmox VEでのLXCコンテナーの作成と設定方法について説明しました。LXCコンテナーは軽量でProxmoxのGUIから簡単に作成できるため、使う用途的に十分であれば採用できる場面もあると思います。