Ubuntu で LXC のインストールとテスト実行
LXC(Linux Containers)は、OS レベルの仮想化技術であり、単一の Linux カーネル上で複数の独立した Linux 環境を実行できる。仮想マシンと比較して、オーバーヘッドが小さく高速に起動できる点が特徴である。
LXC コンテナでは、プロセス、ファイルシステム、IPC(プロセス間通信)、ネットワークが仮想化され、ホストや他のコンテナから分離された実行環境が提供される。
参考Webページ
https://linuxcontainers.org/lxc/documentation/
https://ubuntu.com/server/docs/containers-lxc
本ページの内容
- 前準備:Ubuntu のシステム更新
- LXC のインストール
- 基本操作:コンテナの生成・複製・破棄・起動・停止
- ブリッジ接続の設定:コンテナを外部ネットワークに接続する
前準備
Ubuntu のシステム更新
Ubuntu でシステム更新を行うには、端末で次のコマンドを実行する。この操作により、パッケージ情報が最新の状態に更新され、セキュリティアップデートやバグ修正が適用される。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを更新(依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で再起動が必要な場合のみ実行
# sudo shutdown -r now
LXC のインストール
パッケージを用いたインストール手順
次のコマンドを実行する。
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install lxc
基本操作
このセクションでは、LXC コンテナの基本的な操作方法を説明する。コンテナのライフサイクル(生成→起動→停止→破棄)に沿って解説する。
コンテナの生成、複製、破棄、および一覧表示
- コンテナの生成
-t オプションでテンプレート名を、-n オプションでコンテナ名を指定する。利用可能なテンプレートは /usr/share/lxc/templates ディレクトリに格納されている。
sudo lxc-create -t download -n hoge -- -d ubuntu -r noble -a amd64上記のコマンドでは、-- 以降のオプションで、ディストリビューション(-d ubuntu)、リリース(-r noble:Ubuntu 24.04)、アーキテクチャ(-a amd64)を指定している。
結果の確認(エラーメッセージが出ないことを確認する)
- コンテナの複製
既存のコンテナを複製することで、同一構成のコンテナを短時間で作成できる。-n オプションで複製元を、-N オプションで複製先のコンテナ名を指定する。
sudo lxc-copy -n hoge -N hoge2
- コンテナの破棄
不要になったコンテナを削除する。この操作により、コンテナのファイルシステムも削除される。
sudo lxc-destroy -n hoge
- コンテナの一覧表示
生成済みのコンテナとその状態を一覧表示する。
sudo lxc-ls -f
コンテナの起動、停止、および状態表示
- コンテナの起動
sudo lxc-start -n hoge
数十秒待つと、コンソール画面が表示される。ユーザ名 ubuntu、パスワード ubuntu でログインできる。
- コンテナのシャットダウン
コンテナを正常に終了する。コンテナ内のプロセスに終了シグナルが送信される。
sudo lxc-stop -n hoge
- コンテナの強制終了
コンテナが応答しない場合や、正常なシャットダウンができない場合に使用する。-k オプションを指定すると、コンテナを強制的に終了する。
sudo lxc-stop -n hoge -k
- コンテナの状態確認
sudo lxc-info -n hogeこのコマンドにより、コンテナの状態(起動中または停止中)、プロセスID、リソース使用状況を確認できる。
コンソール接続
起動中のコンテナにコンソール接続するには、次のコマンドを実行する。
sudo lxc-console -n hoge
コンテナ内での操作
- ログイン
ユーザ名 ubuntu、パスワード ubuntu でログインできる。
- コンテナの停止
コンテナ内から停止する場合は、次のコマンドを実行する。
sudo poweroff
デフォルト設定の確認
コンテナのネットワーク設定やリソース制限を確認する方法を説明する。
- ホストで次のコマンドを実行する。
sudo lxc-info -n hoge
- コンテナ内で次のコマンドを実行する。
ip addr show
上記の実行結果から、次の設定値を確認できる。これらは cgroups(コントロールグループ)によるリソース制限の設定である。
| 項目 | 値 |
|---|---|
| コンテナの仮想NIC名(コンテナ内部から識別される名前) | eth0 |
| コンテナで利用可能な CPU コア数(cpuset.cpus) | 0-7(8コアの場合) |
| コンテナで利用可能なメモリ使用量の上限(memory.max) | 制限なし(デフォルト) |
ブリッジ接続の設定
ブリッジ接続を設定することで、コンテナをホストと同じネットワークセグメントに接続できる。これにより、外部からコンテナへの直接アクセス(SSH接続等)が可能になる。
注意:ネットワーク設定の変更は、設定ミスによりホストへのネットワーク接続が失われる可能性がある。リモートで作業している場合は、物理コンソールへのアクセス手段を確保してから作業すること。
- ホストで次のコマンドを実行し、IP アドレス、ブロードキャストアドレス、ネットマスクを確認する。
ip addr show - デフォルトルータの IP アドレスと DNS サーバの IP アドレスを確認する。
これらの値は、インターネットプロバイダから指定されたアドレス、またはブロードバンドルータの設定画面から取得できる。
- ホストで bridge-utils をインストールする。
# パッケージリストの情報を更新 sudo apt update sudo apt -y install bridge-utils - Netplan を使用してブリッジ接続を設定する。
Netplan は Ubuntu 18.04 以降で採用されているネットワーク設定ツールである。YAML 形式の設定ファイルでネットワークを構成する。/etc/netplan/ ディレクトリ内の設定ファイル(例:50-cloud-init.yaml)を編集する。
設定例(使用する環境に応じて値を変更すること)
項目 値 IP アドレス 192.168.111.21 ネットワークアドレス/プレフィックス 192.168.111.0/24 ゲートウェイの IP アドレス(デフォルトルータの IP アドレス) 192.168.111.1 DNS サーバの IP アドレス 192.168.111.1 Netplan 設定ファイルの例(/etc/netplan/50-cloud-init.yaml)
network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no bridges: br0: interfaces: [eth0] addresses: [192.168.111.21/24] routes: - to: default via: 192.168.111.1 nameservers: addresses: [192.168.111.1] parameters: stp: false forward-delay: 0stp: false は STP(Spanning Tree Protocol:ネットワークループ防止プロトコル)を無効にする設定である。単純なブリッジ構成では無効で問題ない。
- 設定を適用する。
sudo netplan applyこのコマンドの実行後、ネットワーク接続が一時的に切断される場合がある。
- 設定を確認する。
次のコマンドを実行し、br0 が追加されていることを確認する。
ip addr show - ufw の設定を変更する。
ufw(Uncomplicated Firewall)は Ubuntu のファイアウォール管理ツールである。ブリッジを経由するパケットの転送を許可するため、設定ファイル /etc/default/ufw 内の DEFAULT_FORWARD_POLICY の行を次のように変更する。
DEFAULT_FORWARD_POLICY="ACCEPT"変更後、次のコマンドで ufw を再読み込みする。
sudo ufw reload
- (オプション)コンテナに DHCP で IP アドレスを割り当てる場合は、ホストで dnsmasq をインストールする。dnsmasq は軽量な DNS/DHCP サーバである。
sudo apt -y install dnsmasq - LXC 設定ファイルを作成する。
LXC のデフォルト設定ファイル(/etc/lxc/default.conf)を編集するか、コンテナ個別の設定ファイルを作成する。
LXC 設定ファイルの例
lxc.uts.name = hoge2 lxc.net.0.type = veth lxc.net.0.link = br0 lxc.net.0.flags = up lxc.net.0.name = eth0 lxc.net.0.ipv4.address = 192.168.111.22/24 lxc.net.0.ipv4.gateway = 192.168.111.1lxc.net.0.type = veth は、veth(Virtual Ethernet)ペアを使用してコンテナをブリッジに接続する設定である。
- LXC 設定ファイルを指定してコンテナを作成する。
-t オプションでテンプレート名を、-n オプションでコンテナ名を、-f オプションで LXC 設定ファイルのパスを指定する。
sudo lxc-create -t download -n hoge2 -f lxc-veth.conf -- -d ubuntu -r noble -a amd64
- 動作を確認する。
ホストで次のコマンドを実行し、コンテナを起動する。
sudo lxc-start -n hoge2
数十秒待つとコンソールが表示される。
セキュリティに関する注意:ブリッジ接続の場合、コンテナが外部ネットワークに直接接続される。SSH のポート(22番)が開放されているため、以下のセキュリティ対策を実施すること。
- デフォルトパスワードを変更する
- 必要に応じてファイアウォールを設定する
- 不要なサービスを停止する
パスワード変更後、ホストから次のコマンドを実行して、LXC コンテナ上の SSH サーバへの接続を確認する。
ssh ubuntu@192.168.111.22
テスト目的で作成したコンテナが不要になった場合は、lxc-stop でコンテナを停止し、lxc-destroy で削除する。