docker compose exec|コンテナ内でコマンドを実行

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年9月)

✔当記事は以下のような方に向けて書かれています

「docker compose execコマンドの具体的な活用方法が知りたい」

「docker compose execコマンドの文法を理解し、自在に使いこなしたい」

「docker compose execコマンドの実際の使用例が見たい」

✔当記事でお伝えする内容

  • docker compose execコマンドの基本概念
  • docker compose execコマンドの記述方法とその活用法
  • docker compose execコマンドの具体的な実例

当記事では、docker-compose execコマンドの基本理解から、その各種オプションを駆使した高度な利用法までを詳細に解説し、それぞれについて具体的な例を挙げています。

是非、最後までお読みください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間17万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

docker compose execの基本概念

こちらでは、「docker-compose execの基本概念」についてお伝えしていきます。

  • docker-compose execとは何か?
  • なぜdocker-compose execを使うのか?

docker compose execとは何か?

docker compose execは、実行中のコンテナでコマンドを実行するためのコマンドです。

コンテナ内でデータベースのマイグレーションを実行するなどに使えます。

このコマンドを使用すると、特定のコンテナで操作を行う際に便利です。

なぜdocker compose execを使うのか?

docker compose execを使用するメリットは、実行中のコンテナで簡単にコマンドを実行できることです。

デバッグや特定のタスクを実行する際に時間を節約できます。

例として、アプリケーションのデバッグセッションを開始するときなどに使用されます。

docker compose execの使用方法

こちらでは、「docker compose execの使用方法」について詳しく説明します。

  • docker compose execの基本的な実行方法
  • docker-compose execの具体的な使用例

docker-compose execの基本的な実行方法

docker-compose execの基本的な実行方法はシンプルです。

コマンドラインから以下を入力します。

docker-compose exec サービス名 コマンド

指定したコンテナ内でコマンドが実行されます。

docker-compose execの具体的な使用例

具体的な使用例を見てみましょう。

まずは以下のようなdocker-compose.ymlでコンテナを起動してください。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "3030:80"

起動できたら、以下のコマンドを実行してみましょう。

docker compose exec web bin/bash

このコマンドは、”web”と名付けられたサービスのコンテナ内でbashシェルを起動するもの。

これにより、コンテナ内で直接操作できるようになります。

$ docker compose exec web bin/bash
root@c3fada7ce056:/# 

docker-compose execのコマンド解説

この部分では、docker compose execのコマンドについて深く掘り下げます。

  • 詳細解説:docker compose execの各部分
  • コマンド/bin/bashのまとめ

詳細解説:docker compose execの各部分

docker-compose execコマンドは主に3つの部分から構成されます。

  • execキーワード
  • サービス名
  • 実行するコマンド

サービス名はdocker-compose.ymlファイルで定義され、実行するコマンドはコンテナ内で実行されるものです。

よく使われるものとしては、「web」「db」などがあります。

コマンド/bin/bashのまとめ

/bin/bashはUnixシステムでよく使用されるシェルの一種。

docker compose execと一緒に使用されることが多いです。

docker compose exec web /bin/bash

webサービスのコンテナ内でbashシェルを開始します。

このシェルは強力で多機能なため、多くの開発者によって愛用されています。

docker compose execのオプションと拡張

こちらでは、docker compose execのオプションと拡張に焦点を当てます。

  • docker compose execの主要なオプション
  • docker compose execの追加機能

docker compose execの主要なオプション

以下は、docker compose execの主要なオプションを一覧表にまとめたものです。

オプションを理解すれば、さまざまな操作を制御できるようになります。

オプション名説明コマンド例
-d, --detach実行をバックグラウンドで行います。docker compose exec -d web nginx -s reload
--privileged特権を持つプロセスとしてコマンドを実行します。docker compose exec --privileged web some-command
--user <user>指定したユーザーとしてコマンドを実行します。docker compose exec --user www-data web ls /var/www
--index=<index>複数のコンテナがある場合、指定したインデックスのコンテナでコマンドを実行します。docker compose exec --index=2 web cat /etc/hosts
-TTTYを割り当てません(例: バックグラウンドでの実行時など)。docker compose exec -T web php artisan migrate
--env <key=value>環境変数を設定してコマンドを実行します。docker compose exec --env DEBUG=true web some-command
--workdir, -wコマンドを実行する作業ディレクトリを指定します。docker compose exec -w /app web ls

docker compose execの追加機能

docker compose execには、より高度な使用ケースをカバーする追加機能もあります。

特定の環境変数をコマンドラインから渡すなどが可能です。

以下のようなケースを考えてみましょう。

あなたは、webという名前のサービスで動作しているアプリケーションに対して、データベースのマイグレーションを実行したいと考えています。このマイグレーションツールは、DB_HOSTという環境変数を使用してデータベースのホスト名を取得します。しかし、この一回だけ、異なるデータベースホストを使用してマイグレーションを実行したいと考えています。

実行できるコマンドは以下のとおりです。

docker compose exec --env DB_HOST=alternate-db-host web python manage.py migrate

この機能を使用することで、開発やデプロイのプロセスをさらに効率的におこなえます。

docker-composeの概念と親コマンド

次の部分では、「docker-composeの概念と親コマンド」について詳しく見ていきます。

  • docker-composeとは
  • docker-composeコマンドとdocker composeコマンド
  • docker-compose execの親コマンドについて

docker-composeとは

docker-composeは、複数のコンテナを一緒に定義し、実行するためのツールです。

YAMLファイルを使用してサービス、ネットワーク、ボリュームなどを定義します。

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "3030:80"

これにより、一連のコンテナの管理が容易になります。

YAMLファイルについて詳しく知りたい方はこちらをご覧ください。

docker-composeコマンドとdocker composeコマンド

docker-composeとdocker composeについてお伝えします。

多くの記事では「docker-compose」が紹介され、当記事では主に「docker compose」で解説を進めているからです。

Docker CLI の compose コマンドは、 docker-compose コマンドとフラグの大部分をサポートします。このコマンドは、いずれ docker-comopse を置き換えるものとして期待されいます。

https://docs.docker.jp/compose/cli-command-compatibility.html

公式ページにあるとおり、docker composeのほうが新しく、ゆくゆくはdocker-composeを置き換えて行く予定とのこと。

今から始めるのであれば、docker composeがおすすめです。

docker compose execの親コマンドについて

docker compose execは、docker composeコマンドのサブコマンドのひとつ。

親コマンドとしてdocker composeが存在します。

ほかの子コマンドの例は以下のとおりです。

  • docker-compose upコマンド:YAMLファイルに定義されたサービスを開始
  • docker-compose downコマンド:サービスを停止

これらは、docker-compose execと同じファミリーに属しているといえるでしょう。

docker-compose execと関連コマンド

こちらでは、「docker-compose execと関連コマンド」について探求します。

  • docker-compose execとほかのコマンドの比較
  • 関連コマンドの使用例

docker-compose execとほかのコマンドの比較

docker compose execと似たコマンドにdocker compose runがあります。

しかし、execは実行中のコンテナでコマンドを実行するのに対して、runは新しいコンテナを作成して実行するもの。

docker compose run web bash

新しいwebコンテナでbashを開始します。

関連コマンドの使用例

関連コマンドの使用例として、docker compose logsを挙げます。

このコマンドは、サービスのログを表示するものです。

docker compose logs web

webサービスのログが表示されます。

これは、デバッグ時にdocker compose execと共に非常に役立つコマンドです。

よくある質問と回答

よくある質問についてまとめました。

これから学ぶ予定の方は目を通しておきましょう。

docker-compose execとdocker execの違いは何ですか?

違いは以下のとおりです。

  • docker compose exec:docker-compose.ymlで定義されたサービスに対して使用
  • docker exec:任意のコンテナに対して使用

以下はwebサービスのコンテナでbashを開始するコマンド。

docker compose exec web bash

以下は指定されたコンテナIDでbashを開始します。

docker exec container_id bash

docker-composeとdocker composeコマンドの違いってなんなの?

前述のとおり、docker composeの方が新しいコマンドです。

これから学ぶ方には、docker composeが良いでしょう。

Dockerの公式サイトでも、いずれはdocker composeがdocker-composeを置き換えていくことが言及されています。

compose コマンドと docker-compose の互換性 — Docker-docs-ja 24.0 ドキュメント

現状(2023年9月)時点では、どちらでも問題なく使えます。

まとめ

当記事では、docker-compose execコマンドについてお伝えしてきました。

docker compose execは、コンテナ化された環境での開発を迅速かつ効率的におこなうための強力なコマンドです。

docker compose exec db mysql -u root -p

dbサービスのコンテナでMySQLのルートユーザーとしてログインできます。

このような操作を容易にするため、開発者の間で広く使用されているのです。

タイトルとURLをコピーしました