Diary

Diary

日々学んだことをアウトプットする場として初めてみました

docker composeを使って「Postgres+CLI」の環境を構築する

postgresの環境構築

  • 今回はpostgresのCLI環境として、sosedoff/pgwebを用いた
  • Goとの連携は次回行うつもり

フォルダ構成

.- docker-compose.yml
|- .env

.env

  • docker-compose.ymlに記述する変数をまとめたフォルダ
  • .envに記述しておくとシェルの環境変数に一時的の保存される
    • docker-compose.ymlからはシェル変数を読み込むときみたいにする
POSTGRES_PASSWORD=postgres
POSTGRES_DB=test_db
PGUSER=postgres
PGPASSWORD=kokoichi
PG_PORT=5432
PGWEB_PORT=8081

docker-composer.yml

  • 今回はDBのデータを保存する場所として、トップ層のボリュームにマウントしてある
version: '3'

services:
  postgres:
    container_name: postgres
    image: postgres:alpine
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
      # for psql
      PGUSER: ${PGUSER}
      PGPASSWORD: ${PGPASSWORD}
      PGDATABASE: ${POSTGRES_DB}
    ports:
      - ${PG_PORT}:${PG_PORT}
    volumes:
      - db_data:/var/lib/postgresql/data
  
  pgweb:
    container_name: pgweb
    restart: always
    image: sosedoff/pgweb
    environment:
      - DATABASE_URL=postgres://${PGUSER}:${POSTGRES_PASSWORD}@postgres:${PG_PORT}/${POSTGRES_DB}?sslmode=disable
    depends_on:
      - postgres
    ports:
      - "8081:8081"
    expose:
      - ${PGWEB_PORT}

volumes:
  db_data:

起動

  • 起動方法
    • docker-compose up

正しく起動すると

pgweb       | To view database open http://0.0.0.0:8081/ in browser

のような記述が出るので、ブラウザでそこにアクセスする

そのときの見た目はこんな感じ

f:id:kokoichi206:20210605172049p:plain

操作してみる@web

  • 下ではあまりGUI的な操作はしてないが、右クリックで削除などいろいろできそうだった

テーブル作成

Queryに下のDDL文を打ち込み、RUN QUERY

CREATE TABLE users(
  user_id SERIAL,
  name VARCHAR(50),
  pw VARCHAR(50),
  email VARCHAR(100) UNIQUE
);

f:id:kokoichi206:20210605174008p:plain

データ挿入

同じように、Queryの中にしたのDMLを打ち込む

INSERT INTO users (name, pw, email) VALUES ('kokoichi', 'hogehoge', 'test@example.com');
INSERT INTO users (name, pw, email) VALUES ('kokoichi1', 'hogehoge', 'test1@example.com');
INSERT INTO users (name, pw, email) VALUES ('kokoichi2', 'hogehoge', 'test2@example.com');
INSERT INTO users (name, pw, email) VALUES ('kokoichi3', 'hogehoge', 'test3@example.com');
INSERT INTO users (name, pw, email) VALUES ('kokoichi4', 'hogehoge', 'test4@example.com');

f:id:kokoichi206:20210605174754p:plain

上のバーでROWSを選ぶと、きちんと作られていることが確認できる

f:id:kokoichi206:20210605174831p:plain

操作してみる@container

postgres の container の中にはいる

新しいターミナルを開き、次のコマンドを実行

docker-compose exec postgres psql

postgres というサービス名のコンテナで、psql を実行、という意味

シェルを実行したければ

docker-compose exec postgres sh

とする

基本操作

\l                 # データベース一覧確認
\c test_db  # 使用するデータベースをtest_dbに変更
\d                # テーブル一覧確認

あとはCLIの時と同じようなSQL文を打ち込む

  • CLIで作ったユーザーを確認してみる
SELECT * FROM users;
>  user_id |   name    |    pw    |       email       
---------+-----------+----------+-------------------
       1 | kokoichi  | hogehoge | test@example.com
       2 | kokoichi1 | hogehoge | test1@example.com
       3 | kokoichi2 | hogehoge | test2@example.com
       4 | kokoichi3 | hogehoge | test3@example.com
       5 | kokoichi4 | hogehoge | test4@example.com
(5 rows)

となり、正しくコンテナ中にも挿入されていたことが確認できた