【Docker】DockerにMySQL環境を構築する(M1 Mac 対応)

【Docker】 DockerにMySQL環境を構築する (M1 Mac 対応) インフラ
スポンサーリンク

はじめに

みどりがめ
みどりがめ

本記事ではDockerの導入〜MySQLの構築まで解説しています。

M1 Mac特有の設定にも対応しています。

Docker Desktopのインストール

まずはDocker Desktopをお手元のPCにインストールします。
M1チップの場合、Apple Siliconを選択してください。

Install Docker Desktop on Mac
Install Docker for Mac to get started. This guide covers system requirements, where to download, and...

インストーラーを実行して、Docker Desktopが無事立ち上げられること、下記のコマンドでdockerの情報が表示されることをご確認ください。

docker version

ちなみに私の環境のバージョンは下記の通りでした。

Client:
 Cloud integration: v1.0.29
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
Server: Docker Desktop 4.12.0 (85629)
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11

docker-compose.ymlファイルの作成

今回のdocker-compose.ymlのフォルダ構成は以下の通りです。

赤字のファイルはこの後作成するファイル、黒字はdocker compose 実行時に作成されるファイルを表しています。青字については、mysql構築と同時に実行したいSQLがある場合、作成します。

├── .env
├── docker-compose.yml
├── init
│   └── init-topic.sql
└── my.cnf

.envは以下の通りです。
ユーザー名、パスワード等必要に応じて変更してください。

ROOT_PASS=root
DB_NAME=mysql-db
DB_USER=user
DB_PASS=password
DB_PORT=3306
TZ=Asia/Tokyo

docker-compose.ymlは下記の通りです。${}の情報については自動的に.envを参照してくれます。

version: "3"

services:
  mysql:
    image: mysql:8
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${ROOT_PASS}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      TZ: ${TZ}
    volumes:
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
      - ./init:/docker-entrypoint-initdb.d
    ports:
      - ${DB_PORT}:3306

※M1 Macの方はmysql:の直下の階層に下記を追加してください。

    platform: linux/arm64

重要な箇所のみに絞って以下に解説します。

  • image: mysql:8:
    MySQLのバージョンを指定します。latestを指定すると最新もバージョンを使用します。
  • MYSQL_ROOT_PASSWORD:rootユーザーのパスワードです。
  • MYSQL_DATABASE:作成するデーターベースの名前です。
  • MYSQL_USER:作成するユーザーの名前です。
  • MYSQL_PASSWORD:作成するユーザーのパスワードです。
  • volumes:ローカルのディレクトリとMySQLのデータ領域をマウントしています。この指定により、何かデータが書き込まれればローカルのファイルとして、残るので、データが永続化されます。
    また、コンテナの立ち上げと共に実行する場合は下記のように記載します。
    init/docker-entrypoint-initdb.d配下の.sh, .sql and .sql.gz拡張子を持つファイルがアルファベット順に実行されます。
      - ./init:/docker-entrypoint-initdb.d

ちなみに私の環境のinit-topic.sqlは以下の通りです。 

CREATE TABLE topics (
    id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(256) NOT NULL,
    content VARCHAR(256) NOT NULL
);

INSERT INTO topics(title,content) values ("title1",'content1');
INSERT INTO topics(title,content) values ("title2",'content2');
INSERT INTO topics(title,content) values ("title3",'content3');
INSERT INTO topics(title,content) values ("title4",'content4');
INSERT INTO topics(title,content) values ("title5",'content5');
INSERT INTO topics(title,content) values ("title6",'content6');
INSERT INTO topics(title,content) values ("title7",'content7');
INSERT INTO topics(title,content) values ("title8",'content8');
INSERT INTO topics(title,content) values ("title9",'content9');
INSERT INTO topics(title,content) values ("title10",'content10');

コンテナを立ち上げる

下記のコマンドでコンテナを立ち上げます。

docker compose up -d

無事に起動したら、DBクライアントツール等で確認してみましょう。
接続情報は以下の通りで、.envに記載した内容となります。

mysql接続情報

終わりに

本記事はここまでとなります。
下記の記事でDockerの学習におすすめの書籍を紹介しています。併せてご覧ください。

ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢

コメント