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の環境変数を記述

参考:Dockerでapache2起動 - Qiita

参考:www-dataって何者?誰? - Qiita

開発環境なのでとりあえず、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

を追記したところ、早くなった。

以上です。