Ubuntu で LXC のインストールとテスト実行

LXC(Linux Containers)は、OS レベルの仮想化技術であり、単一の Linux カーネル上で複数の独立した Linux 環境を実行できる。仮想マシンと比較して、オーバーヘッドが小さく高速に起動できる点が特徴である。

LXC コンテナでは、プロセス、ファイルシステム、IPC(プロセス間通信)、ネットワークが仮想化され、ホストや他のコンテナから分離された実行環境が提供される。

参考Webページ

https://linuxcontainers.org/lxc/documentation/

https://ubuntu.com/server/docs/containers-lxc

本ページの内容

前準備

Ubuntu のシステム更新

Ubuntu でシステム更新を行うには、端末で次のコマンドを実行する。この操作により、パッケージ情報が最新の状態に更新され、セキュリティアップデートやバグ修正が適用される。

Ubuntu のインストール手順は別ページで説明している。

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを更新(依存関係も考慮)
sudo apt full-upgrade
# カーネル更新等で再起動が必要な場合のみ実行
# sudo shutdown -r now

LXC のインストール

パッケージを用いたインストール手順

次のコマンドを実行する。

# パッケージリストの情報を更新
sudo apt update
sudo apt -y install lxc

基本操作

このセクションでは、LXC コンテナの基本的な操作方法を説明する。コンテナのライフサイクル(生成→起動→停止→破棄)に沿って解説する。

コンテナの生成、複製、破棄、および一覧表示

コンテナの起動、停止、および状態表示

コンソール接続

起動中のコンテナにコンソール接続するには、次のコマンドを実行する。

sudo lxc-console -n hoge
コンソール接続の実行画面

コンテナ内での操作

デフォルト設定の確認

コンテナのネットワーク設定やリソース制限を確認する方法を説明する。

上記の実行結果から、次の設定値を確認できる。これらは cgroups(コントロールグループ)によるリソース制限の設定である。

項目
コンテナの仮想NIC名(コンテナ内部から識別される名前) eth0
コンテナで利用可能な CPU コア数(cpuset.cpus) 0-7(8コアの場合)
コンテナで利用可能なメモリ使用量の上限(memory.max) 制限なし(デフォルト)

ブリッジ接続の設定

ブリッジ接続を設定することで、コンテナをホストと同じネットワークセグメントに接続できる。これにより、外部からコンテナへの直接アクセス(SSH接続等)が可能になる。

注意:ネットワーク設定の変更は、設定ミスによりホストへのネットワーク接続が失われる可能性がある。リモートで作業している場合は、物理コンソールへのアクセス手段を確保してから作業すること。

  1. ホストで次のコマンドを実行し、IP アドレス、ブロードキャストアドレス、ネットマスクを確認する。
    ip addr show
    
  2. デフォルトルータの IP アドレスと DNS サーバの IP アドレスを確認する。

    これらの値は、インターネットプロバイダから指定されたアドレス、またはブロードバンドルータの設定画面から取得できる。

  3. ホストで bridge-utils をインストールする。
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install bridge-utils
    
  4. 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: 0
    

    stp: false は STP(Spanning Tree Protocol:ネットワークループ防止プロトコル)を無効にする設定である。単純なブリッジ構成では無効で問題ない。

  5. 設定を適用する。
    sudo netplan apply
    

    このコマンドの実行後、ネットワーク接続が一時的に切断される場合がある。

  6. 設定を確認する。

    次のコマンドを実行し、br0 が追加されていることを確認する。

    ip addr show
    
  7. ufw の設定を変更する。

    ufw(Uncomplicated Firewall)は Ubuntu のファイアウォール管理ツールである。ブリッジを経由するパケットの転送を許可するため、設定ファイル /etc/default/ufw 内の DEFAULT_FORWARD_POLICY の行を次のように変更する。

    DEFAULT_FORWARD_POLICY="ACCEPT"
    

    変更後、次のコマンドで ufw を再読み込みする。

    sudo ufw reload
    
    ufw設定の実行画面
  8. (オプション)コンテナに DHCP で IP アドレスを割り当てる場合は、ホストで dnsmasq をインストールする。dnsmasq は軽量な DNS/DHCP サーバである。
    sudo apt -y install dnsmasq
    
  9. 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.net.0.type = veth は、veth(Virtual Ethernet)ペアを使用してコンテナをブリッジに接続する設定である。

  10. LXC 設定ファイルを指定してコンテナを作成する。

    -t オプションでテンプレート名を、-n オプションでコンテナ名を、-f オプションで LXC 設定ファイルのパスを指定する。

    sudo lxc-create -t download -n hoge2 -f lxc-veth.conf -- -d ubuntu -r noble -a amd64
    
    設定ファイルを用いたコンテナ作成の実行画面
  11. 動作を確認する。

    ホストで次のコマンドを実行し、コンテナを起動する。

    sudo lxc-start -n hoge2
    
    コンテナ起動の実行画面

    数十秒待つとコンソールが表示される。

    セキュリティに関する注意:ブリッジ接続の場合、コンテナが外部ネットワークに直接接続される。SSH のポート(22番)が開放されているため、以下のセキュリティ対策を実施すること。

    • デフォルトパスワードを変更する
    • 必要に応じてファイアウォールを設定する
    • 不要なサービスを停止する
    パスワード変更の実行画面

    パスワード変更後、ホストから次のコマンドを実行して、LXC コンテナ上の SSH サーバへの接続を確認する。

    ssh ubuntu@192.168.111.22
    
    SSH接続テストの実行画面

    テスト目的で作成したコンテナが不要になった場合は、lxc-stop でコンテナを停止し、lxc-destroy で削除する。