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

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

参考Webページ

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

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

前準備

Ubuntu のシステム更新

Ubuntu で OS のシステム更新を行うときは、端末で次のコマンドを実行する。これは、パッケージ情報を最新の状態に保ち、インストール済みのパッケージをセキュリティアップデートやバグ修正を含めて更新するためである。

Ubuntu のインストールは別ページで説明する。

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

LXC のパッケージを用いたインストール

Ubuntu でパッケージを用いてインストールする場合の手順

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

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

基本操作

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

コンテナの起動、終了、および状態表示

コンソール接続

起動中のコンテナへのコンソール接続

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

コンテナ側に接続された端末での操作

既定(デフォルト)の設定の確認

以上の実行結果から、次の設定値が確認できる。

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

ブリッジ接続

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

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

  3. ホストで bridge-utils をインストールする。
    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install bridge-utils
    
  4. 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
    
  5. 設定の適用
    sudo netplan apply
    
  6. 次のコマンドで設定を確認する

    br0 が追加されていることを確認する。

    ip addr show
    
  7. ufw の設定

    設定ファイル /etc/default/ufw の DEFAULT_FORWARD_POLICY の行を、次のように書き換える。

    DEFAULT_FORWARD_POLICY="ACCEPT"
    

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

    sudo ufw reload
    
    ufw設定の実行画面
  8. (オプション)コンテナに DHCP で IP アドレスを割り当てる場合は、ホストで dnsmasq をインストールする。
    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
    
  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 で削除する。