Dockerの基本コマンドでよく使われる docker run
と docker start
。
どちらも「コンテナを起動するコマンド」に見えますが、実は目的や動作が全く異なります。
この記事では、Dockerのrun
とstart
の違いを明確に解説し、どちらをいつ使うべきかを初心者向けにやさしく紹介します。
これを読めば、混同しがちな2つのコマンドの使い分けがスッキリ理解できます!
docker runとは?

docker run
は、新しいコンテナを作成して、起動するコマンドです。
特徴:
- イメージから新たにコンテナを作成する
- 作成されたコンテナは初回起動される
- コマンドやオプションを細かく指定できる(
-d
,-p
,--name
など) - 毎回実行すると、新しいコンテナが作成される
例:
docker run -d -p 8080:80 --name web nginx
このコマンドは:
nginx
イメージを探す(ローカルになければDocker Hubからダウンロード)- そのイメージを元に新しいコンテナを作成
- コンテナに「web」という名前を付ける
- ホストの8080ポートをコンテナの80ポートにマッピング
- バックグラウンド(-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
このコマンドは:
- 「web」という名前の既存の停止中コンテナを探す
- そのコンテナを以前に指定した設定(ポートマッピングなど)で再起動する
オプション:
-a
(attach): コンテナの標準出力を表示-i
(interactive): 標準入力を開いたままにする
docker start
は docker run
と比べてオプションが少なく、シンプルです。
それは、設定はすでにコンテナ作成時に行われているためです。
実際の動きの違い
docker run | docker start | |
---|---|---|
処理の流れ | イメージ→新規コンテナ作成→起動 | 既存コンテナ→再起動 |
新規コンテナの作成 | する | しない |
既存コンテナの再利用 | できない | できる |
コマンド・設定の指定 | 起動ごとに細かく設定可能 | 過去の設定を使用(変更不可) |
イメージのダウンロード | 必要に応じて自動ダウンロード | 不要(既にコンテナ化済み) |
実行速度 | 比較的遅い(新規作成のため) | 比較的速い(再利用のため) |
よく使うタイミング | 初回起動時 | 停止後の再起動時 |
動作フロー:
docker run
の場合:
- イメージを確認(なければダウンロード)
- 新しいコンテナを作成
- 作成したコンテナを起動
- (終了時)コンテナは停止状態になる
docker start
の場合:
- 指定された名前/IDの停止中コンテナを探す
- そのコンテナを起動
- (終了時)コンテナは停止状態になる
よくある使い分けのパターン

実際の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回目の実行でエラーが発生する理由:
- 同じ名前のコンテナが既に存在する
- 同じポートを使おうとしている
正しい使い方:
# 一度作成したコンテナを停止
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 run
と docker start
はどちらも「コンテナを動かす」ためのコマンドですが、その意味と役割はまったく異なります。
ポイント:
コマンド | 主な役割 | 使うタイミング |
---|---|---|
docker run | 新規にコンテナを作成して起動 | 初めて起動する時、設定を変えたい時 |
docker start | 既存のコンテナを再起動 | 停止したコンテナを同じ設定で動かしたい時 |
理解する際のポイント:
run
は「新規作成+起動」の2ステップを実行start
は「既存コンテナの再起動」の1ステップのみ- 設定変更が必要なら
run
、設定を維持したいならstart
- コンテナはデータを保持するので、
start
で以前の状態を復元できる
この2つのコマンドの適切な使い分けを覚えることで、Docker操作がより直感的になり、効率的なコンテナ管理が可能になります。
初心者の方は特に、「新規作成か再開か」という観点で使い分けを意識すると理解しやすいでしょう。
使い分けを正しく理解しておくことで、Docker操作がスムーズかつ効率的になります!
コメント