【Docker For Windows】docker-composeを使ってPostgresとpgAdminを入れてみよう!

Docker For WindowsでDB環境やサーバー環境を構築するのに便利なdocker-composeコマンドについて、分かりやすく解説していこうと思います。

WSL2経由でDocker For Windowsをインストールする手順については下記URLで解説しているので、気になる方はご確認ください。

広告

はじめに

docker-composeコマンドを使えば、DB環境やサーバー環境を何度でも作り直すことができます。

その時に用意しないといけないのが、「docker-compose.yml」ファイルです。

dockerのコマンドを逐一実行していくことで、DB環境やサーバー環境を作ることができるのですが、それらのコマンドを一括で実行できるように便利にしたものがdocker-composeコマンドです。

docker-composeコマンドを実行するための手順は、下記の通りとなります。

  1. フォルダ構成の決定と作成
  2. docker-compose.ymlファイルの作成
  3. 「docker-compose up -d」コマンドの実行

フォルダ構成の決定と作成

今回インストールするのはPostgresの13.3とpgAdmin4の5.1です。

コンテナごとにフォルダに分けたいので、それぞれpostgresとpgadminフォルダに分けます。

postgresフォルダには、さらにデータの永続化を行うdataフォルダと初回起動に実行されるsqlを配置するinitフォルダを作成します。

pgadminフォルダには、このフォルダ内がそのままデータの永続化に使われます。

postgreフォルダとpgadminフォルダと同階層にdocker-compose.ymlファイルを配置します。

フォルダ構成は下記の通りとなります。

.
├─pgadmin
├─postgres
│  ├─data
│  └─init
└─docker-compose.yml

永続化とは

永続化とはパソコンの電源を切ってもデータが保存されているということです。

Docker のデータは Docker を停止すると保存されていたデータはすべて削除されてしまいますが、永続化して保存したいデータをローカルに退避(正確にはローカルフォルダと Docker サービス内のフォルダ同士が同期されます)しておけば、Docker を再起動してもデータは保存されたまま残っています。

広告

docker-compose.ymlファイルの作成

ymlファイルは半角スペース2文字で段落を表し、1行+改行で意味のあるコードになります。

また、ymlファイル内にタブ(\t)を使うと実行する時にエラーになります。

「postgres:」の見出しが付いている段落がPostgresコンテナに関する記述、「pgadmin4:」の見出しが付いている段落がpgAdmi4コンテナに関する記述です。

それぞれの見出しの意味は下記の通りとなっています。

image どのコンテナイメージを使うか
container_name コンテナの名前
volumes どのローカルフォルダとコンテナを紐づけるか (永続化もここで行っています。)
environment 環境設定
hostname ホストの名前
restart コンテナが停止した際に再起動を行うか
version: '3'

services:

  postgresql:
    image: postgres:13.2
    container_name: postgresql
    ports:
      - 5432:5432
    volumes:
      - ./postgres/data:/var/lib/postgresql/data
      - ./postgres/init:/docker-entrypoint-initdb.d
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: testdb
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
    hostname: postgres
    restart: always
    user: root

  pgadmin4:
    image: dpage/pgadmin4:5.1
    container_name: pgadmin4
    ports:
      - 80:80
    volumes:
      - ./pgadmin:/var/lib/pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: root
      PGADMIN_DEFAULT_PASSWORD: root
      PGADMIN_DEFAULT_EMAIL: admin@abcde.com
    hostname: pgadmin4
    restart: always

「docker-compose up -d」コマンドの実行

PowerShellでdocker-compose.ymlファイルが配置されたフォルダに移動して、下記コマンドを実行します。

docker-compose up -d

pgAdmin4でログインしてみる

  • docker-compose.ymlファイルで設定したメールアドレスとパスワードを入力し、Loginボタンを押下します。
  • ログインできました。
PostgresのバージョンとpgAdmin4のバージョンとが相性悪い場合、下記のようなエラーが出てログインできても作成したテーブルのデータが表示されないといった現象が起こりました。Postgres13.3とpgAdmin4 5.1では、そのようなことは起こりませんでしたのでご心配なく。
ERROR:  column rel.relhasoids does not exist
LINE 1: SELECT rel.relhasoids AS has_oids

広告

まとめ

docker-composeコマンドでDB環境を構築する手順を見てきました。

他の例えばMySQL用コンテナに変えたいといったような場合も起動するコンテナを切り替えるだけで、DB環境を入れ替えることができます。

何と言ってもDocker環境はホスト端末を選ばずに再現できるので本当に便利ですよね!

最後までお読み頂きありがとうございました。

広告

コメントを残す

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

CAPTCHA


ABOUT US
ぽむ
はじめまして! ぽむ と申します。 Java、Kotlin (Android)、VBAなどの開発経験があるITエンジニアです。 備忘録として始めたブログですがみなさまのお役に立てたら光栄です。 英語など IT 以外の話題にも触れていこうと思っています。 詳しい自己紹介についてはこちら! よろしくお願いします。