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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

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

LXC

コンテナ

Q&A

1回答

5699閲覧

lxcのコンテナ停止が遅いのは何故なんでしょうか?

mint.cherry

総合スコア284

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

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

LXC

コンテナ

2グッド

0クリップ

投稿2016/02/17 01:59

編集2016/02/17 12:30

dockerのコンテナだとコンテナ内でexitしただけで、コンテナは停止します。停止に時間はかかりません。

lxcコンテナだとコンテナ内でexitしてもコンテナは停止しません。ホスト側でlxc-stopコマンドを使用します。停止にはかなり時間がかかります。そこで思ったのが下記の質問です。

ーー質問ーー
同じコンテナなのに停止する速度が違うのはなぜなのでしょうか?

予想

--

1.docker

dockerのps 1を見たら/bin/bashになっていました。
新しいシェルを起動させてコンテナを作成しているのかな?。シェルの場合だとexitでもシェルは停止されます。
shellは停止は早いです。以下を時間をかけずにスムーズに行えます。

$ps PID TTY TIME CMD 7274 pts/9 00:00:00 bash 7644 pts/9 00:00:00 ps $bash $ps PID TTY TIME CMD 7274 pts/9 00:00:00 bash 7649 pts/9 00:00:00 bash 7644 pts/9 00:00:00 ps $exit $ps PID TTY TIME CMD 7274 pts/9 00:00:00 bash 7644 pts/9 00:00:00 ps

2.lxc

次はlxcですps 1は/sbin/initでした。
(ちなみに、コンテナのOSはubuntu15.10のinitではなくsystemdです。)
コンテナの起動方法がshellではなく一から起動しています。
コンテナを停止する際にもdockerと比べて停止時間が遅いのは納得できます。

あくまで予想ですが、このように考えています。どうなのでしょうか?

よろしくお願いします。m(__)m

issei., ikuwow👍を押しています

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

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

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

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

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

guest

回答1

0

予想の通りです。

Dockerは「アプリケーションコンテナ」を起動するための仕組みであり、例えば docker run -t -i ubuntu /bin/bash みたいにした場合、コンテナ内では /bin/bash のみが起動します。つまり bash から exit したらコンテナは終了します。

LXC は一般的には「システムコンテナ」を動かします。通常のOSを起動させるのと同じで init を起動し、initの設定ファイルで指定したプログラムを起動します。つまり、複数のプログラムやデーモンが起動した状態ですので、それを通常のOSと同じく順番に停止していかなければなりません。なのでlxc-stopだったり、コンテナ内からshutdownコマンドを実行してコンテナを止めるのです。

もちろんDockerでinitを実行したり、LXCで単体のアプリケーションを起動したりすることもできます。

LXC/LXDでコンテナの停止があまりにも遅い場合(例えば30秒とか)は、コンテナ内のinitの設定がマズかったりする場合もあるので、チェックが必要ですね。(lxc-stopというのはコンテナ内のPID=1のプロセスに決められたシグナルを送るだけなのです。つまりPID=1のプロセスがそのシグナルを受け取っても何もしないようになっていた場合、lxc-stopは一定時間を待って強制的にkillしますので、停止に時間がかかります。

投稿2017/08/08 15:30

編集2017/08/08 15:31
ten_forward

総合スコア59

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問