在WSL2上使用Docker搭建Postgres玩耍环境
目标
-
- 自分用備忘録
- とりあえず docker で postgresql 動かしたい人
环境
-
- OS: windows11 の WSL2 ubuntu
- editor: VSCode
本編 – 本文
wsl,docker 编辑
我参考了以下的文章来在wsl2上搭建Docker环境。
-
- Windows11 で Docker Desktop を使わずに Docker
- 【プロキシ対応】Docker Desktop for Windows を使わず、WSL2 / Ubuntu に apt で Docker を入れる
Docker Desktop在个人使用时是免费的,但在工作场合需要付费,因此可以考虑使用这种通用的方式进行创建。
安装VSCode的远程开发插件后,可以方便地通过VSCode终端来访问WSL2的Ubuntu。
PostgreSQL 编程
创建一个用于PostgreSQL的目录。
目录结构如下:
└── postgresdata
├── compose.yml
└── init
│ └── init.sql
└── data
│ └── ...
└── work
└── persondata.sql
我正在使用compose.yml中创建的目录进行绑定。
该目录的角色是
-
- init: 最初に実行される init.sql 置き場
-
- data: postgresql のデータ場所
- work: 作業ファイル置き場
是的。
compose.yml的内容如下。
version: "3.8"
services:
db:
image: postgres:14
container_name: postgres
environment:
- POSTGRES_DB=test
- POSTGRES_USER=user
- POSTGRES_PASSWORD=xxxx
ports:
- "5432:5432"
volumes:
- ./init:/docker-entrypoint-initdb.d
- ./data:/var/lib/postgresql/data
- ./work:/work
working_dir: /work
在环境变量的POSTGRES_DB中可以指定数据库。
我指定了工作目录,并简化了在执行 psql 时的文件路径指定。
以下是预先准备的 sql 文件。
- init.sql
CREATE TABLE person (name varchar(50), birthday date);
- persondata.sql
INSERT INTO
person (name, birthday)
VALUES
('渋沢栄一', '1840-03-16'),
('徳川慶喜', '1837-10-28'),
('西郷隆盛', '1828-01-23'),
('坂本龍馬', '1836-01-03');
在准备好上述文件后,您可以使用docker compose up -d命令启动容器,并使用docker compose exec db psql -U user test命令启动psql。
进入 docker compose exec db /bin/bash 后,使用 psql -U user test 也可以。
轻松验证命令
- テーブル一覧、構造の確認
test=# \dt
List of relations
Schema | Name | Type | Owner
--------+--------+-------+-------
public | person | table | user
(1 row)
test=# \d person;
Table "public.person"
Column | Type | Collation | Nullable | Default
----------+-----------------------+-----------+----------+---------
name | character varying(50) | | |
birthday | date | | |
- データ投入、確認
test=# \i personaldata.sql
INSERT 0 4
test=# select * from person;
name | birthday
----------+------------
渋沢栄一 | 1840-03-16
徳川慶喜 | 1837-10-28
西郷隆盛 | 1828-01-23
坂本龍馬 | 1836-01-03
(4 rows)
最后
只要想要使用SQL的话,也可以使用类似SQL Fiddle这样的服务。
〇是一个很好的PostgreSQL复习环境。