😋
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のコマンドは、新しいコンテナを作成して、実行するものであり、既に存在するコンテナに対する操作ではありません。runはdocker createとdocker 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コマンドの操作ができそうです。
引用
Discussion