dockerでmysqlの環境構築
ディレクトリ構成
ymlファイル
version: "3.8" volumes: db-store: services: # コンテナ名(?) mov-db: container_name: mov-db # Dockerfileどこにあるか build: ./docker/mysql # DBのファイルどこにあるか # サーバー側(ローカル)(今操作してる方) :コンテナ側 volumes: # mov-dbのものを、var/lib/mysqlに保存しているということ # mov-dbは、下のvolumesに定義してる名前付きボリューム - mov-db:/var/lib/mysql expose: - 3306 ports: - 3306:3306 networks: - mov-app-net # 今回ないけどdepends_on mysqlでmysqlを先に立ち上げれる networks: mov-app-net: driver: bridge # 名前付きボリューム volumes: mov-db:
Dockerfile
infrastructure/docker/mysql/Dockerfile
FROM mysql@sha256:e9c9e3680bbadd5230a62c5548793bd8e59cbcc868032781e48bd53e888bd82f ENV TZ=UTC \ MYSQL_DATABASE=DBの名前 \ MYSQL_USER=ユーザー名 \ MYSQL_PASSWORD=パスワード \ MYSQL_ROOT_PASSWORD=パスワード COPY ./my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 644 /etc/mysql/conf.d/my.cnf
ちなみにmysql@sha...はmysqlのどのイメージを持ってくるか docker mysqlでググって一番上に出てくるofficial image のDIGESTのsha256:以下を記載 (https://hub.docker.com/layers/mysql/library/mysql/latest/images/sha256-e9c9e3680bbadd5230a62c5548793bd8e59cbcc868032781e48bd53e888bd82f?context=explore)
ターミナルにてコンテナ立ち上げ
ここまでできたらターミナルにてプロジェクトのinfrastructureディレクトリまでいく -d ・・・ バックグラウンド上で立ち上げる docker-compose up ・・・ イメージを元にコンテナを立ち上げる。イメージがなければイメージを作成。(docker run と同じ)
docker-compose -p mov up -d
table plusで接続
ここまでできたらtable plusなどで接続できる
おまけ
volume
ちなみにvolumeのホストでマウントさせるディレクトリdb-storeになってて、実際どこなのか調べたい時は
docker volume ls
でボリューム名調べて
docker volume inspect ボリューム名
のMountpointのパス名が実際のディレクトリの場所
https://qiita.com/ysd_marrrr/items/e8a50c43cff87951385c
ports,expose
https://tkzo.jp/blog/difference-between-ports-and-expose-in-docker-compose/
複数の案件を掛け持ちする人が絡むともうそれぞれのenvで管理してくれとなるのでこんな感じで自分のenvでよしなにかける https://wand-ta.hatenablog.com/entry/2020/05/23/011001#:~:text=%E3%80%8C%E3%83%9B%E3%82%B9%E3%83%88%E5%81%B4port%E3%81%AF%E3%82%82%E3%81%86%E5%90%84%E8%87%AA%E3%81%AE.env%E3%81%A7%E7%AE%A1%E7%90%86%E3%81%97%E3%81%A6%E3%81%8F%E3%82%8C%E3%80%8D
ここでは使ってないけど.envのdatabaseURLの書き方
DATABASE_URL="mysql://test:test1234@test-db/test"
DATABASE_URL="mysql://root:password@db:3306(orコンテナ名)/(プロジェクト名)"