WindowsでWSL2+Docker+PHP開発環境の構築
はじめに
参画当初、所属チームにMacユーザーしか居ない中でWindowsでの環境構築を行いました。
その際WSL2を使ってDocker環境を構築しましたが、WSL2を利用するのが初めてだったので、備忘録として残したい気持ちもあり、本記事を作成しました。
また、最新のWindows10とWindows11ではコマンド1つで簡単にWSL2をインストール出来ますが、裏側で何をしているかを勉強したかった事もあり、本記事ではWSL2の手動インストール方法を記載しています。
前提条件
- 開発機はWindows11 PCとする
- WSL2ベースのDocker Desktopを利用する
- Dockerの操作はターミナルから行う
WSL2+Dockerのインストール
Windows Subsystem for Linux 2(WSL2)インストール
WSLを有効化する
- ツールバーの検索から「Windowsの機能の有効化または無効化」を検索して選択する
- 「Linux用Windowsサブシステム」「Windowsハイパーバイザープラットフォーム」「仮想マシンプラットフォーム」を有効にする
- インストール完了後「今すぐ再起動」をクリック
Linuxカーネル更新プログラムパッケージをダウンロードする
- 下のリンクから最新のパッケージをダウンロードします。
- x64 マシン用 WSL2 Linux カーネル更新プログラムパッケージ
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
- ダウンロードした更新プログラムを実行します。
管理者特権のアクセス許可を求めるメッセージが表示されたら、「はい」を選択してインストールを実行します。
Linuxディストリビューションをインストール
- Microsoft Storeで「Ubuntu」を検索する
- 最新バージョンの「Ubuntu-22.04.1 LTS」をインストール
バージョンの記載がない「Ubuntu」は、LTSがリリースされる度に自動でアップデートされていくようなので、環境に影響がでる可能性があるため、現時点で最新のバージョンを選んでいます。
- Ubuntuを起動し、セットアップを完了する
ユーザー名/パスワードに任意の値を設定する
なお、ここで入力するユーザ名はWindowsのユーザ名とは関係ありません
既定の Linux ディストリビューションを設定する
Windows PowerSellで以下を実行
wsl -l -v
*
がUbuntu-22.04にない場合は以下を実行する
wsl -s Ubuntu-22.04
nameserverの設定をする
Windows PowerShellで以下を実行し、DNSサーバーのIPアドレスをコピーする
ipconfig /all
WSL2のresolv.confをコピーしたアドレスに書き換える
vi /etc/resolv.conf
---------------------------
nameserver XXX.XXX.X.X
---------------------------
これでWSL2の設定は完了です。
Docker Desktop インストール
インストール:https://docs.docker.com/desktop/install/windows-install/
WSL2の設定を確認する
インストール完了後、Docker Desctopを起動したらSettingsで以下の設定を確認する
- 「Use the WSL 2 based engine」がチェックされていることを確認する
- Dockerを使用するWSL2ディストリビューションを有効にする
これでWSL2+Dockerの環境は整いました。
次からDocker上にPHP環境を構築していきます。
DockerによるPHP環境構築
WSL2上に下記の構成でプロジェクトを作成し、それぞれのファイルを作成します。
また、今回DBにはPostgreSQLを使用しています。
フォルダ構成
├ docker-compose.yml
├ docker-php
│ └ app.Dockerfile
├ index.php
└ php.ini
Dockerfileの作成
FROM php:8.1.7-apache-bullseye
RUN apt-get update && \
# pdo_pgsql を使うための依存
apt-get install -y libpq-dev && \
docker-php-ext-install pdo_pgsql
WORKDIR /var/www/html
docker-compose.ymlの作成
docker-compose.ymlにDB・PHPをそれぞれ動かすコンテナを作成する設定を記載します。
version: "3.8"
services:
db:
container_name: postgres
image: postgres:13.6-bullseye
environment:
POSTGRES_PASSWORD: password
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
TZ: Asia/Tokyo
ports:
- "5432:5432"
volumes:
- db-data:/var/lib/postgresql/data
app:
container_name: app
build:
dockerfile: docker-php/app.Dockerfile
ports:
- "8080:80"
volumes:
- .:/var/www/html
working_dir: /app
depends_on:
- db
volumes:
db-data:
index.phpの作成
動作確認のため phpinfo() を出力するように設定しておきます。
<?php
phpinfo();
コンテナの起動
以下のdockerコマンドを順番に実行します。
docker compose build
docker compose up -d
動作確認
http://localhost:8080/ にアクセス
phpinfoが出力されていればOK👌
コンテナからDBにアクセス
docker exec -it postgres bash
psql -h localhost -U postgres
DBに接続されればOK👌
これで環境構築は完了です!
おわりに
WSL2を利用するのは初めてでしたが、簡単にLinuxディストリビューションを起動することが出来ました。
また、以前Hyper-VベースのDockerを利用していた事がありますが、その時よりも動作が軽快に感じられます。
Dockerに関しては、環境構築が簡単にできる事やチーム開発で環境を共有しやすくするところにとてもメリットがあると思います。
WSL2+DockerでのPHP環境構築を勉強できてよかったと思いました。
私たち BABY JOB は、子育てを取り巻く社会のあり方を変え、「すべての人が子育てを楽しいと思える社会」の実現を目指すスタートアップ企業です。圧倒的なぬくもりと当事者意識をもって、こどもと向き合う時間、そして心のゆとりが生まれるサービスを創出します。baby-job.co.jp/
Discussion