導入
今回も新しいことを発信しません。(えっへん)
どちらかというみなさんがやってきたことを自分なり再現、ブリコラージュした内容となります。
というよりも備忘録と手順書のような感じです。
記述きっかけは、新人用にSQLを気軽に遊びる用にするにはどうすればいいんだろうと思った際、環境構築は手頃にできるのとローカルを汚さず
手頃に構築できるdocker(dockerの知識はいりますが)を使ってやればいいじゃないと思い構築しました。
また、docker-composeファイルに環境変数をどうやって紐づけるのかという方法も解説しています。
導入時の環境
docker-compose 1.29.2
mysql: 8.0.30
ファイル準備
今回用意したファイルはgithub上にあるのでクローンしてみてください。
ここにおいてます。
git clone git@github.com:shitobe/mysql-docker-compose.git
ファイルの中身の概要
- /db
- /initdb.d
- world.sql
- my.cnf
- /initdb.d
- /docker
- .env
- docker-compose.yml
docker-compose.ymlの説明
version: '3'
services:
mysql:
image: mysql:8.0.30
container_name: mysql_local
# env_fileは環境変数を使う前に宣言した方がいいかも
env_file:
- .env
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
TZ: 'Asia/Tokyo'
ports:
- 3306:3306
volumes:
- ./db/my.cnf:/etc/mysql/conf.d/my.cnf
- ../db/initdb.d/:/docker-entrypoint-initdb.d/
# 永続化する際には、以下のように書くといいかも。
# - "${MYSQL_DATA_PATH}:/var/lib/mysql"
image: mysql:8.0.30
公式のmysqlイメージを今回活用しています。ちょっと個人的には大きいイメージに感じますが、一番手っ取り早い。
より軽量にするには、alpineなどを活用するといい気がしますが、時短です。
container_name: mysql_local
コンテナネームは、各自で決めてください。私は、とりあえずlocalかわかればなんでもいい派
env_file: .env
同じディレクトリ内のenvを読み込んでいる。
envは以下にしているが任意に変更するとdocker-compose時に自動で紐づいてdockerコンテナを作成できる。
MYSQL_ROOT_PASSWORD=root
MYSQL_DATA_PATH=~/data/
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
TZ: 'Asia/Tokyo'
environmentに.envの環境変数を紐づけている。
ports:
- 3306:3306
ポートの構成は、host側のポートを叩くとコンテナ側のポートを紐づけてくれているというイメージでいいと思います。詳しくはこちらを参考にしています。
volumes:
- ./db/my.cnf:/etc/mysql/conf.d/my.cnf
- ../db/initdb.d/:/docker-entrypoint-initdb.d/
dbディレクトリ内にある、my.cnfとinitdb.dをコンテナ内にマウントさせている。
紐付けている状態なので、ローカル内でmy.cnfをいじると自動的にdocker内のファイルも更新するというイメージでお願いします。
また、環境変数を入れる場合は、
- "${MYSQL_DATA_PATH}:/var/lib/mysql"
というふうに、ダブルクオートで括ると使えます。
my.cnfの説明
[mysqld]
character-set-server=utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
すべてutf8mb4にしている。
initdb.dの説明
この中には、mysql公式にあるテストsqlデータが入っています。
MySQL公式サンプルデータ
これをinitdb.dに入れておくと自動でDBとして取り込んでくれます。
docker-compose up してみよう。
ここまで準備できたら、クローンしたディレクトリ内に入って以下のコマンドを打ってみよう。
docker-compose up -d
Creating mysql_local ... done
↑のようになれば、docker-composeは作られてさらにコンテナとして起動している。
実際に中身が観れるか確認してみよう。
では試しに接続してみよう。
ソフトは基本一緒だがtableplussにする。
ちなみに業務では、DataGripを使ってますけどね。
Sequel Proはdocker + mysql8は入れないっぽい。
以下TablePlusの操作例
1 TablePlusを起動しよう
2 MySqlを選択して、Create
3 以下の様に入力してください。Passwordはrootが入っています。
4 テーブルが選択できていないので、アイコンをクリック
5 worldテーブルを選択しよう。
6 SQLを叩いてデータが取れるか確認してみよう。
- SQLをクリック
- SQLを入力してください。
SELECT *
FROM world.country
where name='Japan';
終わり
こんな感じで表示できたら成功です。
SQLの部分は結構自由に書いて試してSQLに慣れてほしいです。
SQLは業務上使う機会は必ずあります。これに慣れてORMに適応できる様に、なればなかなかの即戦力になれると思います。
ORMだけでも楽しい世界です。自分も苦しみ楽しみ成長したいと思っています。