🐳
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のパス名が実際のディレクトリの場所
ports,expose
複数の案件を掛け持ちする人が絡むともうそれぞれのenvで管理してくれとなるのでこんな感じで自分のenvでよしなにかける
ここでは使ってないけど.envのdatabaseURLの書き方
DATABASE_URL="mysql://test:test1234@test-db/test"
DATABASE_URL="mysql://root:password@db:3306(orコンテナ名)/(プロジェクト名)"
Discussion