コンテナ化の手法まとめ

投稿者: | 2023年4月20日

ひとまず成功したので、このサイトのコンテナ化におけるノウハウをまとめておきたいと思います

設定の概要

このサイトのコンテナ化に当たって、使用している docker イメージは 4 つ。

その内、PHP は FPM で動作させていて、これは WordPress の公式イメージの中の PHP-FPM をそのまま使っています。MariaDB もバージョンだけは指定 (10.10) して公式イメージのまま、これに加えて、データーベースの移行時に使うために phpMyAdmin も必要に応じて立ち上げられるようにしていますが、これも公式イメージのまま使用しています。

ほぼオリジナル部分は Apache を動かしているイメージだけで、これは Debian の公式イメージをベースにする dockerfile を書きました。ですので、今のところは、試行錯誤は、この Apache の部分だけ済んでいるので、結構、美しく、メンテも簡単です。

その docker-compose.yml はこんな感じです。( .env ファイルは別途作成しています)

services:
  apache:
    build:
      context: ./httpd
    image: httpd-cgi
    container_name: httpd
    volumes:
      - ./data/html:/var/www/html
    depends_on:
      - php-fpm
    restart: always
    environment:
      TZ: Asia/Tokyo
    ports:
      - 80:80

  php-fpm:
    image: wordpress:fpm
    container_name: php-fpm
    depends_on:
      - mariaDB
    volumes:
      - ./data/html:/var/www/html
    restart: always
    environment:
      WORDPRESS_DB_HOST: mariaDB
      WORDPRESS_DB_USER: ${DB_USER}
      WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
      WORDPRESS_DB_NAME: ${DB_NAME}
      TZ: Asia/Tokyo

  mariaDB:
    image: mariadb:${DB_VERSION}
    container_name: mariaDB
    volumes:
      - ./data/db:/var/lib/mysql
    restart: always
    environment:
      MARIADB_DATABASE: ${DB_NAME}
      MARIADB_USER: ${DB_USER}
      MARIADB_PASSWORD: ${DB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      TZ: Asia/Tokyo

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: phpmyadmin
    environment:
      PMA_ARBITRARY: '1'
      PMA_HOST: mariaDB
      UPLOAD_LIMIT: 10M
      TZ: Asia/Tokyo
    profiles: ["Setup"]
    ports:
      - 8080:80

イメージをビルドする Apache 以外は特に難しいことはしていませんが、phpMyAdmin には profiles を設定していて、プロファイルを指定しないと up するだけでは立ち上がらなくなっています。

Apache は Debian で動かす

PHP-FPM で動かすために、また Perl を CGI で動かすために、動作させる必要のある Apache は Debian の公式イメージ bullseye-slim に、Apache と Perl とそのライブライリをインストールしたイメージを作成して、これを動作させています。

Debian 以外にも、例えば、フットプリントが小さくなる Alpine を使う方法もあるとは思いますが、今回は Perl のインストールのこともあり、パッケージから簡単にライブラリまでインストールできる(その作法を知っている) Debian を採用しました。

同じ bullseye-slim がベースなら、Apache の公式イメージを使う方法もあったのですが、これは Apache のドキュメントルートがデフォルトで /var/www ではない、作成してみるとフットプリントがやたらでかいので、これも止めました。

さらに同じ Debian ベースなら Ubuntu の公式イメージもあるのですが、同じ Debian ベースなら本家でいいやんという心理的な理由と、明示的にフットプリントが小さそうな slim イメージが Debian 公式にはあったので、素直にこれを使っています。

で、実際の Dockerfile がこちら

FROM debian:bullseye-slim

RUN set -eux; \
        apt-get update; \
        apt-get install -y --no-install-recommends \
# Add Apache2
        apache2 \
# Add perl and perl lib
        perl \
        perl-base \
        perl-modules \
        libwww-perl \
        libcgi-pm-perl \
        liblocal-lib-perl \
        libjson-perl \
        libdigest-sha-perl \
        ; \
        rm -rf /var/lib/apt/lists/*

RUN a2enmod cgid
RUN a2enmod proxy
RUN a2enmod proxy_fcgi
RUN a2enmod rewrite

COPY ./conf/CGI_PHP-FPM.conf /etc/apache2/sites-available/
RUN a2ensite CGI_PHP-FPM

VOLUME ["/var/www/html"]

EXPOSE 80

ENTRYPOINT [ "/usr/sbin/apache2ctl", "-D", "FOREGROUND" ]

これでフットプリントは 182MB 。PHP-FPM や MariaDB よりもかなり小さいです。

やっていることは、パッケージから Apache と Perl とそのライブラリをインストールして、必要な Apache のモジュールを有効化、Apache のサイト設定ファイル CGI_PHP-FPM.conf をコピーして、これを有効化して、デーモンを立ち上げています。

しかし、CentOS などで、httpd.conf をゴリゴリ編集して、これまでサイト構築していた人からすると、モジュールの有効化?サイト設定の有効化?って何??となると思います。実際、私自身もそうでした。

次は、この Apache の設定の作法に関してはまとめます


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です