【Docker】Docker compose ~ PostgreSQL ~

■ はじめに

 Docker compose で
ローカル開発環境用のPostgreSQLを立ち上げる

Web UI が欲しい場合は、以下の関連記事を参照のこと

Docker compose ~ Pgweb/pgAdmin ~
https://dk521123.hatenablog.com/entry/2023/08/10/111919

目次

【1】環境確認
 1)コマンド例
【2】サンプル
 例1:Hello World
 例2:マスタデータを入れるには

【1】環境確認

* 自分の環境が、docker compose できる環境かどうかを調べる。
 => もし、うまくいかない場合、以下の関連記事を参考に構築する

WSL ~ Docker-CE + Genie / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/03/003836
Docker compose ~ Version 2 ~
https://dk521123.hatenablog.com/entry/2023/01/02/000000

例1:Hello World

# Step1:docker の確認
sudo docker version

# Step2:docker compose の確認
sudo docker compose version

# Step3:docker compose の Hello world
ls
# compose.yml が存在する(以下「compose.yml」)

# docker compose の実行
docker compose up -d
[+] Running 2/2
 ✔ Network xxxx_default    Created                                                                0.2s 
 ✔ Container xxxx-hello-1  Started

# Step4:後片付け
sudo docker compose down
[+] Running 2/2
 ✔ Container xxxx-hello-1  Removed                                                                0.0s 
 ✔ Network xxxx_default    Removed

compose.yml
https://qiita.com/KEINOS/items/43d9415e351d80f78c8b

version: "3"
services:
  hello:
    image: hello-world:latest

【2】サンプル

例1:Hello world

compose.yml

version: '3'

services:
  postgres:
    image: postgres:latest
    container_name: container_postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      PGPASSWORD: password
      POSTGRES_DB: sample
      TZ: "Asia/Tokyo"
    ports:
      - 5431:5432
    volumes:
      - postgres:/var/lib/postgresql/data
volumes:
  postgres:
    name: vpg

コマンド例

# Step1: 立ち上げる
sudo docker compose up -d

# Step2:後片付け
sudo docker compose down -v

例2:マスタデータを入れるには

* 以下のサイトが参考になる

https://amateur-engineer.com/docker-compose-postgresql/

フォルダ構成

+ compose.yaml
+ init
  + init.sql 

compose.yaml

version: '3'

services:
  postgres:
    image: postgres:latest
    container_name: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      PGPASSWORD: password
      POSTGRES_DB: sample
      TZ: "Asia/Tokyo"
    ports:
      - 5431:5432
    volumes:
      - ./init:/docker-entrypoint-initdb.d
    networks:
       - app-network
volumes:
  postgres-data:
    name: postgres-data
networks:
  app-network:
    name: app-network
    driver: bridge

init.sql

--ユーザーの作成
CREATE USER docker;
--DBの作成
CREATE DATABASE docker;
--ユーザーにDBの権限をまとめて付与
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
--ユーザーを切り替え
\c docker
--テーブルを作成
create table demo_person(id int, name varchar);
--テーブルにデータを挿入
insert into demo_person(id, name) values
(1, 'Mike'),
(2, 'Tom');

コマンド例

# [0] 前回があれば、一旦削除する
$ sudo docker compose down -v
[+] Running 2/2
 ✔ Container postgres   Removed                                               0.6s 
 ✔ Network app-network  Removed                                               0.8s 

# [1] 立ち上げる
$ sudo docker compose up -d
[+] Running 2/2
 ✔ Network app-network  Created                                               0.2s 
 ✔ Container postgres   Started                                               0.5s 

# [2] コンテナ内に入る
$ sudo docker exec -it postgres bash
root@fa2bc691d078:/# psql -u postgres
/usr/lib/postgresql/15/bin/psql: invalid option -- 'u'
psql: hint: Try "psql --help" for more information.

# [3] PostgreSQL内にログイン
root@fa2bc691d078:/# psql -U postgres
psql (15.3 (Debian 15.3-1.pgdg120+1))
Type "help" for help.

# [4] DB確認
postgres=# \l
                                                List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    | ICU Locale | Locale Pr
ovider |   Access privileges   
-----------+----------+----------+------------+------------+------------+----------
-------+-----------------------
 docker    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc     
       | =Tc/postgres         +
           |          |          |            |            |            |          
       | postgres=CTc/postgres+
           |          |          |            |            |            |          
       | docker=CTc/postgres
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc     
       | 
 sample    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc     
       | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc     
       | =c/postgres          +
           |          |          |            |            |            |          
       | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc     
       | =c/postgres          +
           |          |          |            |            |            |          
       | postgres=CTc/postgres
(5 rows)

# [5] database "docker" に入る
postgres=# \c docker
You are now connected to database "docker" as user "postgres".

# [6] 中身を確認(作成したテーブルを確認)
docker=# \d
            List of relations
 Schema |    Name     | Type  |  Owner   
--------+-------------+-------+----------
 public | demo_person | table | postgres
(1 row)

# [7] データ確認
docker=# select * from demo_person;
 id | name 
----+------
  1 | Mike
  2 | Tom
(2 rows)

参考文献

https://mebee.info/2020/12/04/post-24686/
https://qiita.com/Akhr/items/8d5b5127ee971a640253

関連記事

Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/02/25/000000
WSL ~ Docker-CE + Genie / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/03/003836
Docker compose ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/05/21/222910
Docker compose ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
Docker compose ~ Version 2 ~
https://dk521123.hatenablog.com/entry/2023/01/02/000000
Docker compose ~ Pgweb/pgAdmin ~
https://dk521123.hatenablog.com/entry/2023/08/10/111919
Dockerfile / Docker Compose でシェルを実行する
https://dk521123.hatenablog.com/entry/2023/07/21/234509
Flink + PostgreSQL を docker compose で構築する
https://dk521123.hatenablog.com/entry/2023/07/28/220039