システムの起動時にDockerコンテナーを自動的に起動する良い方法は何ですか?
Ubuntu 14.04でこれを行うための推奨される方法はありますか?
私は過去にsupervisord
を使用してWebアプリを自動起動しました。しかし、それはDockerにとって正しいことのようには思えません。
どうやら、Dockerコンテナーを自動起動する現在の方法( Docker 1.2から )は restartポリシー を使用することです。これは、起動時にDockerがコンテナーの開始を処理し、コンテナーの終了時にコンテナーを再起動する方法を制御します。これまで「always」オプションを使用してきましたが、システムの起動時にDockerがコンテナーを自動起動することを確認できます。
Sudo docker run --restart=always -d myimage
再起動ポリシーDocker実行で--restartフラグを使用して、終了時にコンテナーを再起動する方法または再起動しない方法の再起動ポリシーを指定できます。
no-終了時にコンテナを再起動しません。
on-failure-コンテナがゼロ以外の終了ステータスで終了した場合にのみ、コンテナを再起動します。
always-終了ステータスに関係なく、常にコンテナを再起動します。
障害時ポリシーを使用しているときにDockerがコンテナーの再起動を試行する最大回数を指定することもできます。デフォルトでは、Dockerはコンテナを再起動しようとします。
$ Sudo docker run --restart=always redis
これにより、redisコンテナーが常に再起動ポリシーで実行されるため、コンテナーが存在する場合、Dockerは再起動します。
$ Sudo docker run --restart=on-failure:10 redis
これにより、再起動ポリシーがon-failureで最大再起動カウントが10のredisコンテナーが実行されます。redisコンテナーがゼロ以外の終了ステータスで10回以上連続して終了すると、Dockerはコンテナーの再起動の試行を中止します。最大再起動制限を指定することは、障害時ポリシーでのみ有効です。
Dockerには このページ があり、upstartとsystemdでそれを行う方法を説明しています。私はそれがDockerにとって正しいことのように思われないことに同意します。彼らの解決策は、docker start
を実行することです。これは、コンテナーが既に作成されていることを前提としています。私は、upstartスクリプトでdocker run --rm
を実行するか(イメージからのまったく新しいプロセスとコンテナーのように扱う)、または起動時にdockerデーモンにコンテナー自体を再起動させる(デフォルトでは他に何もしない場合)。 Upstartには、プロセスの開始/停止が簡単にできるという利点がありますが、Dockerの開始/停止でもそれが可能です!
Upstartスクリプトが機能する前に、ユーザーに手動でコンテナー(すべての正しいポート/ボリュームバインディングを含む)を強制的に作成させるのは奇妙だと思います。
しかし、それはDockerにとって正しいことのようには思えません。
何故なの?
私はこれにスーパーバイザを使用し、大きな成功を収めています。
知っていること、機能すること、簡単に維持および理解できるものを使用してください。