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

【Docker入門】コンテナ内でコマンドを実行する方法

 ここでは、「MariaDBコンテナの構築」で作成したMariaDBコンテナに接続してコマンドを実行していきます。「MariaDBコンテナの構築」で解説している操作を行っていることが前提となります。

【Docker入門】MariaDBコンテナの構築

このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。 【Docker入門】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」コマンドで新しいコンテナを作成して、そのコンテナ内でコマンドを実行させていきます。

【Docker入門】新しいコンテナを作成してコマンドを実行する

このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。 【Docker入門】新しいコンテナを作成してコマンドを実行する  「コンテナ内でコマン…