LXC 特権コンテナ HowTo

Ubuntu 14.04 の LXC で CentOS 6 の特権コンテナをたてて外部から SSH できるようにした記録。

Keywords: Ubuntu LXC CentOS block device ブロックデバイス 特権コンテナ

ゴール

Ubuntu 上で CentOS の特権コンテナをたてて、以下をしたい。

  • ホストのブロックデバイスを一部共有する
  • ssh で直接 CentOS にログインできるようにする

作業手順

パッケージインストール

# LXC で CentOS コンテナを立てるのに必要
sudo apt-get install lxc yum

# 一部の不具合に対処するのに必要
sudo apt-get install cgroup-bin libpam-systemd apparmor-utils

sudo reboot

コンテナ作成

sudo lxc-create -n centos -t centos

# AppArmor 無効化
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start
sudo aa-disable usr.bin.lxc-start

コンテナ設定を編集

sudo vi /var/lib/lxc/centos/config で以下の内容を修正 or 追記。

lxc.network.type = macvlan
lxc.network.macvlan.mode = bridge
lxc.network.flags = up
lxc.network.link = em1

# When using LXC with apparmor, uncomment the next line to run unconfined:
lxc.aa_profile = unconfined

lxc.autodev = 1
# 許可したいブロックデバイスの major:minor を書く
# 259 は NVMe デバイスのメジャー番号
lxc.cgroup.devices.allow = b 259:* rwm

# ホスト起動時に自動起動したければ
lxc.start.auto = 1
lxc.start.delay = 5

コンテナを起動

sudo lxc-start -n centos -d

ブロックデバイスファイルをコンテナに作成

sudo lxc-device -n centos add /dev/nvme0n1

コンテナのコンソールにアクセス

sudo lxc-console -n centos

パスワードは /var/lib/lxc/centos/tmp_root_pass にある。

以上。後はご自由にどうぞ。