私はLXCが好きなのですが、LXCの設定を丸暗記できません。LXCの使い方を一覧しているサイトが見当たらなかったので自分で書くことにしました。

ここで解説するのはLXCであって、LXDではありません。

Ubuntu 20.04をホストにしています。

LXCをインストールする

sudo apt install -y lxc lxc-templates

コンテナを作る

sudo lxc-create -n {コンテナ名} -t {テンプレート名}

Ubuntuのバージョンを指定してコンテナを作る

sudo lxc-create -n {コンテナ名} -t ubuntu -- -r focus

コンテナ作成時に使えるテンプレートを知る

ls /usr/share/lxc/templates

これで出てきたもののlxc-を除いた部分をlxc-createのテンプレートに渡せます。

コンテナを起動する

sudo lxc-start {コンテナ名}

コンテナを一覧する

sudo lxc-ls -f

-f--fancyの略で情報量が増えます。

コンテナを再起動する

sudo lxc-stop -r {コンテナ名}

上記で再起動すると、configの変更が反映されません。

sudo lxc-stop {コンテナ名}
sudo lxc-start {コンテナ名}

コンテナにホストのディレクトリをマウントする

ホストの/var/lib/lxc/{コンテナ名}/configを編集します。

lxc.mount.entry = /home/motoki/workspace srv none bind 0 0

このように書くとホストの/home/motoki/workspaceの中身がコンテナの/srvの中にマウントされます。

複数のディレクトリをマウントしたいときはlxc.mount.entryを複数書けば成せます。

configを変更した後はコンテナの再起動が必要です。この再起動はLXCコンテナ内のOSの機能での再起動では不十分です。コンテナを再起動するが必要です。

コンテナ内でDockerを動かす

ホストの/var/lib/lxc/{コンテナ名}/configを編集します。

lxc.include = /usr/share/lxc/config/nesting.conf
lxc.apparmor.profile = unconfined
lxc.cap.drop =
lxc.cgroup.devices.allow = a
lxc.mount.auto = cgroup

configを変更した後はコンテナの再起動が必要です。この再起動はLXCコンテナ内のOSの機能での再起動では不十分です。コンテナを再起動するが必要です。