このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:コンテナ内でコマンドを実行する2つの方法(execとbash)

コンテナ内でコマンドを実行する2つの方法(execとbash)

Docker Composeを使ってコンテナを動かしていると、
「コンテナの中でちょっとコマンドを実行したいな」
という場面がよくありますよね。

そんなときに使うのが、docker compose exec コマンドです!
 この記事では、コマンドを実行する方法(exec)シェルを起動して操作する方法(bash) の2つを、やさしく解説していきます。

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

MariaDBコンテナを使って、実際にコマンドを実行してみましょう。
 前提として、前の記事の「環境変数で設定する!Docker ComposeによるMariaDBコンテナ構築手順」で作成したコンテナが起動していることが必要です。

MariaDBコンテナが起動していない場合は、以下のリンク先の作業を行ってください。

Docker超入門:環境変数で設定する!Docker ComposeによるMariaDBコンテナ構築手順

このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。 Docker超入門:環境変数で設定する!Docker Composeによる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:/#

この状態は、コンテナの中にログインしている状態 です!
ここで lsmariadb --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 wrapper

MariaDBのCLIにログインしてみよう!

せっかくMariaDBコンテナを起動しているので、
実際にMariaDBクライアント(CLI) にログインしてみましょう!

🔧 コマンド構文

mariadb -u <ユーザー名> -D <データベース名> -p

ここでは、test-user ユーザーで test-db にログインします。

mariadb -u test-user -D test-db -p

Enter 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 execdocker compose exec /bin/bash
用途単発でコマンドを実行対話的に連続実行
実行時間コマンド実行後すぐ終了手動でexitするまで続く
向いているケース状態確認・1回限りの操作詳細調査・手動操作
docker compose exec testdb mariadb --versiondocker compose exec testdb /bin/bash

どちらも便利ですが、状況に合わせて使い分けるのがコツです!

まとめ

今回学んだポイントを振り返ると👇

  • docker compose exec:単発コマンドを実行するのに最適
  • docker compose exec /bin/bash:対話的に複数コマンドを実行できる。
  • MariaDBのCLI に入ってSQL操作も可能

 Docker Composeを使えば、複数コンテナをまとめて管理できるだけでなく、中に直接入って確認や操作ができるのも大きな魅力です。

 次回は、停止中のコンテナに対して新しくコンテナを作ってコマンドを実行する方法(docker compose run) を紹介していきます!