# 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
- data
- 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 したことがあれば、そのコンテナから新しいコンテナにボリュームコピーします。