DockerにPHPとMYSQLを用意して、Apacheからアクセスします。

概要

Dockerには、PHPやMySQLやApacheなどの環境が元から用意されています。なので、これらを正しく使えば、とても簡単に環境を構築できます。

今回は、これらを使ってLAMP環境を作ってみます。

環境

Dockerのイメージは、Docker Hubにあるものを使用します。

それらの情報を下記に書いておきます。

  • PHP……php:5.6-apache
  • MySQL……mysql:5.7

MySQLの用意

最初に、データベースであるMySQLの準備をします。

イメージは、下記のリンクのバージョン5.7を使用します。

mysql - Official Image | Docker Hub

下記のコマンドを実行してMySQLのイメージをダウンロードします。

docker pull mysql:5.7

コンテナの作成は、下記のようにします。

docker run --name mysql -e MYSQL_ROOT_PASSWORD=パスワード -d mysql:5.7

–nameは、今回mysqlとしました。この名前は後々使うので覚えておきます。

MYSQL_ROOT_PASSWORDには、データベースのパスワードを設定します。

データベースにアクセスする場合は、ユーザー名: root、パスワード: 指定したパスワード、のようにしてアクセスします。

このようにコンテナを作成した時、データベースの文字コードはutf-8ではないので、文字コードをutf-8にしたい場合は、下記の内容が書かれたファイルを作成します。

[mysqld]
character-set-server=utf8

このファイルの名前をmy.cnfとして、/my/conf.d/my.cnfに置いておきます。

そうしたら、dockerの-vオプションを使ってこのようにコンテナを起動します。

docker run --name mysql -v /my/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=パスワード -d mysql:5.7

-vオプションを使って、設定ファイルをコンテナから見ることができるようにします。

PHPとApacheの用意

次に、PHPとApacheの準備をします。

イメージは、下記のリンクにあるものを使用します。

Docker

今回使用するphp:5.6-apacheは、PHPの環境の他にWebサーバのApacheも入っているので、簡単にPHPのサイトを動かすことができます。

下記のコマンドを実行して、イメージをダウンロードします。

docker pull php:5.6-apache

そして、–link、-v、-pオプションなどを利用して、下記のようにして、環境の出来上がりです。

docker run -p 80:80 -v /my/www:/var/www/html --link mysql:mysql --name php -d php:5.7

-vオプションの、/my/wwwは、今回の環境で実行したいファイルなどがある場所を指定します。

しかし、ダウンロードしたイメージには、PHPのMySQLなどに接続するための拡張モジュールがインストールされていません。なので、拡張モジュールである、MySQL、MySQLi、PDO_MySQL と、文字化け防止のためにmbstringをインストール するためのコマンドを実行します。

下記のコマンドでシェルに接続します。

docker exec -ti php bash

そして、パッケージのアップデートをしてから、インストールをします。

apt-get update
docker-php-ext-install mysql mysqli pdo_mysql mbstring

その後、再起動をすれば、環境の完成です。

あとは、ipアドレスを指定してアクセスすれば動作の確認ができます。

まとめ

dockerのオプションをいくつか使用したので、なかなか理解するのが難しいと思います。

何度か、やってみて覚えましょう。