Pulog

サクッとDockerでMySQL環境を立ち上げてDBをインポートするワンライナー

Spring Data JPA の記事が思った以上に進まないので、とりあえずDockerの知見を先に書いておこうと思います。

案件で開発の際に、ローカル環境で開発しているのにDBは社内共有DBを利用している状態だったので、DBもローカルで建てたい!

と思い、ほぼ知識皆無なDockerをこのタイミングで触ってみて、DBをDockerで建ててみることにしました。

とにかくサクッと作りたかったので、Docker composeを使わずに済ませてしまいます。

$ docker run -d -v "$(pwd)/schema:/docker-entrypoint-initdb.d" --name test_name --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci -e MYSQL_DATABASE=test_db -e MYSQL_ROOT_PASSWORD=test_root -p 3306:3306 mysql:8.0

コマンド解説

  • -d
    • デタッチド・モード(バックグラウンド)で実行
  • -v "$(pwd)/schema:/docker-entrypoint-initdb.d"
    • コロンを挟んで左側 $(pwd)/schema がWindows側のディレクトリ指定、右側の /docker-entrypoint-initdb.d がDockerコンテナ側のディレクトリ指定となっている
    • MySQLのDockerイメージの場合、 /docker-entrypoint-initdb.d に格納された .sql .sh .sql.gz なファイルを自動的に読み込んでくれるので、[Windowsのカレントディレクトリ]/schema にMySQLのコンテナを立ち上げる際にインポートしておいて欲しいデータを格納する(Windows側のディレクトリはどこでも良い)
  • --name test_name
    • コンテナ名の指定、未指定でも良い
  • --character-set-server=utf8mb4
  • --collation-server=utf8mb4_unicode_ci
    • Docker公式のMySQLイメージはデフォルトの文字コードが latin1 なので、 UTF-8に変更している、しないと日本語が文字化けするなどの問題が発生してしまう可能性がある
  • -e MYSQL_DATABASE=test_db
    • MySQLのコンテナを立ち上げる際に作成するDB名を指定(名前は任意)
    • ここで指定したデータベースに先程の /docker-entrypoint-initdb.d に格納されるデータがインポートされる
  • -p 3306:3306
    • Dockerコンテナの外(クライアントマシン)側に対して3306ポートで疎通できるようにする
    • これでMySQL WorkBenchでアクセスしたりすることができるようになる
  • mysql:8.0
    • 利用するコンテナのイメージとそのバージョン(タグ)を指定する

なお、上記のコマンド例はMySQLを想定しているが、 mysql の箇所は mariadb でも動くはずです(未確認)。

Docker、これからガンガン活用していきたいと思います。