phpコンテナの構築

Dockerfileを用いてLAMP環境を構成するコンテナのうちphpコンテナを構築してみましょう。

あらかじめ ~/MyDocker/php_sample ディレクトリを作成し、その中にDockerfileを作成しておきます。

1. phpイメージの利用

まず、dockerhubから公式イメージのphp:7.4-apacheをpullして利用します。このイメージはdebian上にapache2およびphpモジュールのインストールを実行したものとなります。

# apacheとphp7.4がインストールされたwebサーバ
FROM php:7.4-apache

2. iniファイルの準備

続いて、日本語向けの環境が利用できるように、php.iniファイルの準備を行います。Dockerfileのあるディレクトリに、php.ini を作成し

php.ini

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

として保存しておきましょう。 これによってタイムゾーンの設定や日本語環境の設定などが行われます。

なお、iniファイルのiniとは、初期化を表す initialize の省略形です。

3. iniファイルのコピー

作成したiniファイルをイメージ内にCOPYコマンドでコピーします。

php:7.4-apache イメージにおける設定ファイルの設置場所は /usr/local/etc/php/ です。

# apacheとphp7.4がインストールされたwebサーバ
FROM php:7.4-apache

# 設定ファイルをコンテナにコピー
COPY ./php.ini /usr/local/etc/php/

4. 各種phpモジュールのインストール

つづいて、各種php拡張モジュールのインストールを行います。 今回インストールするモジュールは以下とします。

  • pdo_mysql: PDO(PHP Data Object)をmysqlで利用
  • mysqli: mysqli_queryなどの利用
  • mbstring: マルチバイト文字関連処理の利用
  • exif: 画像ファイルのexif情報を扱う処理の利用

phpモジュールのインストールは通常apt-getを用いて行いますが、dockerを利用した構築の場合、代わりに docker-php-ext-install を用います。

# apacheとphp7.4がインストールされたwebサーバ
FROM php:7.4-apache

# 設定ファイルをコンテナにコピー
COPY ./php.ini /usr/local/etc/php/

# 各種PHPモジュールのインストール
RUN apt-get update && apt-get install -y libonig-dev && docker-php-ext-install pdo_mysql mysqli mbstring exif

以上でphpコンテナの構築用のDockerfileの準備は完了です。

イメージのビルド

~/MyDocker/php_sample に移動して、イメージのビルドを行います。

docker build -t [ユーザ名]/php_sample:1.0 .

上記のコマンドでイメージを作成し、

docker container run --name php -p 8080:80 --rm [ユーザ名]/php_sample:1.0

でコンテナを立ち上げましょう。

http://localhost:8080

にアクセスすると、apacheの画面が開きます。(現時点ではドキュメントルートにファイルが存在しないためエラー表示となります)

docker exec -it php bash

上記のコマンドでphpコンテナにログインし、/var/www/html (ドキュメントルート)にいることを確認して

echo "<?php echo 'Hello, World';" > index.php

として、index.phpを作成してみましょう。

再度 http://localhost:8080 にアクセスすると、phpから出力された「Hello, World!」の文字が出力されます。

これでphpコンテナの作成は完了です。

コンテナからexitして、

docker container stop php

でphpコンテナを停止しておきましょう。

ボリュームのアタッチ

現状では、コンテナ内のファイル操作にはコンテナへのログインを行い、さらにコンテナ内でファイルの作成を行う必要があります。これは非効率です。

ボリュームのマウントを行うことで、利用しているOSのフォルダをコンテナ内のフォルダとして扱うことが可能です。

まず、コンテナを立ち上げる際に、-vオプションを使うことでボリュームのマウントが可能です。

-v オプションは

-v [ローカルのフォルダパス(絶対パス)]:[コンテナ内のフォルダパス]

という形式で設定可能です。

docker container run --name php -p 8080:80 -v [php_sampleのパス]/www:/var/www --rm [ユーザ名]/php_sample:1.0

としてコンテナを実行してみましょう。(php_sampleのパスは、php_sampleフォルダ内でpwdを実行して確認しましょう。)

正常に実行されると、php_sampleディレクトリ内にwwwディレクトリが作成され、その中にhtmlディレクトリがある状態になります。

VSCodeなどでhtml内にindex.phpファイルを作成し、

index.php

<?php
echo 'volumeのテスト';

として保存してみましょう。

http://localhost:8080 にアクセスすると、index.phpが実行され「volumeのテスト」と表示されます。

このように、ボリュームのマウントを使うことで

  • コンテナ内のデータをローカルのデータであるかのように編集できる
  • 次回以降もマウントしたフォルダを再度利用することでデータを再利用できる

といったメリットがあります。

results matching ""

    No results matching ""