【Docker】Docker 上で MySQL サーバーを構築する

どうも、エピックです。

この記事ではMacのDocker 上で MySQL サーバーを構築する方法について紹介します。

  • MacBook pro (13-inch, 2018)
  • 2.7 GHz クアッドコアIntel Core i7
  • macOS Monterey (v12.3.1)
目次

ワークスペースとDocker Composeファイルを作成

Dockerのバージョンは次のようになっています。

$ docker --version
Docker version 20.10.14, build a224086

デスクトップに次のフォルダ、ファイル構成でワークスペースを作成します。

Docker Compose を使って構築していくので、mysqlフォルダと同一階層に docker-compose.yml を配置します。

docker-compose のコードはこんな感じになっています。

version: '3'

services:
  mysql:
    container_name: mysql_sample
    build:
      context: .
      dockerfile: ./mysql/Dockerfile
    networks:
      - sample_network
    ports:
      - "3306:3306"
    volumes:
      - sample_volume:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: test
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpass
      TZ: 'Asia/Tokyo'

networks:
  sample_network:

volumes:
  sample_volume:

定義ファイルの書式はYAML形式で、ファイル名も docker-compose.yml で固定です。

  • フェイル形式:YAML形式
  • ファイル名:docker-compose.yml

Docker Compose は一見ややこしく見えますが、基本構成はいたってシンプルで次のようになっています。

version: 3 ⇦ Dockerエンジンに対応したDocker Composeのバージョンを書く
services: ⇦ コンテナの情報を書く
networks: ⇦ ネットワークの情報を書く
volumes: ⇦ ボリュームの情報を書く

今回はコンテナとしてmysqlのみですが他のコンテナを定義してあげれば同時に作成することができます。

MySQLのコンテナ情報は別のDockerファイルで定義していきます。

MySQL の設計

次のようにDockerファイルを作成します。

場所はmysqlフォルダを作ってその中に配置します。

# https://hub.docker.com/_/mysql
FROM mysql:8.0.29
RUN apt-get update -y
RUN apt-get install -y vim
COPY ./mysql/my.cnf /etc/mysql/conf.d/my.cnf
COPY ./mysql/init /docker-entrypoint-initdb.d

それぞれのコマンドの役割は次の通りです。

  • FROM:コンテナのベースイメージを指定
  • RUN:ベースイメージ上で実行するコマンドを指定
  • COPY:ファイルをイメージ上へコピー

ベースイメージは、オフィシャルからでている mysqlのイメージを使います。

それに対し設定ファイルと実行用のスクリプトをコピーしてカスタマイズしてあげます。

注意点としては、今回docker-compose.yml上でContextを定義しています。

ここの Quiita で解説してくれてますが、contextの定義した場所 = docker buildコマンドを実行した場所 となります。

Quita「docker-compose.ymlのbuild設定はとりあえずcontextもdockerfileも埋めとけって話」

そのため、COPYで指定するファイルの場所はフォルダトップからの場所で指定しています。

混乱しやすいので注意です。

続いて、設定ファイルはこんな感じです。

[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4

“utf8mb4” は初めて聞いたのですが、4バイト長の文字を扱えるようにする設定とのこと。

これを /etc/mysql/conf.d/ にコピーしてあげます。

もう一方のCOPYではSQLファイルを配置してあげていますが、/docker-entrypoint-initdb.d フォルダ配下にファイルを配置してあげるとコンテナ作成時に自動で実行してくれます。

例えば次のようなSQLファイルを作成しています。

CREATE DATABASE sample_table;
USE sample_table;

CREATE TABLE users(
	userId		int(11)	PRIMARY KEY AUTO_INCREMENT,
	userName	varchar(64),
	profile		varchar(128)
);

今回はinitフォルダごとCOPYしているのでその他の実行ファイルを格納しておけば全て自動で実行してくれるはずです。

コマンドを実行していく

トップの workspace_mysql ディレクトリへ移動します。

cd workspace_mysql

docker-compose.yml をもとにコンテナを一気に立ち上げます。

docker compose -f docker-compose.yml up -d

これで完了です。

あとは、コンテナが立ち上がっているかの確認をおこなったり、

docker ps -a

MySQLコンテナの中に入ってデータベースが作成されているか確認してみてください。

docker exec -it mysql_sample bash
mysql -u root -p
rootpass
show databases;

最後に

今回はMacのDocker 上で MySQL サーバーを構築する方法ついて書いてみました。
もしわからないこと等あればコメントにていただけれればと思います。

今回も最後までお読みいただきありがとうございました。

では。

目次