Ubuntu で LXC のインストールとテスト実行
LXC コンテナでは、プロセス、ファイルシステム、IPC、ネットワークが仮想化され、ホストや他のコンテナと分離された実行環境を提供する。
参考Webページ
https://linuxcontainers.org/lxc/documentation/
https://ubuntu.com/server/docs/containers-lxc
前準備
Ubuntu のシステム更新
Ubuntu で OS のシステム更新を行うときは、端末で次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。
# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを更新(依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で再起動が必要な場合のみ実行
# sudo shutdown -r now
LXC のパッケージを用いたインストール
Ubuntu でパッケージを用いてインストールする場合の手順
次のコマンドを実行する。
# パッケージリストの情報を更新
sudo apt update
sudo apt -y install 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
- コンテナの強制終了
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
以上の実行結果から、次の設定値が確認できる。
| 項目 | 値 |
|---|---|
| コンテナの仮想NIC(veth)名(コンテナ内部から識別される名前) | eth0 |
| コンテナで利用可能な CPU コア数(cpuset.cpus) | 0-7(8コアの場合) |
| コンテナで利用可能なメモリ使用量の上限(memory.max) | 制限なし(デフォルト) |
ブリッジ接続
- ホストで次のコマンドを実行し、IP アドレス、ブロードキャストアドレス、ネットマスクを確認する。
ip addr show - デフォルトルータの IP アドレス、DNS サーバの IP アドレスを確認する。
これらは、インターネットプロバイダから指定されたアドレス、またはブロードバンドルータの設定値である。
- ホストで bridge-utils をインストールする。
# パッケージリストの情報を更新 sudo apt update sudo apt -y install bridge-utils - Netplan を使用したブリッジ接続の設定
Ubuntu 18.04 以降では、ネットワーク設定に Netplan を使用する。/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: 0 - 設定の適用
sudo netplan apply - 次のコマンドで設定を確認する
br0 が追加されていることを確認する。
ip addr show - ufw の設定
設定ファイル /etc/default/ufw の DEFAULT_FORWARD_POLICY の行を、次のように書き換える。
DEFAULT_FORWARD_POLICY="ACCEPT"その後、次のコマンドで ufw を再読み込みする。
sudo ufw reload
- (オプション)コンテナに DHCP で IP アドレスを割り当てる場合は、ホストで dnsmasq をインストールする。
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.1 - 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 で削除する。