(最終更新月:2023年9月)
✔当記事は以下のような方に向けて書かれています
「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 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 |
-T | TTYを割り当てません(例: バックグラウンドでの実行時など)。 | 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 の
https://docs.docker.jp/compose/cli-command-compatibility.htmlcompose
コマンドは、docker-compose
コマンドとフラグの大部分をサポートします。このコマンドは、いずれdocker-comopse
を置き換えるものとして期待されいます。
公式ページにあるとおり、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を置き換えていくことが言及されています。
現状(2023年9月)時点では、どちらでも問題なく使えます。
まとめ
当記事では、docker-compose execコマンドについてお伝えしてきました。
docker compose execは、コンテナ化された環境での開発を迅速かつ効率的におこなうための強力なコマンドです。
docker compose exec db mysql -u root -p
dbサービスのコンテナでMySQLのルートユーザーとしてログインできます。
このような操作を容易にするため、開発者の間で広く使用されているのです。