前回の記事では、PHPが動くApacheのコンテナをhaconiwaを使って沢山起動しました。しかし、前回のコンテナは、
- 同じコンテナイメージがあるディレクトリを複数コンテナで共有している
- ホストから見てもuid/gidがapacheで全て起動している
- pidもホストとコンテナで共有している
というように、コンテナとホストの空間が混在した状況になっていました。そこで、今回はさらに踏み込んで、よりコンテナを独立した環境にするべく、
- 動的にコンテナイメージのtar.gzからそれぞれの独立したコンテナ用のディレクトリを用意する
- 動的に各コンテナにホストのuid/gidレンジを切り出し、コンテナ内ではuid=0からレンジの数だけマッピングする
- 例えば100個のuidレンジ(80000 ~ 80099)をコンテナ内では(0 ~ 99)とみなせるようにする
- 動的にマッピングしたuidの最初のuid(コンテナではrootに該当)をコンテナのrootfsのuidとなるようにファイルのオーナを変更する
- そうしないとファイルとuidがずれてパーミッションが適切に一致しない
- pidがコンテナ内で独立したidとなるように名前空間を分ける
- Apacheをpreforkで起動させて、コンテナ内でapacheユーザとして起動しても、ホストから見ると各レンジに分けたuidにマッピングされるようにする
を満たしたコンテナを、前回同様以下のようなApacheのportだけを環境変数で変化させるワンラインのシェルで、複数コンテナ起動できるようにしてみましょう。
for port in `seq 10001 10100`; do \ APACHE_PORT=$port haconiwa start phpinfo-test.haco; sleep 0.01; \ done続きを読む