このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】コンテナ内でコマンドを実行する方法
ここでは、「MariaDBコンテナの構築」で作成したMariaDBコンテナに接続してコマンドを実行していきます。「MariaDBコンテナの構築」で解説している操作を行っていることが前提となります。
Docker Composeコマンドを使用してコンテナ内でコマンドを実行する方法には、「コンテナ内でコマンドを実行する方法」と「コンテナ内でシェルを立ち上げて実行する方法」があります。
方法1:コンテナ内でコマンドを実行する方法
作成したコンテナに対して、コンテナ内でコマンドを実行してコンテナを操作したい場合、以下の構文でコマンドを実行します。
【構文】docker compose exec <サービス名> <コンテナで実行させるコマンド>
Docker Composeでは、1つのプロジェクトで複数のサービスを扱うため、サービス名を指定してコマンドを実行させます。
・「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
・「docker compose exec testdb mariadb --version」コマンドを実行します。
このコマンドは、MariaDBのバージョンを確認するコマンドです。
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
コンテナ内でコマンドが実行されますが、すぐにホスト側のPowerShellに戻ります。
複数のコマンドを連続して実行したい場合には、少し煩わしいです。
方法2:コンテナ内でシェルを立ち上げて実行する方法
連続してコマンドを実行したいときに便利なのが、「コンテナ内でシェルを立ち上げて実行する方法」です。この方法は、コンテナ内で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@71df65586cb8:/#
コンテナ内でbashが立ち上がります。
以下のコマンドを実行します。
- 「ls」コマンド
- 「mariadb --version」コマンド
root@71df65586cb8:/# 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@71df65586cb8:/# mariadb --version
mariadb Ver 15.1 Distrib 10.8.8-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
root@71df65586cb8:/#
連続して、対話形式でコマンドを実行することができます。
MariaDBコンテナを起動させたので、せっかくなので、MariaDBのCLIを起動さしてみます。MariaDBのCLIを起動するには、MariaDBにログインする必要があります。
【構文】mariadb -u <ユーザー名> -D <データベース名> -p
・「mariadb -u test-user -D test-db」コマンドを実行します。
「Enter password」と表示されたら、「test-user」のパスワード「user-pass」を入力します。
root@71df65586cb8:/# mariadb -u test-user -D test-db -p
Enter password: # パスワードを入力
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
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]>
MariaDBのCLIが起動しました。
MariaDBのコマンドが入力できます。
ここでは、MariaDBのCLIを終了します。
・「\q」を入力します。
MariaDB [test-db]> \q
Bye
MariaDBのCLIが終了します。
続いて、コンテナ内のシェルを終了させます。
・「exit」と入力します。
root@71df65586cb8:/# exit
exit
PS C:\Users\joeac\Desktop\docker\mariadb>
コンテナ内のシェルが終了して、PowerShellに戻ります。
まとめ
このように、「docker compose exec
」を使用することで、Docker Composeを介してコンテナ内でコマンドを実行したり、インタラクティブなシェルを開いたりすることができます。
次の「新しいコンテナを作成してコマンドを実行する」では、停止したMariaDBコンテナでは、「docker compose exec」コマンドが実行できないため、「docker compose run」コマンドで新しいコンテナを作成して、そのコンテナ内でコマンドを実行させていきます。