😋

docker start/docker runの違い

に公開

きっかけ

dockerの学習でdocker container runをたたくことがよくあったのですが、正直なところよくわからずたたいていました。Dockerを使用していくうちにdocker startというコマンドもあることを知り、何が違うの?!という疑問が出てきたため記録として残すために作成しました。

実行環境

  • Windows 11 Home
  • git version 2.43.0
  • Docker version 28.3.0

docker startとは

docker startのコマンドは、既存のコンテナを起動するものであり、コンテナを作成するものではありません。

docker runとは

docker runのコマンドは、新しいコンテナを作成して、実行するものであり、既に存在するコンテナに対する操作ではありません。rundocker createdocker startの動作を1つのコマンドで実行できるものと言えます。

docker startだけだと

docker startを使用すれば、既存のコンテナを実行するのみであるため、コンテナを何個も作成する必要はありません。ただdocker startを使用する際注意したいのは、対象のコンテナをバックグラウンドで再起動するのみのだということです。これだとログが確認できない、指示がコンテナに対してできないなど学習や開発などの場面では少し面倒な状態になります。
そのようなときはオプションを付与またはコマンドの追加実行をしましょう。

1.コンテナが既に存在し、フォアグラウンドの対話型で起動したい場合
オプションに-a, -iを付与して標準入力と標準出力をするようにする。

docker start -ai <container_name_or_id>

2.コンテナが既に存在し、かつすでにdocker startなどで起動済みの場合(バックグラウンドで起動中)
execコマンドを使用して起動中のコンテナの中に入る

docker exec -it <container_name_or_id> bash

所感

今回2つの違いを振り返ったことで、より適切にdockerコマンドの操作ができそうです。

引用

https://docs.docker.jp/engine/reference/commandline/start.html
https://docs.docker.jp/engine/reference/commandline/container_run.html
https://qiita.com/Mayumi_Pythonista/items/ea8ee2a0a9f6cbd90ef7

Discussion