はじめに
かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
全 8 回を予定しています。
① 作成する環境の確認
② Apache の導入
③ PHP 8.1 系のインストール
④ Composer のインストール
⑤ timezone, locale の設定
⑥ docker-compose.yml の作成 & MySQL の導入
⑦ Laravel 9 系のインストール
⑧ Apache の設定ファイルの追加
今回は、 ⑥ docker-compose.yml の作成 & MySQL の導入 についてです。今回の作業完了時点で、LAMP環境についてはひと通り揃うことになります。
環境
以下の Docker 環境を構築します。
- Amazon Linux 2
- Apache 2.4
- MySQL 8.0.28
- PHP 8.1.x
- Laravel 9.x
目次
1. Docker コンテナの削除
2. Dockerfile の確認
3. docker-compose.yml の作成
4. MySQL の Docker 関連ファイルの作成・編集
5. Docker イメージとコンテナの作成
1. Docker コンテナの削除
Docker コンテナを削除します。
docker container rm -f advent-calendar
2. Dockerfile の確認
これまで編集した web サーバー用の Dockerfile を確認します。
FROM amazonlinux:2
# timezone environment
ENV TZ=Asia/Tokyo \
# locale
LANG=ja_JP.UTF-8 \
LANGUAGE=ja_JP:ja \
LC_ALL=ja_JP.UTF-8
RUN yum update -y \
&& yum install -y \
glibc-langpack-ja \
vim \
httpd
RUN amazon-linux-extras install -y epel
RUN yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum clean metadata \
&& yum install -y \
php81 \
php81-php \
php81-php-mbstring \
php81-php-pdo \
php81-php-xml \
php81-php-fpm \
php81-php-mysqlnd \
php81-php-gd
RUN alternatives --install /usr/bin/php php /usr/bin/php81 1
# composer のインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
CMD [ "apachectl", "-D", "FOREGROUND" ]
3. docker-compose.yml の作成
前回に引き続き、以下のリポジトリを参考に、 Docker 関連ファイルを作成・編集します。
今回は、 docker-compose.yml を作成し、web コンテナ、 db コンテナを定義して、まとめて実行できるようにしていきます。
ここまで作成した Dockerfile は、 web コンテナ の Dockerfile として起動するようにします。
3-1. ディレクトリ構成の確認
今回の記事の完了時点のディレクトリ構成は以下の通りです。
.
├── .env
├── .env.example
├── docker-compose.yml
└── infra
└── docker
├── mysql
│ ├── Dockerfile
│ └── my.cnf
└── php
└── Dockerfile
3-2. docker-compose.yml の作成
docker-compose.yml を作成・編集します。
編集内容については、web コンテナとしてこれまでに編集した Web サーバーの Dockerfile(Amazon Linux 2 / Apache / PHP) について記述し、 db コンテナとして MySQL の導入 について記述します。
version: "3.8"
volumes:
db-store:
services:
web:
build:
context: .
dockerfile: ./infra/docker/php/Dockerfile
ports:
- ${WEB_PORT:-80}:80
volumes:
- ./backend:/work/backend
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=${DB_NAME:-laravel_local}
- DB_USERNAME=${DB_USER:-phper}
- DB_PASSWORD=${DB_PASS:-secret}
db:
build:
context: .
dockerfile: ./infra/docker/mysql/Dockerfile
ports:
- ${DB_PORT:-3306}:3306
volumes:
- db-store:/var/lib/mysql
environment:
- MYSQL_DATABASE=${DB_NAME:-laravel_local}
- MYSQL_USER=${DB_USER:-phper}
- MYSQL_PASSWORD=${DB_PASS:-secret}
- MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
-
services:
→ サービス(コンテナ)の定義 -
build:
→ ビルドコンテキストのパス(Dockerfile 設置場所のパス) -
ports:
→ 開放するポート -
volumes:
→ ホストのファイルをコンテナにマウント- ボリュームを使用して、ホストのファイルをコンテナにマウントしておきます。コンテナの外にあるディレクトリ、ファイルをマウントすることでコンテナの中から利用できるようになります。
3-3. .env ファイルの作成
環境変数についての .env ファイルを作成しておきます。
WEB_PORT=8080
DB_PORT=3306
DB_NAME=laravel_local
DB_USER=phper
DB_PASS=secret
4. MySQL の Docker 関連ファイルの作成・編集
MySQL の Docker 関連ファイル(Dockerfile, my.cnf)を作成・編集します。
4-1. Dockerfile の作成・編集
MySQL を起動させるための Dockerfile を作成・編集します。
FROM mysql/mysql-server:8.0.28
RUN microdnf install yum \
&& yum install -y glibc-langpack-ja glibc-locale-source git
ENV TZ=Asia/Tokyo \
LANG=ja\_JP.UTF-8
COPY ./infra/docker/mysql/my.cnf /etc/my.cnf
ベースイメージには、以下のイメージを使用しています。
インストールするパッケージについては、利用している動画教材の環境を参考にさせていただいています。
4-2. my.cnf の作成・編集
my.cnf を作成・編集します。
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
5. Docker イメージとコンテナの作成
docker compose で、 web コンテナと db コンテナを作成・起動します。
docker compose up -d --build
おわりに
今回は、 ⑥ docker-compose.yml の作成 & MySQL の導入 についての手順でした。
次回は、 ⑦ Laravel 9 系のインストール の手順です。
ありがとうございました。
参考にしたサイト