【Docker】Laravel sail をカスタマイズする(タイムゾーン・MySQL文字コード)

laravel-sail-tips-01 Docker

前回に続き、Laravel sailでの開発環境を構築する際のTips。今回はDocker周辺の整備について、タイムゾーン・MySQL文字コード設定の2点を取り上げる。

①タイムゾーンを変更する

◼️変更前

Sun Sep 24 14:32:54 UTC 2023

ルートディレクトリ内にdockerディレクトリ作成

下記コマンドを実行することで、アプリケーションのルートディレクトリ内にdockerディレクトリが作成される。

sail artisan sail:publish

作成されたdockerディレクトリ配下のファイルを変更することでカスタマイズが可能となる。

タイムゾーンを変更する(UTC→JST)

docker/8.2/Dockerfile

ENV TZ=UTC
↓
ENV TZ='Asia/Tokyo'

なお、dockerディレクトリ配下の参照先はymlファイルに定義している。
docker-compose.yml

services:
    laravel.test:
        build:
            context: ./docker/8.2

確認

# イメージ再ビルド
sail build --no-cache
# コンテナ起動
sail up -d
# コンテナ接続
sail shell
date

◼️変更後

Sun Sep 24 23:53:52 JST 2023

②MySQLの文字コードを変更する

◼️変更前

mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)

mysql> 

設定ファイル作成

my.cnfファイルを新規作成する。MySQLの設定ファイルとなる。各セクションの定義は下記参照。
docker/8.2/my.cnf

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character_set_server=utf8mb4
collation-server=utf8mb4_bin

volumesに作成したファイルを追加する

docker-compose.yml

    mysql:
        volumes:
            - './docker/8.2/my.cnf:/etc/my.cnf'

確認

(※要コンテナ再起動)

# コンテナ接続
sail mysql

◼️変更後

mysql> show variables like '%char%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)

mysql> 

Laravel sailでの開発環境構を構築する際に、併せて設定しておきたい内容2選を紹介した。主に備忘のためであるが、ご参考まで。