LoginSignup
18
18

More than 1 year has passed since last update.

PostgreSQL と PGAdmin の docker-compose

Last updated at Posted at 2022-07-28

docker-compose

何も考えずに PostgreSQL と PostgreSQL の管理ツール PGAdmin を起動する docker-compose を記載します。

Docker がインストールされていることを前提としています。

docker-compose でDockerコンテナ起動

下記の docker-compose.yml ファイルを任意の場所に配置し、ターミナルからコマンド一つで postgreSQL と PGAdmin が使用できるようになります。

docker-compose.yml
version: '3.8'

services:
  service_postgres:
    image: postgres:14
    container_name: container_postgres
    environment: 
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: testdb01
    ports: 
      - "5433:5432"
    volumes:
      - volume_postgres:/var/lib/postgresql/data
      - ./postgres_service/initdb.d:/docker-entrypoint-initdb.d

  service_pgadmin:
    image: dpage/pgadmin4:6.11
    container_name: container_pgadmin
    ports:
      - 8080:80
    volumes:
      - volume_pgadmin:/var/lib/pgadmin
    environment:
      PGADMIN_DEFAULT_EMAIL: example@example.com
      PGADMIN_DEFAULT_PASSWORD: password
    depends_on:
      - service_postgres

volumes:
  volume_postgres:
    name: vpg
  volume_pgadmin:
    name: vpga

docker-compose.yml を任意のディレクトリ(ここでは C:/dev/labo/test-container01) の下に置き、ターミナルから「docker-compose up -d」コマンドを実行します。

PS C:\dev\labo\test-container01> docker-compose up -d  
Creating network "test-container01_default" with the default driver
Creating volume "vpg" with default driver
Creating volume "vpga" with default driver
Pulling service_pgadmin (dpage/pgadmin4:6.11)...
6.11: Pulling from dpage/pgadmin4
Digest: sha256:2b1ed86bdde8088129c93f652d8601a31ce9660decab1314a50c2eb18240f3e1
Status: Downloaded newer image for dpage/pgadmin4:6.11
Creating container_postgres ... done
Creating container_pgadmin  ... done
PS C:\dev\labo\test-container01> 

PostgresSQL と PGAdmin のコンテナが立ち上がりました。

次に「docker-compose ps」コマンドで立ち上がっているコンテナの一覧を確認します。

PS C:\dev\labo\test-container01> docker-compose ps
       Name                     Command              State               Ports
------------------------------------------------------------------------------------------
container_pgadmin    /entrypoint.sh                  Up      443/tcp, 0.0.0.0:8080->80/tcp
container_postgres   docker-entrypoint.sh postgres   Up      0.0.0.0:5433->5432/tcp
PS C:\dev\labo\test-container01> 

PGAdmin

pgadminを使ってデータベースに接続します。
まずはブラウザで「http://localhost:8080」を表示します。

FireShot Capture 001 - pgAdmin 4 - localhost.png

Email Adress に [example@example.com]
Password に [password]
を入力してログインします。

FireShot Capture 002 - pgAdmin 4 - localhost.png

Serversを右クリック⇒登録⇒サーバ...

FireShot Capture 003 - pgAdmin 4 - localhost.png

名前:service_postgres

FireShot Capture 004 - pgAdmin 4 - localhost.png

ホスト名:service_postgres
ポート番号:5432
管理用データベース:postgres
ユーザ名:postgres
パスワード:postgres
を入力し「保存」ボタンを押下します。

FireShot Capture 005 - pgAdmin 4 - localhost.png

作成したデータベースに接続できました。

ポートフォワーディング

    ports: 
      - "5433:5432"

上記の記載でホストの 5433 ポートから service_postgres コンテナの 5432 ポートにフォワードしてます。
ホスト(ローカル端末)の 5433 にアクセスすると service_postgres コンテナの 5432 ポートにフォワードされます。
気を付けるのは同じ docker-compose の内部(ここではservice_pgadmin コンテナ)からアクセスする場合はホストを経由しないで直接 service_postgres コンテナに接続するので 5432 ポートを指定します。

ローカル端末に A5 などのデータベース管理ツールを入れてデータベースに接続する場合は 5433 ポートを指定します。

データの永続化

通常コンテナ内のデータはコンテナ内部に保存されるため、コンテナを削除するとデータも消えてしまいます。
コンテナが削除されてもデータベースのデータは残しておきたいシチュエーションは多いと思います。
そこでデータの保存先ディレクトリをコンテナの外側にマウントしておき、コンテナが消えてもデータが消えないようにしておきます。

~~~
    volumes:
      - volume_postgres:/var/lib/postgresql/data
~~~

volumes:
  volume_postgres:
    name: vpg

上記の指定では volume_postgres という ボリューム を定義し、 volume_postgres という ボリューム に service_postgres コンテナの /var/lib/postgresql/data ディレクトリをマウントしています。
/var/lib/postgresql/data ディレクトリは PostgreSQL がデータを保存するディレクトリです。
ボリューム は service_postgres コンテナの外側に存在しているため service_postgres コンテナを削除しても消えることはありません。

18
18
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
18
18