docker-compose
何も考えずに PostgreSQL と PostgreSQL の管理ツール PGAdmin を起動する docker-compose を記載します。
Docker がインストールされていることを前提としています。
docker-compose でDockerコンテナ起動
下記の docker-compose.yml ファイルを任意の場所に配置し、ターミナルからコマンド一つで postgreSQL と PGAdmin が使用できるようになります。
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」を表示します。
Email Adress に [example@example.com]
Password に [password]
を入力してログインします。
Serversを右クリック⇒登録⇒サーバ...
名前:service_postgres
ホスト名:service_postgres
ポート番号:5432
管理用データベース:postgres
ユーザ名:postgres
パスワード:postgres
を入力し「保存」ボタンを押下します。
作成したデータベースに接続できました。
ポートフォワーディング
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 コンテナを削除しても消えることはありません。