xampp と同様のLAMP環境を Docker で構築する
GitHubにアップしてある Docker-LAMP をローカルにダウンロードして docker-compose コマンドを実行すると xampp 同様の環境を構築することができます。具体的にはwebサーバー(nginx)とphp、MySQL、phpMyAdmin が使えるようになります。
Docker は xampp と比べると初期の準備にも多少時間かかるしコマンド打つしで若干めんどくさい感じはあるけど、最近のモダンで多種多様な環境構築もできるし Qiita 等の記事も多い。Mac - Windows間や複数者間でも気軽に同環境を構築可能などメリットも多いので、脱xamppを検討している人や Docker を触ったことが無い人で興味がある人なんかはこれを機に Docker に触れてみることをおすすめします。
スマホで見る
目次
はじめに
事前準備として、環境を構築したいPCに Docker と docker-compose がインストールされている必要がある。
コマンドプロンプト(win)/ ターミナル(mac)を起動し、docker -v、docker-compose -v でそれぞれバージョンの確認が出来る状態であればok。
動作確認済みのPC環境
- macOS Mojave (バージョン 10.14.4)、メモリ: 8GB、Docker: v18.09.2、docker-compose: v1.23.2
- Windows 10 Pro 64bit、メモリ: 32GB、Docker: v18.06.1-ce、docker-compose: v1.23.2
Docker インストール参考記事
GitHubへのリンク、ダウンロード方法
- Docker-LAMP … GitHub Repositories へアクセス
- [Download ZIP] … 直でファイルをダウンロード
※ docker-compose up -d でエラーになる場合は最新のLAMP環境をお試しください
- Docker-LAMP-202004 … GitHub Repositories へアクセス
- [Download ZIP] … 直でファイルをダウンロード
GitHubプロジェクトからの環境構築方法一覧
- GitHubページの Clone or download ボタンよりリポジトリのクローンもしくはZIPダウンロード
- ZIPダウンロードの場合は解凍
- 解凍して出来たフォルダをDockerコマンドが有効な場所に置く
- コマンドプロンプト(win)/ ターミナル(mac)を起動し、「03」のフォルダ内へ移動
- docker-compose up -d コマンドを実行(しばらくインストールが走る)
- ブラウザからwebサーバーアクセスを確認 → http://localhost/
- ブラウザからwebサーバーアクセス&php実行を確認 → http://localhost/index.php
- ブラウザからphpMyadminとサンプルDBテーブルを確認 → http://localhost:8080/
環境構築中の画面一覧 (Windowsの例)
Windows でも Mac でも、インストール済みの Docker を起動しておく
GitHubプロジェクトのフォルダ展開図
コマンドプロンプトでプロジェクトのフォルダへ移動しつつ各コマンドを実行。ps・images はコンテナ等が起動する前後の比較のために実行。docker-compose up -d コマンド実行時、Docker が起動してないとERRORになる。
mysql・php・phpmyadmin・nginx が起動完了 (1回目の起動はimageのインストールがされるので時間がかかる。2回目以降の起動は早い。)
docker-compose up -d 完了後のフォルダ展開図。data フォルダ内に色々入ったのが確認できる。
http://localhost/ にアクセスして nginx(webサーバー)の確認
http://localhost/index.php にアクセスして php の確認
http://localhost:8080/ にアクセスして phpMyAdmin とDBテーブルを確認
Docker / docker-compose コマンドリスト
docker version / docker -v | Docker のバージョン確認 |
---|---|
docker-compose version / docker-compose -v | docker-compose のバージョン確認 |
docker-compose up -d | コンテナの作成と開始 |
docker-compose ps | コンテナ一覧 (docker-compose) |
docker ps | コンテナ一覧 (Docker) |
docker images | イメージ一覧 (Docker) |
docker rmi xxxxx | イメージの削除 (Docker) |
docker stop | サービスの停止 |
docker down | コンテナの停止 |
ファイル毎のソースコード
ファイル・フォルダ構成
Docker-LAMP ├ docker-compose.yml ├ docker │ ├ db │ │ └ sql │ │ └ create-sample-table.sql │ ├ nginx │ │ └ default.conf │ └ php │ ├ php.ini │ └ Dockerfile └ server ├ index.html └ index.php
/docker-compose.yml
docker-compose コマンドでインストールされるコンテナ情報がまとまっている
version: '3'
services:
# PHP
php:
container_name: php
build: ./docker/php
volumes:
- ./server:/var/www
# nginx
nginx:
image: nginx
container_name: nginx
ports:
- 80:80
volumes:
- ./server:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
# MySQL
db:
image: mysql:5.7
container_name: mysql_host
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_database
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
# phpMyAdmin
phpmyadmin:
container_name: test_phpmyadmin
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=mysql_host
- PMA_USER=root
- PMA_PASSWORD=root
ports:
- 8080:80
/server/index.html
環境構築後、http://localhost/ にアクセスすると開かれるファイル
<html>
<head></head>
<body>
<h1>docker compose!</h1>
</body>
</html>
/server/index.php
環境構築後、http://localhost/index.php にアクセスすると開かれるファイル
<html>
<head></head>
<body>
<h1>docker compose!</h1>
</body>
</html>
<?php
echo('docker compose!');
/docker/php/Dockerfile
Dockerコンテナーの構成内容を記述するファイル
FROM php:7.2-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update
&& apt-get install -y zlib1g-dev mysql-client
&& docker-php-ext-install zip pdo_mysql
#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
/docker/php/php.ini
phpの設定ファイル
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
/docker/nginx/default.conf
nginx(HTTPサーバー)の設定ファイル
server {
listen 80;
index index.php index.html;
root /var/www;
location / {
root /var/www;
index index.html index.php;
}
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
/docker/db/sql/create-sample-table.sql
docker-compose コマンド時に実行されるsqlファイル。mysqlに test_table という名前のサンプル用のテーブルとデータを作成する。
-- create sample table
create table IF not exists `test_table`
(
`id` INT(20) AUTO_INCREMENT,
`name` VARCHAR(20) NOT NULL,
`created_at` Datetime DEFAULT NULL,
`updated_at` Datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- insert sample data
INSERT INTO test_table VALUES (1,'suzuki',null,null);
INSERT INTO test_table VALUES (2,'tanaka',null,null);
INSERT INTO test_table VALUES (3,'satou',null,null);