🌀

Debian(WSL2)+Docker+PhpStormの環境構築

2021/08/19に公開

WSL 2上にDebianをインストールした際の淡々とした記録です。

(追記:2022/03/06)
だったけど、記事の大型アップデートを実施。
DockerをWSLへ設定し、PhpStormからtcp接続するための記事です。

アプリインストール

sudo apt update && sudo apt dist-upgrade
sudo apt install wget curl make git vim
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.profile
curl https://get.volta.sh | bash
source ~/.profile
brew install tfenv
tfenv install latest
tfenv use latest
volta install node@lts
volta install pnpm
sudo echo "VOLTA_FEATURE_PNPM=1" >> .profile
source ~/.profile

Docker Desktop for Windowsとの連携

  1. Settings | Resources | WSL INTEGRATION
  2. Enable integration with additional distros: で使いたいディストロをON

一番やりたかったDocker Desktop for Windowsを使ったWSL上での呼び出し。

ディストロが1つしか入っていない場合、デフォルトのディストロには自動でWSLインテグレーションシステムが発動する。

しかし、2つ以上の場合は、指定してONにしないとDocker Desktopとの連携が取れない。

この設定をすればWSL2上で docker コマンドが使えるようになる。

Docker on WSL2

Docker Desktopが有料化したことを受け、DockerをWSL2のDebianへインストールする。

https://docs.docker.com/engine/install/debian/

まずは公式通りに。Docker Composeはこちらから。そして、そのままでは docker run できない。WSL2側で動作しないので、追加で下記作業する。

$ sudo touch /etc/fstab
$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
$ sudo service docker start

Docker Composeを別途インストールする

Compose V2になると、Compose自体がプラグインとして分離しているので別途インストール。

https://docs.docker.com/compose/cli-command/#install-on-linux

$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
$ mkdir -p $DOCKER_CONFIG/cli-plugins
$ curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

Docker on WSL2とPhpStormを接続する

SSH接続

まずは手軽にSSHで接続方式。

$ sudo apt install openss-server
$ sudo vim /etc/ssh/sshd_config
# 適当にポートやセキュリティ設定を変える
$ sudo service ssh start

とりわけ接続が遅いなどは感じられないので大丈夫そう。

あとはPhpStormの File | Settings | Build, Execution, Deployment | Docker からDockerへの接続にSSHを選択。

TCP接続

汎用的な接続方法としてはこちらっぽい。
サーバー内の設定をいろいろと変更する必要はある。

$ mkdir /etc/systemd/system/docker.service.d
$ sudo vim /etc/systemd/system/docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
$ sudo vim /etc/docker/daemon.json
{"hosts": ["tcp://127.0.0.1:2375", "unix:///var/run/docker.sock"]}
$ sudo service docker restart

※2375はポート番号なので、もちろん好きなように変更可能

https://www.jetbrains.com/help/phpstorm/docker.html

最後に、PhpStormの File | Settings | Build, Execution, Deployment | Docker から TCP Socker を選択。
Engine API URLhttp://localhost:2375 を設定。

PhpStormのrun/debugでのdocker-composeのtcp接続

Run/DebugからDocker Composeを実行する場合、tcp接続できるようにしておく必要がある。
方法は二通り。

  • .envを使用
  • run/debugに環境変数を追加
  • OSの環境変数に設定
.envを使用
  1. .envはdocker-compose.ymlと同じフォルダー階層に設置。

  2. .envに下記二行を追加

    DOCKER_HOST=tcp://localhost:2375
    COMPOSE_CONVERT_WINDOWS_PATHS=1
    

    DOCKER_HOSTは必須だが、その他の環境変数は必要に応じて。

ただ、Docker on WSL + tcp接続 + PhpStormの組み合わせだとうまく動かないので、その場合2.の方が確実。

Run/Debugに環境変数を追加

https://www.jetbrains.com/help/phpstorm/docker.html

  1. Run/Debug Configurations ウィンドウを開く
  2. Dockerの設定を選択
  3. Modify options から Environment variables を選択
  4. Environment variablesの枠に下記を入力
    DOCKER_HOST=tcp://localhost:2375;COMPOSE_CONVERT_WINDOWS_PATHS=1
    
    DOCKER_HOSTは必須だが、その他の環境変数は必要に応じて。
  5. OK

以上

今後また何かあれば随時更新予定。

Discussion