【初心者向け】Dockerのstartとrunの違いとは?役割と使い分けをわかりやすく解説!

Docker

Dockerの基本コマンドでよく使われる docker rundocker start

どちらも「コンテナを起動するコマンド」に見えますが、実は目的や動作が全く異なります。

この記事では、Dockerのrunstartの違いを明確に解説し、どちらをいつ使うべきかを初心者向けにやさしく紹介します。

これを読めば、混同しがちな2つのコマンドの使い分けがスッキリ理解できます!

スポンサーリンク

docker runとは?

docker run は、新しいコンテナを作成して、起動するコマンドです。

特徴:

  • イメージから新たにコンテナを作成する
  • 作成されたコンテナは初回起動される
  • コマンドやオプションを細かく指定できる(-d, -p, --name など)
  • 毎回実行すると、新しいコンテナが作成される

例:

docker run -d -p 8080:80 --name web nginx

このコマンドは:

  1. nginxイメージを探す(ローカルになければDocker Hubからダウンロード)
  2. そのイメージを元に新しいコンテナを作成
  3. コンテナに「web」という名前を付ける
  4. ホストの8080ポートをコンテナの80ポートにマッピング
  5. バックグラウンド(-d)でコンテナを起動

主なオプション:

  • -d (detached): バックグラウンドで実行
  • -p 8080:80 (publish): ポートマッピング(ホストの8080→コンテナの80)
  • --name web: コンテナに名前を付ける
  • -v /host/path:/container/path: ボリュームマウント
  • -e KEY=VALUE: 環境変数の設定

docker startとは?

docker start は、すでに存在している停止中のコンテナを再起動するコマンドです。

特徴:

  • 既にあるコンテナだけが対象(新規作成はしない)
  • 停止状態(Exited)のコンテナを起動する
  • 作成時に指定した設定(ポート、名前、ボリュームなど)をそのまま使用
  • コンテナの名前やIDを指定して使用

例:

docker start web

このコマンドは:

  1. 「web」という名前の既存の停止中コンテナを探す
  2. そのコンテナを以前に指定した設定(ポートマッピングなど)で再起動する

オプション:

  • -a (attach): コンテナの標準出力を表示
  • -i (interactive): 標準入力を開いたままにする

docker startdocker run と比べてオプションが少なく、シンプルです。

それは、設定はすでにコンテナ作成時に行われているためです。

実際の動きの違い

docker rundocker start
処理の流れイメージ→新規コンテナ作成→起動既存コンテナ→再起動
新規コンテナの作成するしない
既存コンテナの再利用できないできる
コマンド・設定の指定起動ごとに細かく設定可能過去の設定を使用(変更不可)
イメージのダウンロード必要に応じて自動ダウンロード不要(既にコンテナ化済み)
実行速度比較的遅い(新規作成のため)比較的速い(再利用のため)
よく使うタイミング初回起動時停止後の再起動時

動作フロー:

docker run の場合:

  1. イメージを確認(なければダウンロード)
  2. 新しいコンテナを作成
  3. 作成したコンテナを起動
  4. (終了時)コンテナは停止状態になる

docker start の場合:

  1. 指定された名前/IDの停止中コンテナを探す
  2. そのコンテナを起動
  3. (終了時)コンテナは停止状態になる

よくある使い分けのパターン

実際のDocker運用では、以下のようなパターンで使い分けるのが一般的です。

シーン使うコマンド理由
初めてコンテナを起動するdocker runイメージから新規コンテナを作成する必要があるため
停止したコンテナを再度起動docker start既存の設定を再利用できるため
設定をカスタマイズして起動docker runポートやボリュームなど細かく指定できるため
以前と同じ環境を復元したいdocker start停止前と同じ状態を保持しているため
使い捨てのコンテナを実行docker run --rm一時的な利用で終了後に自動削除できるため
定期的なバッチ処理docker start + docker stop同じコンテナを再利用できるため

具体的な使用例:

Webサーバーの初回設定:

# 初回: runで新規作成&起動
docker run -d -p 8080:80 --name webserver nginx

# サーバーを停止
docker stop webserver

# 再開: startで再起動
docker start webserver

開発環境での使い分け:

# 開発環境の構築(初回)
docker run -d -p 3000:3000 -v $(pwd):/app --name myapp node:14

# 作業終了時に停止
docker stop myapp

# 翌日の作業再開時
docker start myapp

よくある間違いと注意点

間違い1: docker start にイメージ名を指定

docker start nginx  # エラー!

このエラーは、nginxがイメージ名であって、コンテナ名やIDではないために起こります。

正しい使い方:

# まずrunでコンテナを作成
docker run --name my-nginx -d nginx

# 停止
docker stop my-nginx

# 再起動(コンテナ名を指定)
docker start my-nginx

間違い2: docker run を繰り返し実行

docker run -d -p 8080:80 --name webserver nginx
# 同じコマンドをもう一度実行
docker run -d -p 8080:80 --name webserver nginx  # ❌ エラー!

2回目の実行でエラーが発生する理由:

  1. 同じ名前のコンテナが既に存在する
  2. 同じポートを使おうとしている

正しい使い方:

# 一度作成したコンテナを停止
docker stop webserver

# 再開するならstart
docker start webserver

# 別のコンテナを作るなら異なる名前とポート
docker run -d -p 8081:80 --name webserver2 nginx

間違い3: 設定を変更したいときにstartを使う

コンテナのポートマッピングや環境変数などの設定は、作成時(run時)にのみ指定可能です。

# 既存のコンテナに対して
docker start -p 8081:80 webserver  # エラー!

正しい対応:

# 古いコンテナを削除
docker rm -f webserver

# 新しい設定で作り直す
docker run -d -p 8081:80 --name webserver nginx

まとめ

docker rundocker start はどちらも「コンテナを動かす」ためのコマンドですが、その意味と役割はまったく異なります。

ポイント:

コマンド主な役割使うタイミング
docker run新規にコンテナを作成して起動初めて起動する時、設定を変えたい時
docker start既存のコンテナを再起動停止したコンテナを同じ設定で動かしたい時

理解する際のポイント:

  • runは「新規作成+起動」の2ステップを実行
  • startは「既存コンテナの再起動」の1ステップのみ
  • 設定変更が必要ならrun、設定を維持したいならstart
  • コンテナはデータを保持するので、startで以前の状態を復元できる

この2つのコマンドの適切な使い分けを覚えることで、Docker操作がより直感的になり、効率的なコンテナ管理が可能になります。

初心者の方は特に、「新規作成か再開か」という観点で使い分けを意識すると理解しやすいでしょう。

使い分けを正しく理解しておくことで、Docker操作がスムーズかつ効率的になります!

コメント

タイトルとURLをコピーしました