WSL2+DockerDesktop+docker-composeでPostgreSQLとadminerを動かす

docker-composeでポスグレとadminerの環境を構築

最終更新 2024年 4月 1日

WindowsでWSL2とDockerDesktop、docker-composeの環境でポスグレとadminerを構築します.
adminerはPHP製のDB管理ツール.

用意するもの

  • WSL2, DockerDesktop, docker, docker-composeをインスコ済の環境

docker-composeのyamlを記述

最初に適当なディレクトリ内にdocker-compose.yamlファイルを作り, ポスグレ用の設定を記述していきます.
データの永続化はpgdataという名前で設定済み.
コンテナ名やイメージのバージョンなどはお好みでどうぞ.

$ mkdir test-project && cd test-project
version: '3'
services:
  postgres:
    container_name: test-postgres
    image: postgres:latest
    restart: always
    ports: 
      - "5432:5432"
    volumes:
      - ./postgres:/docker-entrypoint-initdb.d
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "testuser"
      POSTGRES_PASSWORD: "testpass"
      TZ: "Asia/Tokyo"
  adminer:
    container_name: test-adminer
    image: adminer:latest
    restart: always
    ports:
      - "8080:8080"
volumes:
  pgdata:

初期化用SQL記述

次に, 初期化用のSQLをファイルに記述します.
SQLファイルの場所は上記yamlの10行目./postgres部分で指定しています.

$ mkdir postgres && touch postgres/init.sql

内容は適当です.

CREATE DATABASE testdb;
\c testdb;
DROP TABLE IF EXISTS test;

CREATE TABLE test (
    id char(8) PRIMARY KEY,
    name varchar(32),
    date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);

コンテナ起動

$ docker-compose up -d
[+] Running 2/3
 ⠴ Network test_default     Created                                                                                                                           0.6s 
 ✔ Container test-adminer   Started                                                                                                                           0.6s 
 ✔ Container test-postgres  Started 

Startedが表示されれば成功.
DockerDesktopからも, コンテナの状態を確認できます.

Adminerに接続

ブラウザからlocalhost:8080に接続.

ログイン画面が表示されるので, データベース種類はPostgreSQLを選択.
サーバはyamlの3行目に書いたサーバ名で, 上記の場合postgresです.
ユーザ名とパスワードもyamlに記述した通りtestusertestpass.
データベースは入力しなくてもログイン後に選択できます.

これで構築は完了です.
コンテナを終了するときは, DockerDesktopから行うか, 以下のコマンドを入力.

$ docker-compose stop # コンテナ停止
$ docker-compose down # コンテナ削除