WindowsのVSCodeから別の物理マシンのDockerコンテナにリモートデバッグ

はじめに

研究室での開発は、コーディング用Windows機とAI学習用Linux機とにまたがって作業をしています。Visual Studio CodeのRemoteSSHという機能を使うと、SSH越しにコーディングとデバッグができ超便利!でした。

環境

コーディングWindows

・win10 x64
・Visual Studio Code 1.62.3
・執務室のマイデスク横にある。作業性良好。

AI学習Linux

・Ubuntu Linux 20.04 LTS
・NVidia GeForce RTX2080Ti
・サーバ室にあるサーバ機。直接作業すると寒くて凍える。
・Docker version 20.10.5
・hostname: nagatomo.local

環境構築の手順

Linux

docker runしてsshdを実行する

sudo docker run -it -p 8022:22  pytorch/pytorch
apt update ; apt install -y lv vim openssh-server  --no-install-recommends
mkdir /var/run/sshd
echo 'root:<password>' | chpasswd   #< <password>は適当なパスワードに置き換え。'root:hogehoge'のように。
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
#<= この行をコメントアウト #PermitRootLogin prohibit-password
/usr/sbin/sshd
#> コンテナ内でSSHデーモンが起動する。デフォルトの22番ポートでListenする。コンテナの外からは8022番ポートからアクセス可能となる。

[sshdの動作確認]

ssh root@localhost whoami
#> <password>をタイプして、root と応答があればOK。
#Linux機にて別のターミナルを起動(=コンテナの外でコマンド実行)。
ssh root@localhost -p 8022 whoami
#=> <password>をタイプして、root と応答があればOK。

windowsからのアクセス

ssh root@nagatomo.local -p 8022 whoami
#=> <password>をタイプして、root と応答があればOK。

エディタで%homepath%/.ssh/config を作成して以下の内容を貼り付け。

Host container
    HostName nagatomo.local
    Port 8022
    User root
  • VSCodeを起動。
  • https://www.server-memo.net/memo/vscode/vscode_ssh.html#i これの「インストール」の項目を実行し、「Remote Development」をVSCodeにインストールする。
  • VsCodeの設定を変更し、Linux上のコンテナでPythonのパスが通るようにする:https://qiita.com/hikaruworld@github/items/bbe7718874bf1fa9e940
  • VSCodeにて、表示→ビューを開く→リモートエクスプローラー → リモートエクスプローラーのペイン上端のプルダウンメニューにて”SSH Targets ”を選択 → ”container”を右クリックし、ConnectToHostInCurrentWindowを選択。
  • 新しいVSCodeのウィンドウが開いてpasswordを聞かれ、<password>を入力する。passwordが通ると、VSCodeのファイルエクスプローラのカレントディレクトリが、Linux機のコンテナのrootユーザのホームディレクトリとなる。
  • ファイル→フォルダーを開く でPythonファイルがあるフォルダを開く。またpasswordを聞かれ、<password>を入力する。
  • フォルダが開くはず。実行したいPythonファイルをダブルクリックしてエディタ画面に表示させる。
  • F5キーを押してデバッグが開始される!Yeah!

日々の運用手順

  • Windows
    • Containerが増えたら、%homepath%/.ssh/config のHost を追加する必要あり。
  • Linux
    • コンテナを起動するたびに/usr/sbin/sshdを起動する必要あり。サービス化したいことろ。

その他

  • Windows機にてWSL2を使ってコンテナを立てて、そこにVSCodeからSSHしてデバッグする方法は、VSCodeの拡張機能でサクッと可能っぽい。https://www.sun-m.co.jp/blog/tips/414.html
  • Windows機とは別のLinux機にてコンテナを立てて、そこにVSCodeからSSHしているのがポイントとなる。
  • このページの方法だとコンテナのセキュリティがゆるい。鍵認証方式が安心。

参考サイト

コメント

タイトルとURLをコピーしました