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対応〉