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
のような記述が出るので、ブラウザでそこにアクセスする
そのときの見た目はこんな感じ
操作してみる@web
- 下ではあまりGUI的な操作はしてないが、右クリックで削除などいろいろできそうだった
テーブル作成
Queryに下のDDL文を打ち込み、RUN QUERY
CREATE TABLE users( user_id SERIAL, name VARCHAR(50), pw VARCHAR(50), email VARCHAR(100) UNIQUE );
データ挿入
同じように、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');
上のバーでROWSを選ぶと、きちんと作られていることが確認できる
操作してみる@container
postgres の container の中にはいる
新しいターミナルを開き、次のコマンドを実行
docker-compose exec postgres psql
postgres というサービス名のコンテナで、psql を実行、という意味
シェルを実行したければ
docker-compose exec postgres sh
とする
基本操作
\l # データベース一覧確認 \c test_db # 使用するデータベースをtest_dbに変更 \d # テーブル一覧確認
- 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)
となり、正しくコンテナ中にも挿入されていたことが確認できた