記事の目次
はじめに
「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を移植した手順(主につまづき点)をまとめたいと思います。
コメント