phpPgAdmin を Docker で動かしてみた

クラウド環境が PaaS オンリーで、ネットワークもオンプレと繋がない場合、Docker コンテナーを VM みたいに扱って利用する場合があります。しかしながら VM だと汎用的なので、例えば PostgreSQL に接続して操作する事に限定した Docker コンテナーを用意した方がセキュアです。Docker Hub にもいくつか phpPgAdmin のコンテナーはありましたが古そうだったので、自前で phpPgAdmin の Docker コンテナーを作ってみました。

Dockerfile

FROM --platform=linux/amd64 public.ecr.aws/docker/library/php:7.2-apache

RUN apt-get update && \
    apt-get install -y \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/* \
    && docker-php-ext-install pgsql

RUN curl -L -o /tmp/phpPgAdmin.tar.gz "https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz" && \
    tar -zxvf /tmp/phpPgAdmin.tar.gz -C /var/www/html --strip-components=1 && \
    rm /tmp/phpPgAdmin.tar.gz && \
    chown -R www-data:www-data /var/www/html

RUN a2enmod rewrite

COPY config.inc.php /var/www/html/conf/config.inc.php

CMD ["apache2-foreground"]

config.inc.php

<?php

	$conf['servers'][0]['desc'] = 'PostgreSQL';
	$conf['servers'][0]['host'] = '192.168.10.104';
	$conf['servers'][0]['port'] = 5432;
	$conf['servers'][0]['sslmode'] = 'allow';
	$conf['servers'][0]['defaultdb'] = 'template1';
	$conf['servers'][0]['pg_dump_path'] = '/usr/bin/pg_dump';
	$conf['servers'][0]['pg_dumpall_path'] = '/usr/bin/pg_dumpall';

	$conf['default_lang'] = 'auto';
	$conf['autocomplete'] = 'default on';
	$conf['extra_login_security'] = false;
	$conf['owned_only'] = false;
	$conf['show_comments'] = true;
	$conf['show_advanced'] = false;
	$conf['show_system'] = false;
	$conf['min_password_length'] = 1;
	$conf['left_width'] = 200;
	$conf['theme'] = 'default';
	$conf['show_oids'] = false;
	$conf['max_rows'] = 30;
	$conf['max_chars'] = 50;
	$conf['use_xhtml_strict'] = false;
	$conf['help_base'] = 'http://www.postgresql.org/docs/%s/interactive/';
	$conf['ajax_refresh'] = 3;
	$conf['plugins'] = array();
	$conf['version'] = 19;

?>

ローカルで動作検証

docker run -d --rm \
  --name postgres \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=postgres \
  public.ecr.aws/docker/library/postgres:14

docker build -t phppgadmin .

docker run -d --rm \
  --name phppgadmin \
  -p 80:80 \
  phppgadmin

ログイン直後の画面

参考

https://github.com/phppgadmin/phppgadmin

https://github.com/phppgadmin/phppgadmin/blob/master/conf/config.inc.php-dist

タグ: , ,