web-technical-blog

web開発に関する技術メモ

DockerでPHP7.0 + Apacheの環境を構築する

PHP7.0 + Apacheを起動する

docker run -d -p 80:80 --name php70-apache php:7.0-apacheでイメージからコンテナを立ち上げる(ローカルにimageがない場合はDocker Hubから取得してくれる) -pオプションでポートを80番でフォワード

$ docker run -d -p 80:80 --name php70-apache php:7.0-apache
Unable to find image 'php:7.0-apache' locally

7.0-apache: Pulling from library/php
f49cf87b52c1: Pull complete
185616061386: Pull complete
5fc132db2e0d: Pull complete
00c1c323341a: Pull complete
ff3701349211: Pull complete
faab1d6ad70f: Pull complete
eae8d88d75e0: Pull complete
7fbd4c732645: Pull complete
b2e59bdd1208: Pull complete
d5519147d4e5: Pull complete
512315391b1a: Pull complete
b32d82403bad: Pull complete
b5eb11551d42: Pull complete
02fee8125e6e: Pull complete
Digest: sha256:6616fa9ab36d721c2e3e0e128295f474f1e6f5f7bd04207ce0dc50581ecd4073
Status: Downloaded newer image for php:7.0-apache
f4821286b2156584088f0c29c6e09c6cc4b582c310b6449ca94892bb944e219f

Apacheが起動していることを確認

$ curl http://localhost/
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /
on this server.<br />
</p>
<hr>
<address>Apache/2.4.10 (Debian) Server at localhost Port 80</address>
</body></html>

php70-apacheコンテナへログインする Forbiddenページしか表示されないので、実際にPHPを書いて表示させてみる

$ docker container exec -ti php70-apache bash
$ echo '<?php phpinfo();' > index.php

ホスト⇄コンテナ間でディレクトリを同期する

コンテナを削除した際に同時にそのコンテナ内にあるファイルも消えてしまう

なので、ホスト側とコンテナのディレクトリを同期させて、そこにファイルを書き込む形式をとる

# コンテナを停止
$ docker container stop php70-apache
# コンテナを削除
$ docker container rm php70-apache

新しく新しくディレクトリが同期されるコンテナを作成する ホスト側の同期対象となるディレクト/Users/121799/docker/php70-apache/www コンテナ側はドキュメントルートである /var/www/htmlとする

$ docker run -d -p 80:80 -v /Users/121799/docker/php70-apache/www:/var/www/html --name php70-apache php:7.0-apache
e78a1ac509425b8cf56ee2c0e988a5d5ec39eb539ea8ffefcced4a7ab6bcea76

/Users/121799/docker/php70-apache/wwwにいる場合に

$echo '<?php phpinfo();' > index.php

これで再度、localhostにアクセスしてみる ホスト側で作成されたファイルがコンテナへ正しく同期されていることが確認できる

参考URL

qiita.com