長いことVagrantで開発用DBをローカルに立ち上げたりしていたんですが、プロジェクト単位でDockerに移行していた。(docker-compose.yml に一緒に記述しておくと簡単にアプリケーションから接続できる。)
このようなデータなどを一時的に格納したりするお便利ローカルDBはVagrantで立ち上げていたんだけど、考えてみたらそれもDockerにできるのであった。(JavaのようなIDEで立ち上がるものはなんとなくVMに接続していた。)
docker-compose.yml
version: '3.5'
services:
db:
image: mariadb
restart: always
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: example
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
標準入力でSQLを流し込む
セットアップ用のSQLを流すときは、docker-compose exec
を使って標準入力で流し込めます。
cat schema.sql | docker-compose exec -T db mysql -u user example -ppassword
クライアントなしでDBに接続する
ローカルにmysql
クライアントがなくても接続できます。
docker-compose exec db mysql -u user example -ppassword
外部から接続する
ホストはlocalhost
ではなく0.0.0.0
です。
mysql -h 0.0.0.0 -u user example -ppassword
おわり
まあめったに使わないんだけど、Ubuntu 19.10あたりにしたらVagrant動かなくなっちゃってやめました。あとは検証用VM(Windowsなど)をVagrantで立ち上げられるようにしていたので、そのへんはまだVMで立ち上げないとな。