LoginSignup
1
2

More than 1 year has passed since last update.

WSL2上にDocker立ててPostgreSQLを動かしホストから接続する

Posted at

n番煎じでも手順を纏めておかんと忘れるねんで

なんでそうするの

Docker Desktopが業務で使用する場合に有償になったので(所属組織規模による)WSL2上だけで動かしたい。でもGUIなしでのDocker操作よくわかってないし……。

動作環境

  • OS: Windows 10 Pro 21H2
  • WSL2: Ubuntu 20.04
  • アンインストールしたけどDocker Desktopを入れていたので何か影響あるかも?

WSL2上にDockerを入れる

Ubuntu向けDocker構築手順の公式ドキュメント通り

リポジトリを設定する

必要なものをインストールする

 sudo apt-get update

 sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

Dockerの公式GPGキーの追加

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

dockerの安定板パッケージリポジトリをaptに追加

 echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker のインストール

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

docker-composeのインストール

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker daemon の起動

sudo service docker start

これはWSL2を起動するたびに必要なのでおいおい自動化したいな。ちょっと.bashrcに追記してやってみようと思ったけど動かなかった。知識が足りない。

Dockerの準備

ホスト機のD:\dockerpostgresql14というフォルダを作り、そこに以下の内容でdocker-compose.ymlを作成する。
今回は postgreSQL 14.xを使いたい。

version: '3.8'
services:
  db:
    image: postgres:14
    restart: always
    volumes:
      - postgresql:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: postgres
    tty:
      true
volumes:
  postgresql:
    driver: local

restart: alwaysで死んだら勝手に再起動するようにした。記述ミスったときに無限再起動に陥ってしまったが……。
あとは tty:trueで勝手に正常終了してしまわないようにしたが、postgresqlでは不要かもしれない(未確認)

Docker コンテナの起動

WSL2上でdocker-compose.ymlを配置したフォルダへ移動してから起動させる

cd /mnt/d/docker/postgresql14
docker-compose up -d

-dオプションでDockerコンテナがバックグラウンドで起動するようにする。

ホストから繋ぐ

ここでWindows上のクライアントから繋ぎたいのだが、普通にlocalhost:5432宛にpostgres/postgresでつながってしまった。
なんか設定しないといけないと思っていたので拍子抜けである。

おまけ

Docker Desktopを使っていた際、Visual Studio CodeにDocker拡張機能を入れてコンテナの起動や終了をらくらく行っていたがWSL2上に構築すると接続できなくて使えない……と思いきや、Remote - WSL という拡張機能をインストールすると使えるようになった。
やったぜ。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2