LAMP(Linux、Apache、MySQL、PHP)またはLEMP(Linux、Nginx、MySQL、PHP)の環境をDockerを使用して簡単にセットアップする方法について、完全かつ包括的な記事を以下にご紹介します。この記事では、LAMPおよびLEMP環境をDockerで構築する手順を、実際のコマンドと設定ファイルを使って解説します。
1. Dockerとは
Dockerは、アプリケーションとその依存関係をコンテナという軽量な仮想化環境にまとめ、どこでも動作させることができるプラットフォームです。これにより、開発環境のセットアップが簡単になり、異なる環境でも同じアプリケーションを動作させることができます。
2. LAMP環境とは
LAMPは、Linux、Apache、MySQL、PHPの略で、これらのソフトウェアを組み合わせたWebサーバ環境です。Web開発者はこの環境を使用して、PHPで動作するWebアプリケーションを開発することが一般的です。
3. LEMP環境とは
LEMPは、Linux、Nginx、MySQL、PHPの略で、LAMPと同様にWeb開発用のスタックですが、Apacheの代わりにNginxを使用します。Nginxは、高速で軽量なWebサーバとして知られており、大規模なトラフィック処理が求められる場合に適しています。
4. Dockerを使用したLAMP/LEMP環境のセットアップ手順
4.1 前提条件
まず、DockerおよびDocker Composeがインストールされていることを確認します。まだインストールしていない場合は、公式のDockerインストールガイドを参照してください。
4.2 LAMP環境の構築
LAMPスタックをDockerで構築するためには、docker-compose.yml
ファイルを使用して各コンテナを定義します。
4.2.1 プロジェクトディレクトリの作成
まず、LAMP用のディレクトリを作成します。
bashmkdir lamp-docker
cd lamp-docker
4.2.2 Docker Composeファイルの作成
docker-compose.yml
という名前で以下の内容を記述します。
yamlversion: '3.7'
services:
apache:
image: php:7.4-apache
container_name: apache
ports:
- "8080:80"
volumes:
- ./www:/var/www/html
networks:
- lamp-network
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: lampdb
volumes:
- mysql-data:/var/lib/mysql
networks:
- lamp-network
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
ports:
- "8081:80"
environment:
PMA_HOST: mysql
networks:
- lamp-network
networks:
lamp-network:
driver: bridge
volumes:
mysql-data:
このdocker-compose.yml
ファイルでは、次のサービスが定義されています:
- Apache(
php:7.4-apache
イメージを使用) - MySQL(
mysql:5.7
イメージを使用) - phpMyAdmin(MySQLデータベースを管理するため)
4.2.3 コンテナの起動
次に、以下のコマンドを実行してDockerコンテナを起動します。
bashdocker-compose up -d
これで、LAMP環境が起動します。ブラウザでhttp://localhost:8080
にアクセスすると、Apacheのデフォルトページが表示され、http://localhost:8081
にアクセスすると、phpMyAdminのログインページが表示されます。
4.3 LEMP環境の構築
LEMPスタックもDocker Composeを使用して構築できます。LAMP環境とほぼ同じ手順ですが、Apacheの代わりにNginxを使用します。
4.3.1 プロジェクトディレクトリの作成
まず、LEMP用のディレクトリを作成します。
bashmkdir lemp-docker
cd lemp-docker
4.3.2 Docker Composeファイルの作成
docker-compose.yml
という名前で以下の内容を記述します。
yamlversion: '3.7'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8080:80"
volumes:
- ./www:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf
networks:
- lemp-network
php:
image: php:7.4-fpm
container_name: php
volumes:
- ./www:/var/www/html
networks:
- lemp-network
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: lempdb
volumes:
- mysql-data:/var/lib/mysql
networks:
- lemp-network
networks:
lemp-network:
driver: bridge
volumes:
mysql-data:
このファイルでは、次のサービスが定義されています:
- Nginx(
nginx:latest
イメージを使用) - PHP-FPM(
php:7.4-fpm
イメージを使用) - MySQL(
mysql:5.7
イメージを使用)
4.3.3 Nginxの設定ファイルの作成
nginx.conf
という名前でNginxの設定ファイルを作成します。以下の内容を記述します。
nginxserver {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fa