Dockerコンテナで、SQLコマンドを実行する。
技術解説
Dockerコンテナで、
SQLコマンドを実行する
DockerコンテナでXiboを動かしているときに、Xiboのデータベースの内容をチェックしたり、書き換えたりしたりする必要に迫られたことはありませんか?
筆者もSigme Cloudの開発中に何度もこの状況に遭遇しました。
この問題の解決法がXibo社のブログに紹介されていたので、以下にその翻訳を掲載します。
問題のトラブルシューティング中に、DockerコンテナでデータベースのSQL文を実行するように頼まれたり、あるいは別の目的で自分でSQL文を実行したいと思うことがあるかもしれません。
これらのどちらかを行うには、以下の2つのオプションがあります。
- コマンドラインを利用する
- PhpMyAdminを使ってGUIで作業する
コマンドラインでの対応
dockerコンテナ内でステートメントを実行する前に、コンテナ名を確認する必要があります。これは、docker ps
コマンドを使用して行うことができます。
その結果、実行中のdockerコンテナのリストが表示され、そのうちの1つがWebコンテナであることがわかります。フォルダ名によって、以下のように表示されます:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28a6c69ec7be xibosignage/xibo-cms:latest "/entrypoint.sh" 2 weeks ago Up 16 seconds 0.0.0.0:80->80/tcp xibocms_web_1
a8fdca5d77dd xibosignage/xibo-xmr:latest "/entrypoint.sh" 2 weeks ago Up 17 seconds 0.0.0.0:9505->9505/tcp, 50001/tcp xibocms_xmr_1
a21e1b4c6558 mysql:5.6 "docker-entrypoint..." 6 weeks ago Up 17 seconds 0.0.0.0:3315->3306/tcp xibocms_db_1
コンテナ名の中にwebが含まれているものを探します。上の例では、xibocms_web_1です。そして、以下のようにnameを代入してください:
docker exec -ti name bash
これで、Webコンテナ内にシェルが表示されます。MySQLに接続するために、次のように実行します。
mysql -u cms -h mysql -p cms
パスワードは、Xiboのインストール時にconfig.envで設定したものが使われます。
データを直接変更することは避けてください。そうするとサポートができなくなるからです。多くのテーブルが互いに参照し合っているため、特別な依頼がない限り、直接削除や変更を行うことは危険です。
PhpMyAdminでの対応
PhpMyAdminをDockerコンテナとして追加し、データベースにアクセスする必要があるときに起動・停止できるようにすることができます。
2つのものが必要です。まず、MySQLコンテナの名前ですが、これは上記のコマンドラインの指示通りにdocker psを実行することで得られます。cms-dbが名前に含まれるものが必要です。2つ目は、MySQLコンテナが動作しているネットワークの名前です。これは、docker network ls
を実行することで取得できます。
例えば:
- コンテナ名:
xibodocker_cms-db_1
- ネットワーク名:
xibodocker_default
PHPMyAdminを利用するためのポートを選択する必要があります。任意のポート番号を選択できますが、私はXibo専用のシステムのほとんどに適している8080を選択しました
PhpMyAdmin用のDockerコンテナを作成し、以下のステートメントを実行します:
docker run --name phpmyadmin -d --network=xibodocker_default --link xibodocker_cms-db_1:db -p 8080:80 phpmyadmin/phpmyadmin
PHPMyAdmin は 8080 番ポートで動作し、ユーザ名 cms と config.env で指定したパスワードでログインすることになります
PHPMyAdmin を使い終わったら、docker stop phpmyadmin
を実行して一時的に停止し (その後、必要に応じて docker start phpmyadmin で再び起動します)、 docker rm phpmyadmin
を実行して完全に削除することが可能です。
英語での原本はこちら