TL;DR
Dockerチュートリアルを終えたので、にししふぁくとりー様で配布されている「てがろぐ」の開発環境をDockerコンテナで用意してみた。
↓以前に AN HTTPD + Strawberry Perl で開発環境をさくっと作った時の方がはるかに簡単です。
Repository
https://gitlab.com/nememori27/docker-tegalog-template
構成
/docker-tegalog-template
│ compose.yaml
│ README.md
│
└─server
│ Dockerfile
│ localhost.conf
│
└─app
(ここにソースファイル)
...
compose.yaml
version: "3"
services:
web:
tty: true
init: true
build: ./server
volumes:
- ./server/app:/var/www/html
- ./server/log:/var/log/apache2
ports:
- 80:80
./server/dockerfile
FROM ubuntu:20.04
# https://qiita.com/Kashiwara/items/07e154bb5e859445eac6
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
# https://northshorequantum.com/archives/dockerbuild_tz_hang.html
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN \
DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get install -y \
apache2 \
libapache2-mod-perl2 \
libapache2-mod-perl2-dev \
libcgi-pm-perl && \
a2enmod cgid && \
a2enmod rewrite && \
a2dissite 000-default && \
apt-get update -y && \
apt-get upgrade -y && \
apt-get -y clean && \
rm -rf /var/lib/apt/lists/*
COPY localhost.conf /etc/apache2/sites-enabled/localhost.conf
EXPOSE 80
CMD ["apachectl", "-D", "FOREGROUND"]
./server/localhost.conf
ServerName localhost
AddHandler cgi-script .cgi .pl
<Directory /var/www/html>
Options All
AllowOverride All
</Directory>
<VirtualHost *:80>
DocumentRoot /var/www/html
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<IfModule cgid_module>
#
# ScriptSock: On threaded servers, designate the path to the UNIX
# socket used to communicate with the CGI daemon of mod_cgid.
#
Scriptsock cgisock
</IfModule>
補足
「てがろぐ」のソースファイルはホストコンピューター側の /app
以下に配置し、コンテナ側にバインドマウントする。
Dockerイメージサイズは合計194MB程度になった。
詰まったところとその対応
Docker-compose up –build でタイムゾーンを聞かれるが入力しても無反応
参考:Docker Buildでタイムゾーン設定で固まる : 量子プログラミング入門→量子コンピューティングサービス構築入門
こちらの記事を参考にして、Dockerfileに
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
を記述した。
Apache2の環境変数を記述
開発環境なのでとりあえず、Apacheを実行するユーザーをデフォルトの"www-data"に設定しておく (なくても動くかもしれない?)
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
うわっ…私のDockerコンテナ、落ちるの遅すぎ…?
参考:うわっ…私のDockerコンテナ、落ちるの遅すぎ…? - Qiita
同じようにシャットダウンに時間がかかっていたので、compose.yaml
に
tty: true
init: true
を追記したところ、早くなった。
以上です。