SQL 基礎 Part 01 -- PostgreSQL サーバーを docker-compose で起動する
Tags: sql, postgres, docker
Published: 2022-12-13 15:37:37


## Docker Compose での psql サーバーの起動

https://hub.docker.com/_/postgres

この Docker Hub 公式の最小限？の DB サンプルより

https://zenn.dev/re24_1986/articles/b76c3fd8f76aec

* 使用する postgres イメージの version 指定
* コンテナ名指定
* ボリュームの永続化
* 接続先ポートの指定

これらのオプションをつけた、まんましろ さんの記事を参考にする

```yaml
version: '3'

services:
  db:
    image: postgres:14
    container_name: postgres
    ports:
      - 5444:5555
    volumes:
      - db-store:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=pass
volumes:
  db-store:
```

これで docker-compose.yml を書き

```php
docker-compose up

Creating volume "psql_db-store" with default driver                                                                                       
WARNING: Found orphan containers (psql_pgadmin_1, psql_postgres_1) for this project. If you removed or renamed this service in your compos
e file, you can run this command with the --remove-orphans flag to clean it up.           
                                                
Pulling db (postgres:14)...                                                                                                               
14: Pulling from library/postgres                                                                                                         
025c56f98b67: Pull complete                                                                                                               
26dc25c16f4e: Pull complete                                                                                                               
a032d8a894de: Pull complete                                                                                                               
40dba7d35750: Pull complete                                                                                                               
8ebb44a56070: Pull complete                                                                                                               
813fd6cf203b: Pull complete                                                                                                               
7024f61bf8f5: Pull complete                                                                                                               
23f986b322e8: Pull complete                                                                                                               
9f76961a3266: Pull complete                                                                                                               
25ab50475209: Pull complete                                                                                                               
6e14c5d69b41: Pull complete                                                                                                               
61c4089902cf: Pull complete                                                                                                               
a285fd6fb063: Pull complete                                                                                                               
Digest: sha256:18050649e69395b9b76e38af69055b0e522c307c2fc5951c5289324832876aae   
                                                        
Status: Downloaded newer image for postgres:14                                                                                            
Creating postgres ... done  

Starting PostgreSQL 14.6 
(Debian 14.6-1.pgdg110+1) 
on x86_64-pc-linux-gnu
```

docker-compose up を打つとコンテナが立ち上がる。

---

## psql のコンテナに入って実行

docker ps でコンテナ一覧を表示して

```php
docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED         STATUS         PORTS                                                 NAMES
269d9f02c4df   postgres:14                      "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes   5432/tcp, 0.0.0.0:5444->5555/tcp, :::5444->5555/tcp   postgres
```

今立ち上げたコンテナに入る。

5432/tcp, 0.0.0.0:5444->5555/tcp, になっているところをみると
立ち上がるときの Docker 内部での 5432 は固定だから、5444 を内部にして 5555 を外部にして 5555 から接続させるのはうまく行かなそう？要検証

```php
docker exec -it postgres bash

root@a9df27dd42c9:/# 
```

docker exec -it で入ることができる。

```kotlin
root@269d9f02c4df:/# psql -h localhost -U postgres
psql (14.6 (Debian 14.6-1.pgdg110+1))
Type "help" for help.

postgres=#
```

そしてコンテナの内部から Postgres DB サーバーに接続する。
ホストやユーザーは設定していないが、デフォルトの localhost や postgres で接続できる。

```php
postgres-# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(3 rows)

postgres-# 
```

PostgreSQL のコマンドが機能することが確認できた。

これで psql での SQL の練習くらいはすぐにできるようになった。

---