🔖

【Docker】docker exec と docker run の違いを整理する

に公開

はじめに

Dockerを使っていると、コンテナの中で作業したいときに
docker execdocker 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 rundocker exec は似ているようで役割がまったく違います。

  • 新しいコンテナを作るなら docker run
  • 既存のコンテナに入るなら docker exec

この違いを押さえておけば、Dockerでの操作がスムーズになるはずです。

Discussion