このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Docker超入門:コンテナ内でコマンドを実行する2つの方法(execとbash)

コンテナ内でコマンドを実行する2つの方法(execとbash)
Docker Composeを使ってコンテナを動かしていると、
「コンテナの中でちょっとコマンドを実行したいな」
という場面がよくありますよね。
そんなときに使うのが、docker compose exec コマンドです!
この記事では、コマンドを実行する方法(exec) と シェルを起動して操作する方法(bash) の2つを、やさしく解説していきます。

コンテナ内でコマンドを実行する(exec)

MariaDBコンテナを使って、実際にコマンドを実行してみましょう。
前提として、前の記事の「環境変数で設定する!Docker ComposeによるMariaDBコンテナ構築手順」で作成したコンテナが起動していることが必要です。
MariaDBコンテナが起動していない場合は、以下のリンク先の作業を行ってください。
ここで使うのが docker compose exec コマンドです。
これは、既に稼働中のコンテナ内で1回だけコマンドを実行したいときに使います。
🔧 コマンド構文
docker compose exec <サービス名> <コンテナで実行するコマンド>Composeを使う場合、サービス名(compose.yamlで定義した名前)を指定するのがポイントです。
📘例:MariaDBコンテナでlsコマンドを実行
docker compose exec testdb ls実行結果はこんな感じです👇
PS C:\Users\joeac\Desktop\docker\mariadb> docker compose exec testdb ls
bin dev etc lib lib64 media opt root sbin sys usr
boot docker-entrypoint-initdb.d home lib32 libx32 mnt proc run srv tmp varこれで、コンテナ内のルートディレクトリが一覧表示されました。
📘例:MariaDBのバージョンを確認
docker compose exec testdb mariadb --version実行結果👇
PS C:\Users\joeac\Desktop\docker\mariadb> docker compose exec testdb mariadb --version
mariadb Ver 15.1 Distrib 10.8.8-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapperこのように、コンテナ内のコマンドを1回実行して結果を確認できます。
ただし、この方法ではコマンドを1つ実行するたびに終了してしまうので、
連続操作には少し不便です。
コンテナ内でシェルを起動して操作する(bash)

もしコンテナの中に入り込んで、複数のコマンドを続けて実行したい 場合は、/bin/bash を使ってコンテナ内にログインします。
🔧 コマンド構文
docker compose exec <サービス名> /bin/bash📘実行例
docker compose exec testdb /bin/bash実行すると、プロンプトが変わります👇
PS C:\Users\joeac\Desktop\docker\mariadb> docker compose exec testdb /bin/bash
root@a1ce233ce765:/#この状態は、コンテナの中にログインしている状態 です!
ここで ls や mariadb --version など、好きなだけコマンドを実行できます。
📘連続実行の例
root@a1ce233ce765:/# ls
bin dev etc lib lib64 media opt root sbin sys usr
boot docker-entrypoint-initdb.d home lib32 libx32 mnt proc run srv tmp var
root@a1ce233ce765:/# mariadb --version
mariadb Ver 15.1 Distrib 10.8.8-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapperMariaDBのCLIにログインしてみよう!
せっかくMariaDBコンテナを起動しているので、
実際にMariaDBクライアント(CLI) にログインしてみましょう!
🔧 コマンド構文
mariadb -u <ユーザー名> -D <データベース名> -pここでは、test-user ユーザーで test-db にログインします。
mariadb -u test-user -D test-db -pEnter password: と聞かれたら、パスワード user-pass を入力します。
実行結果
root@a1ce233ce765:/# mariadb -u test-user -D test-db -p
Enter password:ログインに成功すると、次のようにMariaDBのプロンプトが表示されます👇
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.8.8-MariaDB-1:10.8.8+maria~ubu2204 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [test-db]>ここでSQLを直接入力してテストできます。
💡CLIを終了するには?
MariaDB [test-db]> \q
Bye
root@a1ce233ce765:/#これでMariaDBからログアウトします。
続いて、bashシェルからも抜けましょう。
root@a1ce233ce765:/# exit
exit
PS C:\Users\joeac\Desktop\docker\mariadb>これでホスト側のPowerShellに戻ります。
execとbashの違いをまとめよう!
| 項目 | docker compose exec | docker compose exec /bin/bash |
|---|---|---|
| 用途 | 単発でコマンドを実行 | 対話的に連続実行 |
| 実行時間 | コマンド実行後すぐ終了 | 手動でexitするまで続く |
| 向いているケース | 状態確認・1回限りの操作 | 詳細調査・手動操作 |
| 例 | docker compose exec testdb mariadb --version | docker compose exec testdb /bin/bash |
どちらも便利ですが、状況に合わせて使い分けるのがコツです!
まとめ
今回学んだポイントを振り返ると👇
- docker compose exec:単発コマンドを実行するのに最適
- docker compose exec /bin/bash:対話的に複数コマンドを実行できる。
- MariaDBのCLI に入ってSQL操作も可能
Docker Composeを使えば、複数コンテナをまとめて管理できるだけでなく、中に直接入って確認や操作ができるのも大きな魅力です。
次回は、停止中のコンテナに対して新しくコンテナを作ってコマンドを実行する方法(docker compose run) を紹介していきます!
