LoginSignup
38
33

More than 3 years have passed since last update.

docker-compose で手軽なLAMP環境 (PHP5.6 or 7.1切替, Apacheにmod_rewrite, GDインストール)

Last updated at Posted at 2018-09-11

MAMP Proが動かなくなったのでこれを機会にdocker-compose で環境構築してみました。動作確認したのはMacのみです。
どうしてもphp5.6でないと動かないCMS案件(baserCMS3系)だったので、リライトやGDのインストールもやってみました。
(一応 php7.1も動かせます)

githubのデータはこちら → Garyuten/dockker-lamp-php5.6

この環境が向いてる人

  • PHP5.6など古めホスティングサーバー案件の環境を作らないといけない人
  • Apacheのリライトの設定やGDのインストールなどを後からコマンドでやりたくない人
  • ホスティングサーバーっぽい構成のLAMP(apache,php,mysql)環境が欲しい人

この記事で構築される環境

  • Apache
    • mod_rewrite
    • GD
  • php 5.6.28 or php 7.1
  • MySql 5.7
  • PhpMyAdmin

動作確認したCMS

  • php5.6.28
    • ✅ baserCMS 3.0.16
    • ✅ Wordpress 4.9.8
  • php7.1
    • ✅ baserCMS 4.1.3
    • ✅ Wordpress 4.9.8

baserCMS3.0.16の場合 (php5.6.28)

インストールのDB接続成功
スクリーンショット 2018-09-11 14.28.29.png

baserCMS4.1.3の場合 (php7.1)

インストールのDB接続成功
スクリーンショット 2018-09-11 14.25.16.png

Wordpress4.9.8 の場合 (php7.1)

php7.1に切替えた後に確認(PHPのバージョン切替方法は後述)
スクリーンショット 2018-09-11 14.23.09.png
スクリーンショット 2018-09-11 14.24.10.png

事前準備

Dockerのインストール

Docker Composeのインストール

git クローン

git clone https://github.com/Garyuten/dockker-lamp-php5.6.git

もしくは githubからzipをダウンロード して作業フォルダで解凍してください

インストール・起動手順


$ cd dockker-lamp-php5.6
$ docker-compose build
$ docker-compose up

これだけで、 http://localhost:8080/ にアクセスできるようになります。
あとは/public_html/配下に WordpressなりbaserCMSなり置けばインストールできます。

mod_rewrite が有効かどうかは、 http://localhost:8080/hoge にアクセスして「 ✅ mod_rewrite is ok! 」 の表示がでれば有効なことが確認できます。

docker-compose buildは初回のみ、かなり時間がかかります。気長に待ちましょう。

バックエンドでの起動方法

$ docker-compose up -d

ターミナルに出力されなくなります

docker終了方法

ターミナル(コンソール)上で Cmd + C (以外に忘れる)

MySQLの接続情報

  • database host : 192.168.202.2 (default)
  • database user : root
  • database pass : root
  • database port : 3306

database host : 192.168.202.2は変更可能です(後述)

phpMyAdmin

http://localhost:8088/ でアクセスできます。
スクリーンショット 2018-09-11 14.29.31.png

LAMPを動かすなら上記まででOK❗❗🙆

エラー: debconf: delaying package configuration, since apt-utils is not installed が出た場合

気にしなくていいらしいです。毎回でますが特に問題なく動いてます。

参考:"debconf: delaying package configuration, since apt-utils is not installed"を表示しないようにする - Qiita


これから先はファイルの説明になります。

ディレクトリ構成と各ファイルの説明

├ public_html : Document root
├ docker-compose.yml
└ docker
  ├ web
    ├ Dockerfile : php veersion, apache install
    ├ base.conf : <VirtualHost *:80>
    ├ php.ini
  ├ db
    ├ Dockerfile : mysql install
    ├ my.cnf
  ├ logs : server log

public_html

ドキュメントルートになります。 http://localhost:8080 でアクセスされる領域です。
.htaccessも有効です。

docker-compose.yml

mysql を繋ぐためにIPアドレスを固定しています。

docker-compose.yml
version: '2'
services:
  mysql:
    container_name: projectname_mysql
    build: ./docker/db
    volumes:
      - ./docker/db/mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"
    hostname: localhost
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    # 所属するネットワークとIPを指定
    networks:
      br0:
        # このIPアドレスがデータベースホスト名になる ( localhost → 192.168.202.2)
        ipv4_address: 192.168.202.2
  web:
    container_name: projectname_apache_php
    build: ./docker/web
    ports:
      - '8080:80'
    volumes:
      - ./public_html:/var/www/html
      - ./docker/logs:/var/log/httpd
    depends_on:
      - mysql
    # 所属するネットワークとIPを指定
    networks:
      br0:
        ipv4_address: 192.168.202.3
  phpmyadmin:
    container_name: projectname_phpmyadmin
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=root
    links:
      - mysql
    ports:
      - 8088:80
    volumes:
      - /sessions
    # 所属するネットワークとIPを指定
    networks:
      br0:
        ipv4_address: 192.168.202.4

# 新規ブリッチを定義
networks:
  br0:
    driver: bridge
    ipam:
      config:
      - subnet: 192.168.202.0/24
        gateway: 192.168.202.1

$ docker-compose up で以下のエラーになった場合

$ docker-compose up
Recreating projectname_mysql ... error

ERROR: for projectname_mysql  Cannot start service mysql: b"Invalid address 192.168.202.2: It does not belong to any of this network's subnets"

ERROR: for mysql  Cannot start service mysql: b"Invalid address 192.168.202.2: It does not belong to any of this network's subnets"
ERROR: Encountered errors while bringing up the project.

おそらく2つ以上のLAMP環境を作ろうとした時に出ると思います。
docker上で同じIPアドレスがあると動かせないので、docker-compose.yml内のIPアドレスを192.168.200.*を書き換えてください。

例) 192.168.202.* → 192.168.210.* などで検索置換

※注意
mysqlのipv4_address を書き換えた場合は、
mysqlの接続情報のホスト名が変わります!!

docker/web/Dockerfile

apacheの必要なモジュール、mod_rewriteの有効、GDのインストール、phpのバージョン指定など設定

docker/web/Dockerfile
FROM php:5.6.28-apache
# FROM php:7.1-apache #php7をインストールしたい方はこちらを有効に

MAINTAINER docker-web

RUN apt-get update \
    && apt-get -y install vim wget lsb-release libicu-dev mysql-client \
    && docker-php-ext-install pdo_mysql mysqli intl
# mod_rewriteを 有効に
RUN a2enmod rewrite

RUN ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled
RUN echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf && a2enconf fqdn
RUN a2enmod headers
RUN a2enmod include

# GD関連のインストール
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev
RUN docker-php-ext-install gd


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

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

# ポートの解放
EXPOSE 80

docker/web/base.conf

apacheの設定。 AllowOverride All.htaccessが有効になります。
ログの出力も設定可能です。
以下の設定では docker/log/ 内に出力されます。

docker/web/base.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/html"
    Options Includes
    ErrorLog "/var/log/httpd/localhost-error_log"
    CustomLog "/var/log/httpd/localhost-access_log" custom
    <Directory "/var/www/html">
        AllowOverride All
    </Directory>
</VirtualHost>

docker/web/php.ini

PHPの設定

docker/web/php.ini
[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese

docker/db/Dockerfile

MySQLのバージョン指定

docker/web/Dockerfile
FROM mysql:5.6
MAINTAINER docker-db

COPY ./my.cnf /etc/mysql/my.cnf

docker/db/my.cnf

MySQLの設定

docker/db/my.cnf
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql

説明は以上になります。

PHP versionの変更方法

docker/web/Dockerfile をテキストエディタで編集します。
最初の1-2行目で使いたいバージョン以外をコメントアウトするだけです。

php5.6にしたい場合

docker/web/Dockerfile
FROM php:5.6.28-apache
# FROM php:7.1-apache

php7.1にしたい場合

docker/web/Dockerfile
# FROM php:5.6.28-apache
FROM php:7.1-apache

参考サイト

一番参考になったのはこちら(感謝!)

もし baserCMS4系 の最新制作環境が欲しい人はこちら (Mac)
- basercms/docker at dev-4 · baserproject/basercms

38
33
2

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
38
33