4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

完走賞をとって Qiitan を自分にクリスマスプレゼントするAdvent Calendar 2022

Day 6

DockerでのLAMP環境構築手順(Amazon Linux 2/PHP8.1(Laravel9)) ⑥docker-compose.ymlの作成&MySQLの導入(全8回)

Last updated at Posted at 2022-12-05

はじめに

かくかくしかじかで、Docker で Amazon Linux 2 ベースの LAMP 環境を構築する機会がありましたので、手順についてアウトプットします。
スクリーンショット 2022-11-30 23.31.45.png

全 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 を確認します。

infra/docker/php/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 の導入 について記述します。

docker-compose.yml
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 ファイルを作成しておきます。

.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 を作成・編集します。

infra/docker/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 を作成・編集します。

infra/docker/mysql/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 系のインストール の手順です。

ありがとうございました。

参考にしたサイト

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?