LoginSignup
3
0
お題は不問!Qiita Engineer Festa 2023で記事投稿!

初心者がつまずくdocker-composeの up・run・start って何が違うの?

Posted at

はじめに

 「dockerってめっちゃ使われてるし、よし、勉強しよ」と思って始めた当初から、「え?何が違うの??」と戸惑ってました。曖昧なまま勉強を進めていると、何度もこの問いにぶつかるのでまとめようと思います。初心者の備忘録も兼ねてるので、間違いがあればご指摘ください。

公式をちゃんと読もう

 やっぱりこういう時には公式リファレンスです。

up ・ run ・ start の違いは何ですか?

一般的には docker-compose up が使われるでしょう。 up を使うと docker-compose.yml ファイル中で定義したサービスの開始または再起動を行います。デフォルトは「アタッチド」モードであり、全てのコンテナのログが画面上に表示されます。「デタッチド」モード( -d )では、Compose はコンテナを実行すると終了しますが、コンテナは後ろで動き続けます。

docker-compose run コマンドは「ワンオフ」(one-off;1つだけ、偶発的) または「アドホック」(adhoc;臨時)なタスクの実行に使います。実行するにはサービス名の指定が必要であり、特定のサービス用のコンテナを起動し、かつ依存関係のあるコンテナも起動します。 run の利用時は、テストの実行であったり、データ・ボリューム・コンテナに対するデータの追加・削除といった管理タスクです。 run コマンドは実際には docker run -ti を処理しており、コンテナに対してインタラクティブなターミナルを開き、コンテナのプロセスが終了すると、その時点の該当する終了コードを返します。

docker-compose start コマンドは既に作成済みのコンテナの再起動には便利です。しかし止まっているコンテナを起動するだけであり、新しいコンテナは作成しません。

 upは全サービスを開始or再起動してくれます。とりあえず一括で立ち上げて、全体に不備がないか確認できますね。

 runは一つのコンテナにのみフォーカスします。用途として想定されるのは、『テスト実行』『データの追加・削除』など。あるコンテナで色々作業したいときに便利ですね。depends_onなど依存関係があってもちゃんと考慮して立ち上げてくれます。

 startは元々ある停止中コンテナを再起動するだけです。事前にコンテナを作っておかないといけません。

まとめてみる

 公式とその他記事を参考にして、まとめてみました。

コマンド 対象 イメージ作成 コンテナ構築 コンテナ起動 いつ使うか
up 全てのサービス 初回のみ 初回のみ 全てのサービスを開始or再起動したい
run 1つのサービス あるコンテナを一から作り作業をしたい
start 作成済の全てのコンテナ 停止させていたコンテナを再起動させたい

 ちなみに、Dockerfileの更新を反映させてupを使いたい場合は、--buildオプションをつけます。すなわち上の表で、upの『初回のみ』となっている部分が--buildのおかげで○になりますね。

おわりに

 これでやっと迷わずコマンドを打てそうです。やっぱり記事にすると頭の中が整理されて、細かいところまでクリアになるので良いですねー!

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0