🐳

dockerとmysqlで環境構築

2022/02/19に公開

ディレクトリ構成

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=「ホスト側portはもう各自の.envで管理してくれ」

ここでは使ってないけど.envのdatabaseURLの書き方

DATABASE_URL="mysql://test:test1234@test-db/test"
DATABASE_URL="mysql://root:password@db:3306(orコンテナ名)/(プロジェクト名)"

Discussion