Site icon rpine lab Tech Blog

趣味のプログラミング(Web系・バックエンド)や自宅ラボ(Homelab)構築・マイコンを使った電子工作などを雑多に扱った技術ブログです。

🌥️ Proxmox VEによる仮想環境構築:軽量で高速なLXCコンテナーの作成

はじめに

前回の記事ではProxmox VE環境に仮想マシンを追加して起動する方法を説明しました。

今回は、Proxmox VEで追加できるもう一方の仮想環境であるコンテナーの追加方法と使い方の説明をします。仮想マシンと比べて軽量なLXCコンテナーの特徴やVMとの使い分けに関しても触れます。

コンテナーについて

LXC(Linux Containers)は、Linuxカーネルによる隔離機能(cgroupsやnamespaces)を使った仮想化技術です。Proxmox VEでは、仮想マシン以外に作成できる仮想環境としてこのLXCによるコンテナーが利用できます。ハードウェア全体を仮想化する仮想マシンに対して、LXCはProxmox VEが動いているホストのLinuxカーネルを共有して動作するのでオーバーヘッドが少なく起動が高速です。

テンプレートイメージのダウンロード

LXCコンテナを作成する前にテンプレートイメージをダウンロードしておきます。

  1. 左のサイドバーでlocalストレージ(または他のコンテナイメージ格納用に用意したストレージ)を選択し、CT Templatesタブをクリックします。
    Image in a image block
  2. 「Templates」ボタンをクリックすると、利用可能なテンプレートの一覧が表示されます。今回は例としてUbuntu 24.04 (ubuntu-24.04-standard) を選択してダウンロードします。
    利用可能なLXCテンプレート一覧
    利用可能なLXCテンプレート一覧
    LXCテンプレートのダウンロード画面(完了)
    LXCテンプレートのダウンロード画面(完了)
  3. ダウンロードが完了したらイメージが一覧に表示されます。
    Image in a image block

コンテナー作成

上のCreate CTボタンをクリックしてコンテナーの作成画面を表示します。

General

  • Hostname: コンテナーに割り当てるホスト名を指定します。
  • Password, Confirm password: コンテナーのrootユーザのパスワードを設定します。
  • SSH public key(s): コンテナーにrootユーザーでSSHする際のSSH公開鍵を設定します。Load SSH Key Fileボタンで公開鍵ファイル(.pub)を指定することでも追加可能です。
  • Unprivileged container: 非特権モードでコンテナーを起動します。一部カーネルの機能を使う場合にチェックを外す必要がありますが、基本はチェックを入れたままで良いです。
  • Nesting: ネスティング機能を有効にします。Dockerを利用する場合などにチェックが必要です。
Image in a image block

Template

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

Image in a image block

Disks

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

Image in a image block

CPU

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

Image in a image block

Memory

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

Image in a image block

Network

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

Image in a image block

DNS

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

Image in a image block

Confirm

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

Image in a image block

コンテナー起動

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

Image in a image block

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

Image in a image block

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

Image in a image block

管理ユーザー追加・SSHサーバー設定

デフォルトではrootユーザーにログインするようになっています。セキュリティの観点から、管理用のユーザーを作成して利用するようにします。またSSHサーバーの設定も変更し、rootへの直接ログインを禁止して公開鍵認証のみ利用可能にします。

  1. まず、以下のコマンドを実行して管理用のユーザーを作成します。(例としてユーザー名は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' ...
    ユーザー追加コマンド
  2. 作成したユーザーでsudoコマンドを実行できるようにsudoグループに追加します。
    root@ct-ub2204:~$ usermod -aG sudo ubuntu
    sudoグループへの追加コマンド
  3. 作成したユーザーでログインし直します。
    root@ct-ub2204:~$ exit
    logout
    
    Ubuntu 24.04.1 LTS ct-ub2204 tty1
    
    ct-ub2204 login: ubuntu
    Password # パスワードを入力
    
    ubuntu@ct-ub2204:~$ 
  4. SSHでログインするための公開鍵を設定します。
    ubuntu@ct-ub2204:~$ mkdir -m 700 ~/.ssh
    ubuntu@ct-ub2204:~$ echo 'ssh-ed25519 AAAA======...' >> ~/.ssh/authorized_keys
    
  5. 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のイメージを起動してみます。

💡
Proxmox VEの公式ドキュメント的には、Dockerイメージを動かす場合はLXCではなく仮想マシンを使うことを推奨しています。

LXCコンテナー上でDockerを利用するためにはNesting機能を有効化する必要があります。Nestingが有効化されているかどうかは、OptionsタブのFeatures欄から確認できます。nesting=1と表示されていなければEditを押してnestingにチェックを入れてください。(Unprivileged ContainerはYesのままで問題なし)

Image in a image block

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:~# 
Alpine Linuxイメージの起動

VMとのLXCの使い分け

  • VM(仮想マシン)
    • Linux以外のOSを利用する場合
    • ホストとの完全な隔離が必要な場合
    • DockerやKubernetesなどを使う場合
    • 高度な仮想化機能(ライブマイグレーション機能など)を使いたい場合
  • LXC(コンテナー)
    • オーバーヘッドが少なく低リソースにしたい場合
    • 単一のアプリケーションやサービスを実行する場合
    • 簡易的な仮想環境を迅速に作りたい場合
    • 使うOSのLXCテンプレートがProxmoxの一覧にあるか公開されている場合

まとめ

Proxmox VEでのLXCコンテナーの作成と設定方法について説明しました。LXCコンテナーは軽量でProxmoxのGUIから簡単に作成できるため、使う用途的に十分であれば採用できる場面もあると思います。

参考サイト