Ubuntu 15.04 で一般ユーザで LXC コンテナを実行する
Ubuntu 15.04 で行った。 また、Ubuntu 14.04 上でも同じようにして LXC コンテナを作成、実行できることを確認した。
パッケージのインストール
apt-get install lxc uidmap
~/.config/lxc/default.conf
ディレクトリ ~/.config/lxc がなければ
mkdir ~/.config/lxc
で作成する。~/.config/lxc/default.conf を作成して
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx
lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536
とする。
/etc/lxc/lxc-usernet
/etc/lxc/lxc-usernet に
<USERNAME> veth lxcbr0 10
を追加する。
コンテナの作成
Ubuntu 14.04 のコンテナを作成する。
lxc-create -t download -n p1 -- -d ubuntu -r trusty -a amd64
p1 という名前のコンテナができていることを
lxc-ls --fancy
として確認する。
コンテナの実行
p1 というコンテナを実行するには
lxc-start -n p1 -d
とする。
コンテナ実行時のトラブル
はじめは
lxc-start -n p1 -d
としたときに
Permission denied - could not access /home/<USERNAME>. Please grant it 'x' access, or add an ACL for the container root.
というエラーが出てコンテナが起動しなかった。 ホームディレクトリのパーミッションを 700 にしてあったためだった。
chmod +x ~
chmod +x ~/.local
chmod +x ~/.local/share
として実行権限をつける。
コンテナのディレクトリ
このコンテナのファイルは ~/.local/share/lxc/p1 以下に置いてある。
lxc-stop -n p1
でコンテナの実行を終了する。
コンテナの root ユーザ
ubuntu という名前のユーザが存在するのだが、パスワードがわからなかった (セキュリティのために設定されていないというようなことが書いてあるが詳しくは理解していない)。 lxc-attach を使ってパスワードを再設定する。
lxc-attach -n p1
で端末にアクセスして
passwd ubuntu
lxc-attach だと端末の環境変数がうまく設定されないようなので以降は SSH を使用してアクセスする。
apt-get install openssh-server
で SSH サーバをインストールする。
コンテナの複製
コンテナ p1 を複製して p2 にするには
lxc-clone p1 p2
とする。
コンテナの停止
コンテナ p1 を停止するには
lxc-stop -n p1
とする。
コンテナ起動時に IP アドレスを指定する
lxc-start のオプションでコンテナの IP アドレスを指定できる。
lxc-start -n p1 -d -s lxc.network.ipv4=10.0.3.10
とすると、コンテナの IP アドレスが 10.0.3.10 になる。