Posted at

DockerとCentOS7のハマりどころ

More than 3 years have passed since last update.

ハマりこんだので

http://qiita.com/yunano/items/9637ee21a71eba197345

に詳しい情報があるのでまずは見て欲しい。

Dockerは1.5。

以前はCentOS6.5で利用していたので困った。


コンテナイメージにCentOS7を使う場合


systemdの代わりにfakesystemdが

なのでsystemdを使いたければまずは排除する必要がある。

普通にDockerfileでyum使ってfakesystemdを消してsystemdを使えば問題ない。


/sbin/initを使ってsystemdを起動するとattachコマンドは使えない

docker attachコマンドは使えませんねはい。

nsenterコマンドで入る必要がある。


/sbin/initを使ってsystemdを起動すると環境変数は渡せない。

そうなんですね。-eオプションはタダの飾りです。

http://qiita.com/hnakamur/items/f4b270b535d0b8ec3029

にもある

/sbin/init systemd.setenv=NAME=VALUE

を実施するが効果はなかった。

したがって、他のプロダクションを使用しない場合はコンテナ起動後に何らかの処理をかまさないとコンテナ自身に情報を渡せない。辛い。


力技での解決策。

docker inspect で見れる情報をdockerの中から見る!

http://qiita.com/gongo/items/0ca1e58019e4cbd8cc77

これを試したが、-vオプションで見るボリュームは

root:rootでないと見えなくなっている模様。

/var/run/docker.sockはroot:dockerなのでコンテナ内からは見えなくなってます。

ただ、ホスト側は当然見えるのでncとjqでホスト名さえわかればdockerAPIを外部に公開しなくても/var/run/docker.sockから見える。


おまけ

serfをsystemdで起動する

http://pocketstudio.jp/log3/2013/11/06/howto_run_serf_with_systemd/

serfなどを使ってその後の処理を何とかするしかないように思う。


ホストがCentOS7の場合


特権で起動しないとSystemdが使えない。

ホストがSELinuxの状態に寄ってdocker runのオプションを追加する必要がある。


  • 有効の場合 --privilegedtoka

  • 無効の場合 --cap-add=SYS_ADMIN

apparmorの場合はまだ確認できていない。


firewalldを殺してiptablesに切り替えないとポートフォワードが使えない

気がつくまでガッツリfirewalldの設定をしてしまった。

Docker側が対応してない模様。Dockerのチェーンが消えてしまう。


違う世界

多分、Docker側が想定している使い方から逸脱しいるように思われる。

フルスタックのサービス起動は実の所どうでもよく(よくないサービスもあるだろうが)、systemdは一切利用せずにdocker runで指定するコマンド(シェル)で解決する、其れもシンプルにが基本に思われる。

(基本nohup等を使えばデーモン起動は可能なので其れで対処するなど。)

もちろん依存関係が絡みあうと目も当てられないのでディストリビューションの作法に従っていたりはするが、ps auxでコンテナ内で見えるプロセスを見えると非常に少ないため気にする必要はあるのかは疑問は残る。

ただ、VMの召喚が存分にできるクラウドとの融通を考えると悩ましい。

お金の自由が効くならVMに絞ったほうが早いと思っている。