はじめに
OSやライブラリに影響されず、バージョン切り替えが容易な練習用DB環境を作成したく、VSCにおけるWSL2でのPostgreSQL環境構築に挑んだが、GPTや参考サイトなどを頼りにしても苦戦したため、どう対応したかログを残す。
想定環境
・OS:Windows 11
・Linux:Ubuntu 24.04
・Docker環境:参考資料[6]をもとに構築済み
実行手順
①パッケージのインストール
WSL2上で、パッケージをインストールする。
sudo apt update
sudo apt install -y wget ca-certificates curl gnupg lsb-release
②Docker Engine のインストールと準備
WSL2上でDockerエンジンのインストール
# GPG鍵を登録(上書き確認で y)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# リポジトリ追加(Ubuntu 24.04 "noble")
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
noble stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# パッケージ更新&インストール
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
③systemd を有効化
WSL2上で、有効化していく。
sudo vi /etc/wsl.conf
すでに以下の設定ができている場合は、編集不要。
[boot]
systemd=true
Windows PowerShellで WSL を再起動する。
wsl --shutdown
④Docker サービスを起動
WSL2上で、Dockerを起動する。
sudo systemctl start docker
⑤PostgreSQL用 docker-compose.yml を作成
WSL2上で、ymlを作成する。
mkdir ~/pg-docker
cd ~/pg-docker
vi docker-compose.yml
ymlは、以下を設定する。
version: "3.8"
services:
db:
image: postgres:17(←希望するPostgresqlのバージョが17のとき)
container_name: my-postgres
restart: unless-stopped
environment:
POSTGRES_USER: postgres(←必要に応じて変更する)
POSTGRES_PASSWORD: 自分で設定するパスワード
POSTGRES_DB: 自分で設定したDB名
ports:
- "未使用のホストポート:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
⑥起動確認
WSL2上で起動して、確認する。
cd ~/pg-docker
docker compose up -d
状態を確認する。
docker ps
⑦Dockerを停止
WSL2上で停止させる。
docker compose down
Conda仮想環境での稼働確認
①仮想環境構築
conda create -n dbtest python=3.12.8
②仮想環境の立ち上げ
conda activate dbtest
③確認用Pythonファイルを作成
import psycopg2
conn = psycopg2.connect(
host="localhost",
port=設定したホストポート番号,
dbname="設定したDB名",
user="設定したユーザ",
password="設定したパスワード"
)
cur = conn.cursor()
cur.execute("SELECT version();")
print(cur.fetchone())
cur.close()
conn.close()
④確認用プログラムの実行
python 作成したプログラムの格納場所/test.py
次回起動時の流れ
# WSLを起動したら以下の手順
sudo systemctl start docker
cd ~/pg-docker
docker compose up -d
# 停止する際
docker compose down
DBを追加対応
上記で作成した以外のDBを追加したい場合、docker-compose.ymlに内容を追加して起動させる。
version: "3.8"
services:
db:
image: postgres:17(←希望するPostgresqlのバージョが17のとき)
container_name: my-postgres
restart: unless-stopped
environment:
POSTGRES_USER: postgres(←必要に応じて変更する)
POSTGRES_PASSWORD: 自分で設定するパスワード
POSTGRES_DB: 自分で設定したDB名
ports:
- "未使用のホストポート:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
db2:
image: postgres:17
container_name: my-postgres2(←別の名前に変更)
restart: unless-stopped
environment:
POSTGRES_USER: postgres(←必要に応じて変更する)
POSTGRES_PASSWORD: 自分で設定するパスワード
POSTGRES_DB: 自分で設定したDB名
ports:
- "未使用のホストポート:5432"
volumes:
- postgres_data_2:/var/lib/postgresql/data
volumes:
postgres_data:
postgres_data_2:(←volumes追加)
参考資料
[1]The PostgreSQL Global Development Group, 『PostgreSQL: The world's most advanced open source database』, https://www.postgresql.org/
[2]藤那花多, 『PostgreSQLの練習環境をDockerで作り、WSL2からアクセスする』, https://zenn.dev/fjnkt98/articles/b79eaf86b83b41
[3]katsujitakeda(Katsuji Takeda), 『WSL2-Ubuntu22.04でPostgresql環境構築』,https://qiita.com/katsujitakeda/items/0c29b1dbd8445a3d70ab
[4]Microsoft, 『WSL を使用してデータベースを追加または接続する』,https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-database
[5]Microsoft, 『systemd を使用して WSL で Linux サービスを管理する』,https://learn.microsoft.com/ja-jp/windows/wsl/systemd
[6]haveAbook(Wakana Arimoto), 『WSL2でDocker環境構築(Docker Desktop有料化対策)』,https://qiita.com/haveAbook/items/0d0ae20a19214f65e7cd