はじめに
「Docker for Windows のインストール」でDocker環境を準備しました。
続いてWordpressを動作させるために、Apache + PHP + MySQLの環境を構築した試行錯誤の結果を備忘録として残します。
node.jsにしない理由はこのサーバーがApacheだからとかそんな理由です。
ゴール
最終的には下記の3つのコンテナの環境を構築します。
1つのLinuxコンテナにApache, PHP, MySQLすべてを乗せることもできるのですが、あまりイケてない方法らしいので、1コンテナは1つの役割を持つようにします。
基本的にDockerはデータの永続化(保存)はできないため、ホストのディレクトリをマウントすることで永続化を実現します。
1. MySQL
バージョンは5.7
マウントするディレクトリはMySQLの実データと、初期化用のデータの2か所
2. PHP
バージョンは7.1.5(アクティブサポート切れてるので、気になる方は変更してください)
マウントするディレクトリ、ファイルはドキュメントルートとphp.iniをマウントします。
ポートを8080とすることで、http://localhost:8080/
でアクセスできるようになります。
3. phpMyAdmin
MySQLのデータを確認するために作成します。
ポートを8000とすることで、http://localhost:8000/
でアクセスできるようになります。
フォルダ構成
下記のようなフォルダ構成とします。
work/ ├ mysql/ │├ data/ │└ init/ │ ├ 1_create.sql │ └ 2_insert.sql ├ php/ │ ├ Dockerfile │ └ php.ini ├ www/ │└ html/ └ docker-compose.yml
mysql/init/***.sql
は、dockerのMySQLの初回起動時にサンプルデータなどを読み込ませることができます。
ファイル名のascii順で実行されるので、ファイル名に連番を振ると便利です。
docker-compose.yml
今回のメインディッシュのdocker-compose.yml
ファイルは下記のようになりました。
version: '3'services:
mysql:
image: mysql:5.7
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=test
ports:
- 3306:3306
php:
build:
context: ./php
volumes:
- ./php/php.ini:/usr/local/etc/php/php.ini
- ./www:/var/www:cached
ports:
- 8080:80
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=password
links:
- mysql
ports:
- 8000:80
volumes:
- /sessions
php/Dockerfile
PHPに関しては各種モジュール(gd, ImageMagic, intl, zip)やcomposerを追加するため、Dockerfile
を定義しました。
FROM php:7.1.5-apache
RUN apt-get update
RUN apt-get install -y --no-install-recommends \
# for gd
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libwebp-dev \
libxpm-dev \
# for ImageMagick
libmagickwand-dev \
# for intl
libicu-dev \
# from zip
zlib1g-dev && \
pecl install imagick && \
docker-php-ext-enable imagick && \
docker-php-ext-install bcmath calendar exif gettext intl mbstring mysqli pdo pdo_mysql zip && \
docker-php-ext-install -j$(nproc) iconv && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
docker-php-ext-install -j$(nproc) gd && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
# enable mod_rewrite
a2enmod rewrite && \
# install composer
cd '/' && \
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"&& \
php composer-setup.php && \
php -r "unlink('composer-setup.php');" && \
mv composer.phar /usr/local/bin/composer
FROM php:7.1.30-apache
を設定するとfreetypeの設定のあたりでエラーが出てしまいました。
マウントの設定
マウントを設定するためにDocker Desktopの[Shared Drives]の設定でドライブへのアクセスを許可します。
このときに、ホスト側のアカウントにパスワードが必要になります。
Dockerの起動
dockerを起動してみます。
PS > docker-compose up -d
初回はイメージのダウンロードやPHPの各種モジュールのインストールなどに時間がかかります。
こんな感じでdone
となれば起動は完了です。
ブラウザでアクセス
/work/html/www/phpinfo.php
へファイルを配置し、ブラウザでhttp://localhost:8080
にアクセスします。
PHP7.1.5がインストールされていることが確認できました
phpMyAdminの確認
ブラウザでhttp://localhost:8000
にアクセスします。
phpMyAdminが表示され、test
という名前のDBが作成されていることが確認できます。
まとめ
docker-compose.yml
とDockerfile
を用意するだけで環境を用意することができました。
PHPのバージョンが7.1系なので7.4など最新のバージョンへの対応が課題です。
次は、この作成した環境へWpordpressを移植した手順(主につまづき点)をまとめたいと思います。
[AD]