LoginSignup
4
0

More than 3 years have passed since last update.

Dockerでpostgresとpgweb(GUI)を構築した

Last updated at Posted at 2020-08-12

DockerによるPHP、Apache、PostgreSQLの開発環境を構築した時の流れをまとめようと思います。

また、データベース管理インタフェースを使うと直感的に操作できて便利なので、PostgreSQLについてはモダンなUIであるpgwebも導入してみます。

環境

  • Mac for Docker
  • Apache2.4
  • PHP7.1
  • PostgreSQL9.6

構成

スクリーンショット 2020-08-11 12.15.42.png

ファイル群

docker/web/Dcokerfileに以下を記述します。

FROM php:7.1-apache

COPY ./php.ini /usr/local/etc/php/

RUN set -ex apk --no-cache add postgresql-dev libpq-dev && \
    apt-get update && apt-get install -y libpq-dev \
    vim \
    less \
    && docker-php-ext-install pdo pdo_pgsql pgsql mbstring

docker/web/Dcokerfileと同じ階層にphp.iniを作成します。

docker/web/php.ini
[Core]
display_errors = On
error_reporting = E_ALL
error_log = /var/log/apache2/error.log
log_errors = On

[Date]
date.timezone = 'Asia/Tokyo'

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = auto
mbstring.http_input = auto
mbstring.http_output = auto
mbsting.encoding_translation = Off
mbstring.detect_order = auto

dockerディレクトリにdocker-compose.ymlを作成します。

docker/docker-compose.yml
version: '3'

services:
  web:
    build: ./docker/web/
    ports:
      - 8110:80
    volumes:
      - .:/var/www/html
    depends_on:
      - db
  db:
    image: postgres:9.3
    container_name: postgres
    ports:
      - 5433:5432
    volumes:
      - ./docker/db:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_DB: test
      POSTGRES_USER: test
  db-gui:
    image: sosedoff/pgweb
    container_name: "pgweb"
    ports:
      - "8081:8081"
    depends_on:
      - db

表示確認用ファイル作成

dockerディレクトリにindex.phpを作成します。
とりま、phpinfo()のみでOKです。

docker/index.php
<?php

phpinfo();

コンテナ立ち上げる

以下コマンドで実行します。

docker-compose up -d

コンテナ確認してみます。

$ docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
a25edb35c693        sosedoff/pgweb      "/usr/bin/pgweb --bi…"   10 seconds ago      Up 9 seconds        0.0.0.0:8081->8081/tcp   pgweb
e5f1ce8c159f        php_job_web         "docker-php-entrypoi…"   10 seconds ago      Up 9 seconds        0.0.0.0:8110->80/tcp     web
c2ae9b7b2ab6        postgres:9.3        "docker-entrypoint.s…"   11 seconds ago      Up 10 seconds       0.0.0.0:5433->5432/tcp   postgres

ブラウザ確認

localhost:8110にアクセスします。
以下のように表示されればOKです。
スクリーンショット 2020-08-12 14.17.32.png

pgwebの設定

localhost:8081にアクセスします。
以下のように入力すれば接続できるはずです。

スクリーンショット 2020-08-12 14.05.56.png

項目
Host データベースのコンテナ名
Username environmentのPOSTGRES_USER
Password 空欄でOK(セキュリティ的にアウトなので注意)
Database environmentのPOSTGRES_DB
SSL Mode disable

データベース管理ツールのpgwebからデータベースのアクセスするには、DBコンテナのIPが必要なのですが、docker-compose.yml に記載したデータベースコンテナ名でアクセス出来ます。

よって、Host名はデータベースのコンテナ名を指定しています。

pgwebでテーブルを作ってみる

スクリーンショット 2020-08-12 14.47.41.png

create table users (
  id integer, 
  name varchar(10)
);

をRunQueryしたらUsersテーブルの出来上がりです。

まとめ

ご紹介したものは、あくまでローカルでの開発時を想定しており、本番利用には適さないです。

また、ローカルとはいえ、データベース認証をしっかり行うこと(ユーザー名・パスワードを分かりにくい文字列にするなど)を推奨します。

間違いがありましたらご指摘いただけますと幸いです。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0