当サイトは、アフィリエイト広告を利用しています
Dockerコンテナを作って、そのコンテナ内の開発を
VScodeを使って行う方法をまとめる
Dockerコンテナ内での作業はVScodeの拡張機能「Dev Containers」
を使わない場合は基本はterateamやWindowsTerminalなどで
コンテナにログインして行うことになるので
VScode上でコンテナ内の作業を行うえるようになるのは
かなり便利だと思う
ちなみに開く対象がコンテナではなくリモートサーバーの場合は remoteSSHという拡張機能が使える
VScodeの拡張機能「Dev Containers」は拡張機能「Remote Development」を
インストールすれば、それに含まれているので一緒に入手することができる。
「Remote Development」にはVScodeでリモート開発する際に便利な拡張機能が
まとめられているので、特に理由がなければ「Remote Development」を入れておく。
下記の環境で行う
Docker for Windowsのインストール方法については下記記事で 紹介しています
まずはコンテナを作る必要がある
サンプルとしてPythonの開発環境をコンテナで作り
そのコンテナに対して、VScodeからコンテナ開発する方法
を実施する
コンテナで開発環境を作る場合は
ローカルにはDockerだけあればいいので
Pythonはいれなくてもよく、ローカル環境が
汚れないので良い
コンテナはdocker-composeを使って作成する
version: "3"services:python3:container_name: "container_python3"# imageを指定image: "python:3.10"tty: true# プロジェクトをバインドマウントvolumes:- .:/workspace
コンテナと元となるimageを指定する
今回はPythonの開発環境を作るので
「python:3.10」のimageを使う
trueにするとコンテナ内で対話的なシェルセッションを開始できる
※コンテナ内に入って操作するならつけといたほうが無難。
「ホスト側の相対Path:コンテナの絶対Path」で設定し
ホストとコンテナのvolumeをバインドさせておく
これでコンテナ内の編集はローカルの方へ反映されるようになるので
コンテナを削除してもローカルに変更分は残るようになる。
VScodeのDev Containersを使ってコンテナをVScodeで開く場合
大きく2つ方法がある
それぞれのやり方をまとめる。
docker composeで作ったコンテナにVScode
からアクセスできるイメージ。
後述するがこちらはVScodeのDev Containersの設定ファイルである
は作らない。
そのためdevcontainer.jsonでの細かな設定はできないが
その分、設定はdocker-compose.yml内に全て書くため、シンプルではある。
構成は下記のようになる
.|-- app| `-- main.py`-- docker-compose.yml
サンプルのファイル。
print("hellow world")
「dockerコンテナの設定」で作成したものと
同じ。変更なし
まずはdocker composeでコンテナをつくる
$ docker compose up -d[+] Building 0.0s (0/0) docker:default[+] Running 2/2✔ Network pythonorg-base_default Created 0.0s✔ Container container_python3 Started 0.1s$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES826bbad45fdf python:3.10 "python3" 6 seconds ago Up 5 seconds container_python3
コンテナ作成完了!
作成したコンテナをVScodeのDev Containersを使って開く
Dev Containersをインストールしていると
リモートエクスプローラが表示されているので
コンテナ画面を終了したい場合は
×ボタンで閉じるか、左下のコンテナ名をクリックすると
リモート接続を終了するがあるのでそれを選択する
VScodeの画面を閉じても、コンテナは停止されない。
「dockerコマンドで作成済のコンテナをVScodeから開く」の場合
VScodeの拡張機能はインストールされないので
自分で追加する必要がある。
またコンテナを削除した場合は、VScodeの拡張機能も消えるので
インストールしなおす必要がある。
スクリプト使ってを使って拡張機能を一括インストール方法があるので
そのスクリプトをつくっておけば、さほど手間ではないと思う。
下記で紹介しています。
こちらはコンテナ作成からVScodeで実行する
VScodeのDev Containersの設定ファイルである
を作成することで
コンテナ作成時の細かい設定が可能。
構成は下記のようにする
.|-- .devcontainer| `-- devcontainer.json|-- app| `-- main.py`-- docker-compose.yml
.devcontainerを増やす
他は変更なし。
VScodeの拡張機能のDev Containersの開発コンテナの
設定をしていく
.devcontainer/devcontainer.jsonを作成する
{// コンテナ名(vscode上の)"name": "python3_vscode",// コンテナ作成に使うdocker-comopseファイルの相対パス"dockerComposeFile": "../docker-compose.yml",// サービス名"service": "python3",// コンテナ内のプロジェクトのルートフォルダを指定"workspaceFolder": "/workspace",// コンテナ停止時のアクション"shutdownAction": "stopCompose",// コンテナに入れるVScodeの拡張機能"extensions": ["ms-python.python",]}
vscode上で見えるコンテナ名
コンテナ作成に使うdocker-comopseファイルの相対パスで指定する
docker-compose.yml内のserviceのうち
VScodeで開きたいコンテナのサービス名を指定する
docker-compose.ymlで複数コンテナを作ってる場合でも
VScodeで開けるのはそのうちの一つのみ
コンテナを開いたときのルートフォルダを指定する
VScodeでコンテナ画面を閉じた時、コンテナを
どうするかの設定
stopComposeは画面を閉じた時にコンテナを停止する
コンテナ作成と同時にインストールする
VScodeの拡張機能を指定できる
これが便利!
remoteEnv、workspaceMount、remoteUserなど
いろいろあるが、docker-compose.ymlで設定できる
項目と重複していたり、使い方がよくわからなかったりするので
一旦は、上記ぐらいの設定をするようにしている
また便利な使い方があれば追記しようと思う。
実は.devcontainer/devcontainer.jsonは
VScodeからコンテナを作成した場合は、デフォルトで
勝手に作成してくれる。
ただ中身は自分で編集する必要があるので
先に作っておいた方がいいと思う。
devcontainer.jsonができたら
VScodeからコンテナを作る
F1でコマンドパレットを開いて、「コンテナで再度、開く」
を実行すればコンテナを作ってくれる。
※devcontainer.jsonがなかった場合
このタイミングで自動で作られる。
「dockerコマンドで作成済のコンテナをVScodeから開く」と同じ
要領でコンテナを閉じるとコンテナも停止する
会社などでプロキシを利用している場合は、拡張機能がうまく
インストールできないことがある。
※具体的にはインストールずっと終わらない
その場合は、VScodeでプロキシの設定をすれば
インストールできるようになる
VScodeでプロキシを設定する方法については下記記事で紹介
しています
VScodeの拡張機能「Dev Containers」を使った
コンテナ開発のやり方を自分なりにまとめてみた
個人的には、基本はdocker-compose.ymlで設定して
使いやすくするため細かいところをVScodeの拡張機能インストールをdevcontainer.jsonで
設定する使い方をしている。
ただまだ使い始めたところなので
もっと便利な使い方を探していこうと思う。