# Docker compose で LAMP 環境作成

LAMP とは

LAMP は、Linux、Apache、MySQL、PHP を組み合わせたオープンソースの Web アプリケーションスタックです。

  • Linux
    オープンソースの Unix 系オペレーティングシステムです。LAMP 環境においては、Web サーバーとして Apache と連携します。

  • Apache
    オープンソースの Web サーバーソフトウェアで、世界的に広く使われています。Apache は、静的ファイルの配信や Web アプリケーションの実行などの機能を持っています。

  • MySQL
    オープンソースのリレーショナルデータベース管理システムです。LAMP 環境においては、Web アプリケーションのデータストレージとして使用されます。

  • PHP
    オープンソースのスクリプト言語で、Web アプリケーションの実行に広く使われています。LAMP 環境においては、Web アプリケーションの開発に使用されます。

作成する LAMP docker compose の全体構造

  • db
    • Dockerfile
    • my.cnf
    • docker-entrypoint-initdb.d
      • data
        • dump_data.sql
      • 01_create_databasess.sql
  • web
    • Dockerfile
    • php.ini
    • vhost.conf
  • html
    • index.php
  • docker-compose.yml

コンテナ立ち上げ後 db ディレクトリの下に database ディレクトリが作成されます。

# docker-compose ファイル作成

環境

  • Docker Compose 3.x
  • Docker Engine 19.03.0+

docker-compose.yml

version: "3"
services:
  db:
    build: ./db
    ports:
      - "3306:3306"
    volumes:
      - ./db/database:/var/lib/mysql
      - ./db/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    #   MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  web:
    build: ./web
    ports:
      - "8080:80"
    restart: always
    volumes:
      - ./html:/var/www/html
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_PORT: 3306
      DB_USERNAME: wordpress
      DB_PASSWORD: wordpress

# database コンテナ Dockerfile 設定

db/Dockerfile

FROM mysql:5.7
MAINTAINER docker-db

RUN useradd -m new_user && \
echo "new_user:password" | chpasswd

COPY ./my.cnf /etc/mysql/conf.d/my.cnf

Mysql 設定ファイル

db/my.cnf

[mysqld]
default_authentication_plugin = mysql_native_password
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8mb4

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

# web コンテナ Dockerfile 設定

web/Dockerfile

FROM php:7.4-apache
MAINTAINER docker-web

RUN apt-get update \
  && apt-get install -y zlib1g-dev libpq-dev mariadb-client unzip libzip-dev\
  && docker-php-ext-install zip pdo_mysql mysqli \
  && docker-php-ext-enable mysqli

RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
RUN ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled
RUN echo ServerName $HOSTNAME:80 > /etc/apache2/conf-available/fqdn.conf && a2enconf fqdn

COPY ./vhost.conf /etc/apache2/sites-available/vhost.conf
RUN a2ensite vhost.conf

COPY ./php.ini /usr/local/etc/php/

WORKDIR /var/www/html

PHP 設定 ini ファイル

web/php.ini

[Date]
 date.timezone = "Asia/Tokyo"
[mbstring]
 mbstring.internal_encoding = "UTF-8"
 mbstring.language = "Japanese"

Apache virtualHost 設定

web/vhost.conf


<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/var/www/html/"
</VirtualHost>

<VirtualHost *:80>
    ServerName test.local
    DocumentRoot "/var/www/html/"
</VirtualHost>

# テスト用の index ページを作成

html/index.php

<?php

echo phpinfo();

# コンテナ立ち上げ

docker-compose up -d

docker-compose up が実行されたときに、Compose はアプリケーション全体を起動・実行し、以前にコンテナ build したことがあれば、そのコンテナから新しいコンテナにボリュームコピーします。

2023-04-15
  • docker