interprism's blog

インタープリズム株式会社の開発者ブログです。

Laravel9で環境構築3(DockerFileでカスタマイズ)

DockerFileでカスタマイズ

こんにちは、だーさんです。
Laravel(5.6)とMySQLを使用してWebサイトを作成する仕事をしています。
今回はDockerfileを作成する手順とMySQLの設定ファイルを作成する手順(文字コードの設定)を紹介していきます。

Dockerfileの作成

sail artisan sail:publish

上記コマンドでアプリケーションルートにdockerというディレクトリが作成されます。
また、docker-compose.ymlの記述も一部変更されます。

docker/7.4/Dockerfild
docker/7.4/php.ini
docker/7.4/start-container
docker/7.4/supervisord.conf

docker/8.0/Dockerfild
docker/8.0/php.ini
docker/8.0/start-container
docker/8.0/supervisord.conf

docker/8.1/Dockerfild
docker/8.1/php.ini
docker/8.1/start-container
docker/8.1/supervisord.conf

docker-compose.ymlservice.laravel.test.build.contextを見ると./docker/8.1となっているので7.4や8.0のディレクトリは使われていないことがわかります。 例えばPHP8.0の環境で起動させたい場合はここを./docker/8.0とすることで切り替えが可能です。

残念なからM1macではPHP8.0以下にするとbuildエラーが起こります。一部のパッケージがインストールできないようです。service.laravel.testservice.mailhogservice.seleniumに以下を追加してあげると対応可能になるようです。

platform: linux/amd64

さて、Dockerfileで環境設定をいじれるようになりました。
最低限の設定として標準時刻を日本に切り替えておきましょう。Dockerfile内のTZを以下に書き換えます。

ENV TZ='Asia/Tokyo'

書き換えたら再ビルドして確認しましょう。

sail build --no-cache(再ビルド)
...
(build中)
...

sail up -d(起動)
sail shell(アプリケーションコンテナにログイン)

date(日付を確認)
Sat May 28 14:14:39 JST 2022

MySQL文字コードを設定

日本語で適切に表現するために文字コードを変更します。 docker/8.1ディレクトリにmy.cnfファイルを作成します。
以下はmy.cnfファイルの中身です。

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin

[client]
default-character-set = utf8mb4

これをMySQlの設定ファイルとしてMySQlコンテナの/etc/に配置するようにdocker-compose.ymlに追記します。
service.mysql.volumes'./docker/8.1/my.cnf:/etc/my.cnf'を以下のように追記します。

mysql:
    image: 'mysql/mysql-server:8.0'
    ports:
        - '${FORWARD_DB_PORT:-3306}:3306'
    environment:
        MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
        MYSQL_ROOT_HOST: "%"
        MYSQL_DATABASE: '${DB_DATABASE}'
        MYSQL_USER: '${DB_USERNAME}'
        MYSQL_PASSWORD: '${DB_PASSWORD}'
        MYSQL_ALLOW_EMPTY_PASSWORD: 1
    volumes:
        - 'sail-mysql:/var/lib/mysql'
        - './docker/8.1/my.cnf:/etc/my.cnf'

一旦sail dwonしてコンテナを停止させ、再度sail up -dで起動してみましょう。 文字コードを確認すると変更されているはずです。

変更前

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.02 sec)

変更後

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.00 sec)

続きはこちら

設定ファイルを定義できましたので、あとはDockerやMySQLの設定方法などを調べつつ必要に応じてカスタマイズしていきましょう(>v<)!

Laravel9で環境構築1(環境構築) - interprism's blog

Laravel9で環境構築2(sailコマンド) - interprism's blog

Laravel9で環境構築4(複数人で開発する): 作成予定です。

参考文献

  • プロフェッショナルWebプログラミング Laravel〈最新Laravel 9対応〉

PAGE TOP