VS Code+DevContainer+Dockerで最強Python開発環境(Remote編)
概要
本書の内容
前回の続きで、VS CodeとDockerを利用したPython用開発環境(リモート接続編)の設定/利用方法を説明します。前回の利便性をそのままに、機械学習を目的としたGPUサーバーでの開発等が可能になります。
本書で実現する開発環境の概略図は以下です。
前提
- 下記のソフトウェアがインストール済みであること
- LocalMachine
- SSHクライアント(macOSや、Windowに、デフォルトでインストールされています)
- VS Code と VSCode拡張(Remote Development)
- RemoteMachine
- SSHサーバー
- Docker
- DockerCompose
- LocalMachine
- Remoteマシンにアカウントがあり、SSHコマンドでIDとパスワードでログインできること
手順
Step1 SSH公開鍵認証の設定
LocalMachineからRemoteMachineへのSSH接続をするための設定を行います。
-
鍵ペア(秘密鍵・公開鍵)の作成
macOS上で、以下のコマンドで鍵ペアを作成する。以下は実行例。% ssh-keygen Generating public/private ed25519 key pair. Enter file in which to save the key (/Users/XXX/.ssh/id_ed25519): # ファイル名に拘りなければ入力不要 Enter passphrase (empty for no passphrase): # パスフレーズは入力不要 Enter same passphrase again: # パスフレーズは入力不要 Your identification has been saved in /Users/XXX/.ssh/id_ed25519 Your public key has been saved in /Users/XXX/.ssh/id_ed25519.pub The key fingerprint is: SHA256:IwXngB9bBNn5681nGKizvpNSs5nc/bkUQd2CXsUeel4 XXX@PXXXnoMacBook-Pro.local The key's randomart image is: +--[ED25519 256]--+ | .+=o. ..+o| | . o=+ ..o.+| (省略) | o. . .. oE| | . S o + .| +----[SHA256]-----+
⇨
${HOME}/.ssh/
の下に、id_ed25519
とid_ed25519.pub
が作成される -
公開鍵情報を控える
macOS上で、以下のように公開鍵の内容を控える(クリップボードにコピーする)% cat ~/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3Nz(省略)S0OnA XXX@XXXnoMacBook-Pro.local
-
RemoteMachineに公開鍵を設定する
SSHでRemoteMachineにログインし、公開鍵を設定する。以下はUbuntu上での実行例$ cd # HOMEディレクトリに移動 $ mkdir -p ~/.ssh # .sshフォルダがなければ作成 $ echo "コピーした公開鍵のテキスト" >> ~/.ssh/authorized_keys # 鍵情報の追加書き込み $ chmod 600 ~/.ssh/authorized_keys # パーミッション設定
-
SSHクライアントの接続先設定
macOS上で、~/.ssh/config
をなければ作成し、下記のテキストを記載する。Host HOGEHOGE # 任意のID User xxx # RemoteMachineにログインするID HostName 192.168.0.xx # RemoteMachineのホスト名 or IPアドレス IdentityFile ~/.ssh/id_ed25519 # 秘密鍵のパス
-
RemoteMachineにSSHログインできるか確認
macOSのターミなるでSSHログインをパスワードなしで行えることを確認する% ssh HOGEHOGE
Step2 VS-CodeでRemote-SSH接続
LocalHostのVS-Codeから、RemoteMachineに接続します。
-
VSCodenのコマンドパレットから
Connect Current Window to Host...
を実行
コマンドパレットは、Macならば、⌘
+Shift
+P
、それ以外はCtrl
+Shift
+P
で開くことができます。
Connect Current Window to Host...
がドロップダウンリストに現れない場合は、コマンドパレットにssh
とタイプしてみてください。 -
目的の接続先を選択
~/.ssh/config
の Host として記載したIDが表示されます。
今回はHOGEHOGE
を選択します。 -
接続確認
上記はSSH接続後のVS-Code画面です。
画面左下に注目すると、>< SSH: HOGEHOGE
のように、SSHで接続されている状態であることが確認できます。
この状態のVS-Codeは、リモートマシンでVS-Codeを起動している状態と同じなので、TERMINALでは、リモートマシンのコマンドが実行できます。
Step3 RemoteMachineでのコンテナ開発
残りは、前回と同様です。
リモートマシン上に、コンテナ開発一式をセットアップします
(SSH接続されたVS-Codeで作業します)。
ポイントはWorkspaceRootに.devcontainer
フォルダがあり、その中にコンテナ関連ファイルが3点あることです。
(VScode Workspace root)
|-- .devcontainer/
| |-- Dockerfile
| |-- devcontainer.json
| `-- docker-compose.yml
`-- sample.py
各ファイルの中身は以下の通りです。
.devcontainer/Dockerfile
FROM python:3.10
USER root
RUN apt-get update && \
apt-get -y install --reinstall ca-certificates && \
apt-get -y install software-properties-common && \
pip install --upgrade pip
# Install Basic Packages
RUN pip install ipykernel jupyter
.devcontainer/devcontainer.json
{
"name": "python",
"dockerComposeFile": "docker-compose.yml",
"service": "workspace",
"workspaceFolder": "/workspace",
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-toolsai.jupyter"
],
"settings": {
"workbench.colorCustomizations": {
"titleBar.activeBackground": "#19549C",
"titleBar.activeForeground": "#ffffff",
"activityBar.background": "#02A7E3",
"activityBar.foreground": "#ffffff"
}
}
}
}
}
.devcontainer/docker-compose.yml
version: '3'
services:
workspace:
build:
context: ..
dockerfile: .devcontainer/Dockerfile
environment:
PYTHONPATH: /workspace
volumes:
- ..:/workspace
command: sleep infinity
sample.py
# %%
import sys
print(f"Python version {sys.version}")
最後に
今回紹介した内容により、手元のPC(macOS, Windows)のVS-Codeから、GPUサーバーやクラウドのVMからRaspberryPiまで、さまざまなリモートマシンにアクセスして開発を行うことができます。
ご活用いただけますと幸いです。
Discussion