概要
最近の開発ではローカル環境にDockerで複数サーバーを立てることもよくあると思います。
しかしWindows環境ではWindowsファイルシステム上に配置したファイルの変更をコンテナ側にいい感じに反映させることができません。
いい感じに反映させるにはLinuxファイルシステム上にファイルを配置する必要があります。
参考
以前投稿した こちらの記事 ではWSL側にIntelliJをインストールしXWindowSystemを使って利用する方法を試しました。
今回は最近?使えるようになったIntelliJのリモート開発機能を使って同じ目的を達成しようと思います。
前提
ホストOS:Windows 11 Pro(21H2)
Docker Desktop:4.7.1
2022年5月時点での情報です。
サンプルなどはセキュリティ面の考慮が漏れている可能性があるので使用する場合には自己責任でお願いします。
方法
IntelliJのリモート開発機能で一番簡単そうなSSHで接続する機能を使います。
(むしろ他の機能は何なのかよくわかってない)
sshdを起動させるためのDockerイメージを作ってローカルで立ち上げます。
wsl上でsshdを動かす方法もあると思いますがsystemdを起動できるようにしたりいろいろと面倒くさそうなので諦めました。
Dockerイメージのサンプル
まずサンプルのリポジトリはこちらです。
ビルドしたイメージは公開してあるのでよろしければどうぞ。
docker pull skta3569/ubuntu22.04-sshd:latest
イメージの機能を箇条書きするとこのような感じです。
- 起動時にsshdを立ち上げる
- ユーザー名:remote
- ホームディレクトリ:/remote
- 鍵認証でログインする想定
- コンテナ上の「/host_keys」ディレクトリに配置されたファイルを「/remote/.ssh」にコピーする
- キーが入っているディレクトリを「/host_keys」にマウントして使う想定
- ホスト→コンテナのssh接続用(authorized_keys)
- コンテナ→gitの認証用(id_* をコピーする)
- 日本語化済み&gitインストール済み
手順
①鍵を作る
ssh-keygen -t ed25519 -c ''
②コンテナを起動する
2つのディレクトリにマウントします。
「/remote」はホームディレクトリでIDEの各種ファイルが保存されるため、任意の名前のボリュームをマウントします。
「/host_keys」は認証用の鍵ファイルをコンテナに連携するためのディレクトリです。
docker run --rm -d -v home:/remote -v *①で作成した鍵を置いたフォルダ*:/host_keys -p 22:22/tcp ubuntu22.04-sshd:latest
③リモート開発機能でアクセスする
「IDE version」は使用するIDEの種類を選びます(IntelliJ以外も選べる)
「Project directory」を選ぶ前に「open an SSH terminal」を押します。
現状のリモート開発機能だとIDEからプロジェクトの新規作成が行えないためターミナルを使ってプロジェクトディレクトリを準備する必要があります。
必要に応じてgitからチェックアウトするなり、ディレクトリの作成なりを行ってください。
プロジェクトディレクトリの選択が終わったら「Download and Start IDE」をクリック
あとは必要なファイルのダウンロードが終わったらIDEの画面が開きます。
Java系のプロジェクトであれば「Project Structure」からSDKの設定が必要です。
おわり
以上でIntelliJのリモート開発機能を動かすところまでは完了です。
少し触ってみた感じUI面の機能が少し動かなかったりしますが、なかなかいい感じだと思います。
あとは「②コンテナを起動する」で指定したボリュームを他のコンテナと共有すれば、別コンテナで立ち上げたサーバーでもホットリロードがいい感じに動きます。