DamienKarrus’s blog

プログラミングとクライミングの足跡

オリジナルイメージ(3) Apache+PHP+ソースファイルのイメージ作成 Docker入門-11

ApachePHPをインストールして、phpのソールファイル(index.phpのみ)をコピーしたイメージを作ってみる。
ApachePHPはaptを使ってインストールし、その後DocumentRootにPHPをコピーする。
ワークディレクトリをapとする。この中に用意するファイルは2つ。
index.php

<html>
<body>
Your IP <?php echo $_SERVER['REMOTE_ADDR']; ?>
</body>
</html>

Dockerfile

FROM debian
EXPOSE 80
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update \
&& apt install -y apache2 php libapache2-mod-php \
&& apt clean \
&& rm -rf /var/lib/apt/lists/* \
&& rm /var/www/html/index.html
COPY index.php /var/www/html/
CMD /usr/sbin/apachectl -DFOREGROUND
STOPSIGNAL SIGWINCH

内容は次の通り
(1) debianイメージをベースに構築する
(2) ポート80で通信をすることを想定している
(3) aptでワーニングが出ないように変数設定 ← 設定したのにワーニング出た
(4) RUNコマンドにてapache2 php libapache2-mod-php をインストールし、ワークワイルをクリアした後、デフォルトのindex.htmlを削除
(5) ソースファイルであるindex.phpをDocumentRootにコピー
(6) Apacheをフォアグラウンドで実行するよう指定
(7) 終了シグナルをSIGWINCHに変更
イメージを作成してみる

$ cd ap
$ docker build . -t myimg
...(snip)...
Successfully built 90c2d82e3463
Successfully tagged myimg:latest

出来たイメージを確認する

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
myimg        latest    90c2d82e3463   3 minutes ago   254MB

コンテナを起動する

$ docker container run -dit --name myphpimg -p 8080:80 myimg

ブラウザでアクセスして動作確認したら削除しておく

$ docker container stop myphpimg
$ docker container rm myphpimg

なお、続けて同じようにビルドをかけると一瞬で出来上がる。これはキャッシュを使用しているためである。もしキャッシュを使用せずに新たにビルドしたいときは --no-cache オプションをつける。

$ docker build . -t myimg --no-cache

次の記事 damienkarrus.hatenablog.com