VSCodeでSSH先サーバのDockerに入ってPython開発するメモ
音楽系ブログとして始めたのにプログラミング系になってきたこのブログ。
VSCodeユーザ向けに、リモートのサーバ上でDockerコンテナを立ち上げて開発するまでのメモを残します。
- 環境
- ssh接続でサーバに入れるようにする
- ローカルのVSCodeの準備
- VSCodeでサーバにRemote接続
- Dockerfile等の準備
- サーバ上のコンテナにVSCodeで入る
- 拡張機能のインストール
- おわりに
環境
[user1@server1] ~ % lsb_release -a No LSB modules are available. Distributor ID: LinuxMint Description: Linux Mint 19.3 Tricia Release: 19.3 [user1@server1] ~ % docker --version Docker version 23.0.0, build e92dd87
LinuxMintではありますが、CLIで使うぶんにはUbuntuと同じように使えます。
Linux Mint 19.03でDockerがv23とあまり見ないバージョンの組み合わせになってますが、気にせずに。 説明用に古いマシンをサーバ代わりに使ってみました。
Dockerのバージョンはひとまず19.03以上を想定しています。
ssh接続でサーバに入れるようにする
今回は接続したいサーバをserver1とします。 ここはご自身の接続したいサーバ名と読み替えてください。
ターミナルでssh server1
を打てばserver1に入れるように、sshのconfigで設定してください。
このあたりは ssh config 設定
などで検索すればけっこう出てきます。
これでVSCodeでリモート接続する際に見えるようになります。
ローカルのVSCodeの準備
ローカルマシンのVSCodeに、以下の拡張機能をインストールしてください。 いずれもMicrosoft公式の拡張で、同系統のアイコンのものです。
- Remote - SSH
- Remote Exploler
- Dev Containers (ローカルでDockerを使わない場合、ここでは不要かも。)
確か Remote - SSH をインストールすれば他も入ったような気がします。 どれかがこれらのバンドルになってたような。
ちょっと前まで Remote - Containerとか名前が違った気がしますが、いつの間に変わってました。 もしかしたら今後も変わるかもしれませんね。
VSCodeでサーバにRemote接続
サイドバーのモニターのようなアイコンを選ぶとリモートエクスプローラという機能で、さきほどssh configで設定したssh先が見えます。
ローカルのコンテナが見えている場合は、上部のプルダウンリストをContainers→リモートに変更すれば出ます。
今回はserver1に接続するので、server1の横の→
かウィンドウマークをクリックします。
→
は今のウィンドウで直接開き、ウィンドウマークは新しいウィンドウで出ます。
Dockerfile等の準備
既に作成済みのコンテナに入る場合はスキップしてください。
以下ではサーバに入った後、開いているディレクトリを変えてDockerコンテナの準備をします。
docker-python
というディレクトリを親フォルダに Dockerfile, docker-compose.yml, pip用のrequirements.txtを用意して、Python3.10を動かすコンテナを作成します。
ここはご自身の用途に合わせて大きく変わるところだと思うので、参考程度にどうぞ。
Dockerfile
from python:3.10 USER root ENV TZ=Asia/Tokyo ENV TERM xterm RUN apt update && apt install -y zsh WORKDIR /root/tmp COPY requirements.txt . RUN pip install --upgrade pip \ && pip install --no-cache-dir -r requirements.txt
zshは趣味。
docker-compose.yml
version: "3" services: main: build: context: . dockerfile: Dockerfile container_name: 'pythonproj' tty: true working_dir: /root/workdir volumes: - ./workdir:/root/workdir
requirements.txt
numpy pandas matplotlib
イメージのビルド&コンテナ作成
cd docker-python docker-compose up -d
これで dockerpython-main というイメージから pythonproj というコンテナが作成されます。
この作り方だと、イメージ名が親ディレクトリ(からハイフンを抜いたもの)-main(サービス名)になります。
サーバ上のコンテナにVSCodeで入る
サーバを開いているVSCodeで再びリモートエクスプローラを選び、プルダウンリストをリモート→Containersに変更するとサーバ上のコンテナ一覧が表示されます。
さきほどと同じ要領で、作成したコンテナに入れます。
これで、サーバ上のコンテナに入って開発できるようになりました。 ターミナルはサーバではなくコンテナのものになっています。
拡張機能のインストール
ここまでで既にコンテナ内にVSCodeで入って作業できるようになっています。
Pythonのインテリセンスやデバッグなどの拡張はコンテナ内にインストールする必要があるので、コンテナに入った後にVSCodeの拡張を入れましょう。
Pylanceが一緒に入ります。必須。 ひとまずPython周りはこれで整います。
- Jupyter
Jupyter Notebookを使う場合は入れるといいです。 Jupyter拡張のNotebookはDockerコンテナのポート開けなくても使えるので、このあたりは需要多いのでは。
以前Dockerコンテナ上でJupyter Labを立てて外部からアクセスする方法についての記事を書いたのですが、複数人で共有しているサーバ上の場合はVSCode拡張のほうが楽です。 ポートフォワーディングの設定をしなくても使えるので。
makungoron-music.hatenablog.com
おわりに
個人的にVSCodeでコンテナに入るメリットをまとめておきます。
- ローカルでやっているVSCodeの操作感とまったく同じように開発できる
- ここに尽きますね。インテリセンス、デバッガ等をそのまま使えます。ローカルとのファイルの転送が楽なのもGood。D&Dでローカルから転送できます。
- ポートの設定なしでJupyter Notebookをサーバ上のコンテナ内で動かせる
注意点も一応。
- VSCode Serverが入るぶん、ちょっとコストが高い
- CLIでやるより多くのリソースを取ります。特にメモリが足りてない環境だと不安定になりやすいです。まあこれはコンテナに入らずとも、リモート接続全般に言えますが。カツカツの場合は注意です。
- 処理を回しっぱなしにして放置したい場合はCLIで
- コンテナを作り直したとき、VSCode serverの設定をし直す必要がある
この記事が皆さんのお役に立てば幸いです。