まだまだ寒い冬が続きます。
高性能なデスクトップPCが自室にあるけど寒すぎる!暖かいリビングで開発したい!でもノートPCはオンボロ!
…ということでデスクトップPCに開発環境を用意して、ノートPCからアクセスして開発する方法を書き記します。
取り扱うこと
- Dockerを用いたJava開発用サーバの構築
- SSHサーバの構築とクライアント端末からの接続
開発環境
サーバPCのOSは Windows11で、DockerDesktopを使っています。
クライアントPCのOSはmacOS13で、VSCodeを使用します。
サーバPCとクライアントPCは同一ネットワークにあることを前提とします。
事前準備
Docker Imageの用意
開発する言語のパッケージを含むDockerイメージを選定します。
私の場合、Springbootを使いたかったのでDockerHubから gradle:8.12.0-jdk23
を選択しました。
-
gradle:8.12.0-jdk23
のDockerfile を見てみとeclipse-temurin:23-jdk-noble
をベースとしており、さらにeclipse-temurin:23-jdk-noble
のDockerfileを見てみるとubuntu
をベースとしていることがわかります - Amazon Linuxをベースとした
8.12.0-jdk23-corretto
も用意されているようなので、RedHat系のディストリビューションが好きな方はこちらを選ぶのもいいと思います
SSH公開鍵の譲渡
クライアント端末でSSH用の公開鍵を生成します。
ssh-keygen -t rsa
を実行すると、特に名前を変えない限り id_rsa.pub
と id_rsa
が生成されるので、ファイルサーバなりUSBメモリなり使って id_rsa.pub
をサーバ側に渡しておきます。
ディレクトリ構成
サーバ側のディレクトリ構成は以下の通りです。
app以下のものについてはSpring Initializrで生成されたものを丸ごとコピペしています。
上記で受け取った公開鍵はDockerfileと同じ階層に配置しておくと後々便利です。
プロジェクトルート/
├── app/ # 以下、Spring Initializrで生成されたもの
│ ├── build/
│ ├── gradle/
│ ├── src/
│ ├── build.gradle
│ ├── gradlew
│ ├── gradle.bat
│ ├── HELP.md
│ └── setting.gradle
├── Dockerfile # 下記で説明します
├── id_rsa.pub # 上記手順で受け取ったもの
└── .gitignore
サーバ側の設定
Dockerfile
Dockerfileは次の通りです。
FROM gradle:8.12.0-jdk23
RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root123' | chpasswd # パスワードを設定していますが下で無効化しています
# パスワードログインを禁止します
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
# ポートを2222に変更します
RUN sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
# 公開鍵を登録します
COPY ./id_rsa.pub /root/.ssh/authorized_keys
EXPOSE 2222
CMD ["/usr/sbin/sshd", "-D"]
コンテナ起動
以下の手順でコンテナを起動します。docker-composeを作ってしまってもいいですが、それほどオプションが多くなかったのでコマンドにしました。
PowerShellでプロジェクトルートまで移動し、次のコマンドを実行します。
$ docker build ./ -t java-sandbox-gradle
$ docker run -p 2222:2222 -v /<プロジェクトルートまでの絶対パス>/app:/app -itd java-sandbox-gradle
IPの取得
クライアントから接続するためにipconfigなどでローカルIPを確認しておきます。
クライアント側の設定
VSCode拡張のインストール
VSCodeを開いて、拡張機能から Remote-SSH
をインストールします。
SSHで接続
画面左下の「><」のようなアイコンをクリックすると、モーダルが降りてくるので、「ホストに接続」(または「Connect to Host...」)をクリックしてください。
「新規SSHホストを追加する...」をクリックすると入力欄が出てくるので、先ほど取得したサーバ端末のIPを以下の通り入力します
ssh root@<サーバ端末のIP> -p 2222
すると接続シーケンスが開始されて、しばらくすると「SSHキーのパスフレーズを入力してください」と出るので、ssh-keygen
で登録したパスフレーズを入力します。
接続が完了するとこのような画面になり、「フォルダーを開く」を押すとマウントされたサーバ側の開発環境(/app配下)が表示されます
以上です!
次は外部ネットワークからアクセスするのもやりたいなぁ