前回は一般ユーザでコンテナを起動する際に利用するカーネルのユーザ名前空間について紹介しました。
今回はそのユーザ名前空間を使って実現している,
一般ユーザでコンテナを利用できるディストリビューション
第16回でユーザ名前空間で複数のIDのマッピングを行うためにshadowに導入された
一般ユーザでLXCコンテナを利用する場合は,
Ubuntu 14.
筆者は,
一般ユーザでコンテナを利用する場合のOSでの準備
一般ユーザでLXCコンテナを利用する場合は,
Ubuntu 14.
$ cat /etc/subuid /etc/subgid ubuntu:100000:65536 ubuntu:100000:65536
この例はubuntu
というユーザをインストール時に追加したときに設定され
たサブIDです。100000から65536個のIDがubuntu
で使えるように設定されています。
これとは別の範囲をサブIDとして設定したい場合や,usermod
コマンドを使います。
$ sudo usermod -v 200000-265535 -w 200000-265535 user
-v
はUIDのサブIDを,-w
はGIDのサブIDの範囲を設定します。
UbuntuのLXCパッケージ使用時の各種パス
一般ユーザでLXCを使ってコンテナを利用する際の設定ファイルなどの場所について第8回で示したのと同様の表を使って紹介しましょう。
ファイル/ |
root権限の時 | 一般ユーザの時 |
---|---|---|
システム設定ファイル | /etc/ |
~/.config/ |
コンテナのデフォルト設定ファイル | /etc/ |
~/.config/ |
テンプレートファイルの置き場所 | /usr/ |
(root権限の場合と同じ) |
コンテナ作成時のキャッシュの置き場所 | /var/ |
~/.cache/ |
コンテナの保存場所 | /var/ |
~/.local/ |
ログファイルの出力場所 | /var/ |
~/.local/ |
一般ユーザが使うネットワークインターフェースの設定ファイル | (なし) | /etc/ |
root権限の場合のパスは各ディストリビューションのコンパイル時のオプションに依存します。一方で一般ユーザの場合は,
テンプレートファイルに関しては,
一般ユーザでコンテナを利用する場合のLXCの設定
ネットワークインターフェースの設定
第16回で説明したように,
現時点では一般ユーザ権限で起動したコンテナと外部の通信をする際は第6回で説明したvethインターフェースを使う必要があります。
コンテナがこのvethインターフェースを使って外部と通信するためには,
一般ユーザでこの特権が必要な操作をするために,lxc-user-nic
というプログラムを使用します。
$ ls -l /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic -rwsr-xr-x 1 root root 34888 Sep 30 17:13 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
このlxc-user-nic
はUbuntuでは/usr/
にインストールされています
このプログラムは,/etc/
というファイルを参照して,
lxc-usernet
ファイルは以下のような書式で1行に1ユーザの設定を記述します。
(ユーザ名) (インターフェースのタイプ) (接続するブリッジ) (作成できるインターフェースの数)
たとえば,ubuntu
ユーザがvethインターフェースを10個まで作成でき,lxcbr0
に接続する場合は以下のようになります。
ubuntu veth lxcbr0 10
現時点ではインターフェースのタイプはveth以外は指定できません。