🔖
【Docker】docker exec と docker run の違いを整理する
はじめに
Dockerを使っていると、コンテナの中で作業したいときに
docker exec
と docker run
どちらを使えばいいか、迷うことがあります。
見た目は似ていますが、役割は大きく異なります。
本記事では、両者の違いを整理します。
docker run
docker run
は、新しいコンテナを作成して起動するコマンドです。
新しくコンテナを立ち上げたいときに使います。
例:Nginxコンテナを新規起動する場合
docker run -d --name web-server -p 8080:80 nginx:latest
- イメージ(ここでは
nginx:latest
)から新しいコンテナを作成 - コンテナ名を
web-server
に指定 -
-d
でバックグラウンド実行 -
-p 8080:80
でホストのポート 8080 をコンテナのポート 80 にマッピング
docker exec
docker exec
は、すでに起動しているコンテナの中でコマンドを実行するコマンドです。
新しいコンテナは作らず、既存のコンテナに「入って作業する」イメージです。
例:Nginxコンテナの中に入って bash を実行
docker exec -it web-server bash
-
-it
で対話モードを有効化 -
web-server
という既存のコンテナ内でbash
を実行
違いのまとめ
コマンド | 目的 | 使うタイミング | 例 |
---|---|---|---|
docker run |
新しいコンテナを起動 | まだコンテナが存在しないとき | docker run -d --name web-server nginx:latest |
docker exec |
既存コンテナでコマンドを実行 | コンテナがすでに起動中のとき | docker exec -it web-server bash |
実務での使い分け
-
よく使うのは
docker exec
→ コンテナに入ってデバッグ、ログ確認、設定ファイルの確認など -
docker run
は最初の1回だけ
→ 新しいコンテナを立ち上げるとき
おわりに
docker run
と docker exec
は似ているようで役割がまったく違います。
- 新しいコンテナを作るなら
docker run
- 既存のコンテナに入るなら
docker exec
この違いを押さえておけば、Dockerでの操作がスムーズになるはずです。
Discussion