kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

wsl2でdockerを動かす

windowsでdockerが動作することを確認できたので書いてみます。

環境

windows home

設定

docs.microsoft.com

the Windows Insider Programの有効化

設定 -> 更新とセキュリティ -> Windows Insider Program を許諾して有効化

2004のバージョンになれば使用できるらしので、2020年の春まで待てば必要なくなると思う。

wslの有効化

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

wslのディストリビューションインストール

wslをインストールするため、Microsoft Storeから「wsl」で検索し、必要なディストリビューションをインストールする。

個人的に「Ubuntu-18.04」をインストール

スタートプログラムより起動して「username」と「password」の入力を設定します。

これでubutuのCUIで使用できます。

wslのバージョンをwsl2に設定する

wsl --set-version <Distro> 2
wsl -l
wsl -l -v
wsl --set-version Ubuntu-18.04 2

wslのコマンドが使えない場合、wsl2が使用できる環境でないため、「Windows Insider Program」やWindowsUpdateを確認して、インストールする必要がある。

wsl2が使用できない場合、「-v」コマンドや「--set-version 」がない。

dockerのインストール

Downloadのリンクよりダウンロードページへ遷移し、「GetDownload」からダウンロードします。 (このあたりがいくつかダウンロードファイルがあったため、正しいか不明。v2.2.2.0以降が必要です。)

docs.docker.com

f:id:kazu22002:20200322200149p:plain

「wsl2 enable」が有効になっているので、たぶん有効になっているはず。

動かす

macで使用していたdocker-compose.yml

version: '3'
services:
  db:
    image: postgres:9.6.15
    environment:
      - POSTGRES_USER=app
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app
      - LC_ALL=C
    ports:
      - '5432:5432'
    volumes:
      - ./docker/postgres/db:/var/lib/postgresql/data
docker-compose up 

起動してみると、ダウンロードしてインストールが始まり、動作しそうなところまでいけました。

permission deniedエラー

ログを確認すると、「permission denied」のエラーが発生しておりファイル書き込みができませんでした。

このあたりが詳しくないので、dockerのユーザーの指定??が悪いと思われます。wsl上のユーザーだと思いますが、詳しく調べていません。動作するところまでやろうと思ったので、別の方法で対応しまうs。

volumeを作成して利用することで動作させてみます。

docker create volume app_db
version: '3'
services:
  db:
    image: postgres:9.6.15
    environment:
      - POSTGRES_USER=app
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=app
      - LC_ALL=C
    ports:
      - '5432:5432'
    volumes:
      - app_db:/var/lib/postgresql/data

volumes:
  app_db:
    external: true

「permission denied」がでなくなりましたが、アクセスできないエラーが発生していたため、いろいろ調査。

いろいろと試してみたところdockerの設定の「Expose daemon on tcp://localhost:2375 without TLS」を有効にして再起動させて再度dockerを起動させることでエラーがなくなりました。

アプリからデータベースへ接続してみて動作することを確認できました。

起動するところまでは行けたみたいです。

linuxと同じファイルで作りたかったですが、少し変更が必要かもしれないです。

使用してみた感想

1日ほどdocker desktop for windowsを使用してみましたが、速度面で使えるレベルでないためどこがネックになっているか調べる必要が出てきました。

web開発で使用するため、nginxの部分かdbのアクセスの部分か調べる必要がありますが、ファイル周りが影響していそう。

もうすこしwindowsの開発環境は検討が必要かもしれない。