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.ymlのservice.laravel.test.build.contextを見ると./docker/8.1となっているので7.4や8.0のディレクトリは使われていないことがわかります。
例えばPHP8.0の環境で起動させたい場合はここを./docker/8.0とすることで切り替えが可能です。
残念なからM1macではPHP8.0以下にするとbuildエラーが起こります。一部のパッケージがインストールできないようです。service.laravel.test、service.mailhog、service.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対応〉