LXC とホスト間でディレクトリを共有する
lxc で debian を作って、そこでnginx を運用していると、dockerで volumeの共有みたいにホスト・コンテナ間でディレクトリを共有したい。
docker だと EXPOSE で ディレクトリを、起動時にvolume を指定するだけでいけるけど、lxc はそこまでかんたんじゃない。
LXCでディレクトリの共有の場合
LXCでコンテナを起動していると、ユーザー名とuid がlinux の機能で擬似的にリマップされているので、同じディレクトリでもパーミッションをみるための ower / group のパーミッションがぐちゃぐちゃになるので、事前に設定しなくてはいけない。
/var/www/html をLXCで共有するとき
ubuntu の www-data(uid 33 / gid 33 ) のユーザーでホストとコンテナでディレクトリの共有をする。
/var/www/html
をホストとコンテナで共有する事を考えてみる。
lxc ホストが ubuntu で lxc のコンテナも ubuntu で 両方をdebian 系で統一して試した。 /var/www/ は www-data ユーザで扱うので www-data ユーザをマッピングする設定がいる。
uid のマッピング
最初に、uid をマッピングの準備をする
takuya@lxc-host:~$ id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data)
takuya@lxc-host:~$ lxc exec ubuntu1804 id www-data uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-dataがいないときは nginx / apacheがインストールされていないと思われる。
ホスト側で、www-data がオーナーのフォルダを作る
mkdir /opt/shared-www chown www-data: -R /opt/shared-www
まず、ホスト側からコンテナ(ゲスト)に見せるフォルダを作る
ホストとコンテナの間でIDをマッピングする。
lxc config set ubuntu1804 raw.idmap 'both 33 33'
ホストとコンテナの間で、ディレクトリを共有するデバイスを作る
コンテナにディレクトリを渡すときは、設定は「デバイス」あつかいになるので config device 関連にまとめらている。
lxc config device add ubuntu1804 config-www-dir disk source=/opt/shared-www/ path=/var/www/shared
lxc config device で設定を確認する。
takuya@lxc-host:~$ lxc config device show vps config-www-dir: path: /var/www/shared/ source: /opt/shared-www/ type: disk
再起動
最後に、IDマッピングを有効化し、 device disk を有効化するために、再起動する
lxc restart nginx
これでホストとゲストのコンテナの間でフォルダを共有することができる。
docker の expose のボリュームに比べて少し面倒ですね。
ポイント
device config でデバイスとして追加する。