質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

10061閲覧

docker run で/sbin/init を起動時に与えるコマンドとする設定の意味

kon_ta

総合スコア81

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1グッド

2クリップ

投稿2017/07/09 08:10

###分からないこと

docker run --name mycent -dt centos /sbin/init

幾つかのサイトで書いてあるのですが、上のようにdockerの起動時に/sbin/initを指定する意味がよく分かりません。例えば以下のようにhttpdのイメージを使う際に

docker run --name myhttpd -p 8080:80 -dt httpd /sbin/init

のように指定するとapacheサーバが起動していないのかhttp://localhost:8080としても
ページにアクセスできません。
/sbin/initを付けていない場合はうまくいくのですが、そうなると、この/sbin/initはどのような場合に
利用するのでしょうか?

###追加の疑問点

docker run --name myhttpd -p 8080:80 -dt httpd

でコンテナを起動し、docker exec でコンテナに入ってsystemctl list-unit-files -t service
でサービス一覧を確認してもhttpdはありませんが、psコマンドで確認すると、httpdのプロセスがあるのが
確認できました。これはdockerの場合普通なのでしょうか?

どなたか知識のある方、回答宜しくお願い致します。

yodel👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この/sbin/initはどのような場合に利用するのでしょうか?

Docker コンテナは、1コンテナで 1プロセスを起動するような設計方針ですので、httpd プロセスのみを起動する方が一般的だと思います。

しかし、そうではなくDocker コンテナを VM のように使いたい、すなわち、/sbin/init から各プロセスを起動したいという人もいます。
複数サービスを起動できたり、従来の管理方法(サービスの On/Off、ログ、...)が使えたり、といった理由で。
なので、/sbin/init から起動するのであれば、httpd が自動起動するように設定するなど、それ用にコンテナイメージを作り込まなくてはいけません(skitoy4321 さんの回答にあるとおりです)。

docker exec でコンテナに入ってsystemctl list-unit-files -t serviceでサービス一覧を確認してもhttpdはありませんが、

/sbin/init を経由せずに直接 httpd を起動しているので、systemctl でのサービス On/Off の設定に関係なく、httpd が起動します。

投稿2017/07/10 13:55

TaichiYanagiya

総合スコア12146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

docker runのオプション後につける引数群は、イメージが指定したCMDを上書きする効果を持ちます。
https://docs.docker.com/engine/reference/commandline/run/

/sbin/initを付けると、"コンテナ内にある/sbin/initを実行する"という意味になります。
大抵のイメージでは/sbin/initはsystemdのリンクになっているようです。

以下のページでやり方等書いてあります。
https://developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/
想定される使用方法ですが、コンテナ内で複数プロセスを起動、管理したい場合が考えられますが、ハマリ所が多いので注意が必要です。上記の記事にもありますが、余り推奨されるものではないようです。
意図通りに動かないということであれば、docker logs [コンテナ名]で出力を見ることができるので、トラブル解決に役立つと思います。

psコマンドでプロセスが表示される件については、dockerのプロセスは完全に独立した仮想マシン内で実行されるのではなく、ネームスペースを分けて起動されるに過ぎないので、ホスト上のpsコマンドで表示されるのは正常です。
この辺りの話は、以下のページが詳しいです。
https://success.docker.com/KBase/Introduction_to_User_Namespaces_in_Docker_Engine

投稿2017/07/10 09:58

skitoy4321

総合スコア229

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問