【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-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環境はホスト端末を選ばずに再現できるので本当に便利ですよね!

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

コメントを残す

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