Docker – PHP/Apache

手動でインストール

DockerのUbuntu+Apache環境にPHPをインストールする。

インストール中、タイムゾーンの選択を求められる。

インストール完了後、apache2をリスタート。

このあと/var/www/htmlに以下のような内容でphpinfo.phpファイルを作成。

ブラウザーからlocalhost:8080/phpinfo.phpにアクセスして以下のような内容を確認。

  • タイムゾーンはOSでAsia/Tokyoにしたが、PHPではUTCになっている
  • php.iniの場所が確認できる(/etc/php/8.1/apache2/php.ini)

DockerfileとComposeでインストール

手動でのインストールと同じ手順をDockerfileとComposeで管理する。

Dockerfileの内容は以下の通り。

  • aptでsystemctl, apache2, phpをインストール
  • apt-getでtzdataをインストール
  • /etc/timezoneに”Asia/Tokyo”を書き込む
  • dpkg-reconfigureでtzdataを再設定(noninteractiveで)

上記のDockerfileの内容でコンテナをビルド。

phpinfoのdateの項目中default timezoneがAsia/Tokyoになっているのが確認できる。

以下の内容でphp.iniをDokerfileと同じ場所に置き、DockerfileにADD ./php.ini /etc/php/8.1/apache2/php.iniを書くという方法も紹介されていたが、それがなくてもPHPのタイムゾーンは変更されていた。

ただしmbstringの方は今後設定が必要かもしれない。

 

Docker – Apache

手動で構築

コンテナの起動

Ubuntuのコンテナ内で、手動でApache環境を構築する。

まずUbuntuのコンテナを起動する。その際、ホスト側のポート8080とコンテナ側のポート80をバインドしておく。

UbuntuのBash環境に入る。まだ/varディレクトリー下にwwwディレクトリーはない。

インストール

まずapt update

systemctlをインストール。

次にapache2をインストール。

/var/wwwディレクトリーが作成され、その下のhtmlディレクトリー内にindex.htmlが作られている。

Apche2起動

systemctlでApache2の稼働状況を確認し、起動させる。

ここでブラウザーからlocalhost:8080にアクセスすると、Apache2のデフォルトページが表示される。

Dockerfileでイメージ生成

Dockerfileに記述した内容で、指定した構成のイメージを作成することができる。ここではUbuntuのイメージをベースに、Apache2をインストールして実行させるイメージを作成する。

まず、Dockerfileを以下の内容で作成する。

  • FROMでベースとなる既存のイメージを指定
  • RUNで実行開始後にaptをupdateし、systemctlとapache2をインストール
  • CMDでsystemctlを実行させ、apache2を起動する
  • ホストとコンテナのポートのバインディングは、コンテナ起動時に指定する

Dockerfileがあるディレクトリーでbuildを実行。

docker build [Dockerfileの場所] -t [コンテナ名]

Dockerfileと同じディレクトリーでこれを実行しているので、Dockerfileの場所は'./'。何度か同じ操作を繰り返しているのでキャッシュが使われていてメッセージはシンプル。

作成されたイメージを確認。

コンテナ名、ポート番号のバインディングなどを指定してrunを実行。

この状態でブラウザーからlocalhost:8080にアクセスすると、Apache2のデフォルトページが表示される。

Docker Composeで起動

コンテナを起動するのに、毎回コマンドラインでコンテナ名を指定したりポートをバインドするのではなく、Docker Composeを使って事前に定めておく。

本来Composeは複数のコンテナを連携させるのに使われるが、単一のコンテナの起動設定にも使える。

まずDockerfileと同じ場所に以下の内容でdocker-compose.ymlファイルを作成する。

そしてdocker-composeを実行。その際、デーモンで実行させるため-dオプションをつける。

この状態でバインドされたホスト側のディレクトリーにindex.htmlを作ったり変更すると、localhost:8080にアクセスしてその内容が確認できる。

 

Vagrant – Apache – CentOS7

導入

ポートフォワーディング

Vagrantfileの以下の行のコメントを外すか、行がなければ記述。

Vagrantfile修正後はVagrantを再起動。

httpdの状態確認と起動

httpdの稼働状況を確認。

停止しているなら起動。

接続確認

ホストのブラウザーからlocalhost:8080にアクセス。