$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WSL2 +docker+Jupyter と VS Code リモート環境 の構築
Search
Saito5656
December 20, 2021
Programming
2
3.9k
WSL2 +docker+Jupyter と VS Code リモート環境 の構築
自分用の備忘録を、社内開発環境構築用の手順書として再編集しました。
2021.12.20修正
以下欠落していた個所を追記しました。
・sshキーの生成とssh再起動の2行追記(p. 10)
Saito5656
December 20, 2021
Tweet
Share
More Decks by Saito5656
See All by Saito5656
今年やったこと最近やったこと2025
saito5656
0
25
ついに(CDKで)Cognito実装した話
saito5656
0
100
今年やったこと最近やったこと2024
saito5656
0
200
今年やったこと最近やったこと
saito5656
1
210
【ポエム】PythonのWatchdogを調べてみた
saito5656
0
620
LoRaデバイスからAWS IoTに通信やってみた
saito5656
1
300
Local NW データを S3 に転送してみた
saito5656
0
84
シェル芸人見習い修行 〜 ラズパイ で 一発環境 構築してみた 〜
saito5656
1
210
ラズベリーパイで工場が見える話
saito5656
0
360
Other Decks in Programming
See All in Programming
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
150
無秩序からの脱却 / Emergence from chaos
nrslib
2
13k
Go コードベースの構成と AI コンテキスト定義
andpad
0
110
Level up your Gemini CLI - D&D Style!
palladius
1
180
Cap'n Webについて
yusukebe
0
120
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.1k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
220
How Software Deployment tools have changed in the past 20 years
geshan
0
28k
愛される翻訳の秘訣
kishikawakatsumi
1
300
TypeScriptで設計する 堅牢さとUXを両立した非同期ワークフローの実現
moeka__c
6
3k
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
190
Why Kotlin? 電子カルテを Kotlin で開発する理由 / Why Kotlin? at Henry
agatan
2
6.9k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
For a Future-Friendly Web
brad_frost
180
10k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
What's in a price? How to price your products and services
michaelherold
246
12k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Six Lessons from altMBA
skipperchong
29
4.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Automating Front-end Workflow
addyosmani
1371
200k
Facilitating Awesome Meetings
lara
57
6.7k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Transcript
Windows10への WSL2+docker+Jupyterインストールと VS Code接続環境の構築 @Saito 5656 2020.11.3 2021.12.20⊿1
このハンズオン資料について • WSL2インストール 【参考】https://www.atmarkit.co.jp/ait/articles/2008/31/news023.html • ssh設定 【参考】https://blog.mihyaeru.com/2020/06/28/wsl2-ssh/ 【参考】https://qiita.com/gengen16k/items/18262af0781fd32fc9cd • Docker
Dessktopのインストール 【参考】https://www.docker.com/ 【参考】https://qiita.com/KoKeCross/items/a6365af2594a102a817b • Jupyter-Lab imageのビルドと実行 【参考】https://qiita.com/komiya_____/items/96c14485eb035701e218 【参考】https://qiita.com/ss_33_sss/items/b018e55834f21d1a593d ☞ 理屈はさておき、docker上でJupyter-Lab(Python機械学習環境)の最速立上げ手順 ☞ 仮想上directoryとPCフォルダーをbindしwindows上でファイル保存する環境構築手順 ☞ VSCodeでのnotebook利用方法 【謝辞】Blog著者の皆様ありがとうございました 説明すること ☞ windows shellとLinuxとdockerの基礎知識、コマンドの役割 ☞ VSCodeの初期設定、使用方法 ☞ Pythonの文法、基礎知識 説明しないこと(手を動かして自分で調べましょう)
WSL2のインストール
WSLのインストール • 「コントロールパネル」⇒「プログラムと機能」を開く • 「Windowsの機能の有効化または無効化」をクリック • 「Linux用Windowsサブシステム」にチェックを入れて「OK」をクリック • Windowsを再起動する 【参考】WSL2とは:
https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html
Ubuntuのインストール • Microsft Storeで「wsl」と検索 • 「Ubuntu」を選択して「インストール」 • インストールが完了するとUbuntuが立上るので「UNIX username」「New password」を入
力してユーザー初期設定する
仮想マシン有効化 • 「コントロールパネル」⇒「プログラムと機能」を開く • 「Windowsの機能の有効化または無効化」をクリック • 「仮想マシン プラットフォーム」にチェックを入れて「OK」をクリック • Windowsを再起動する
UbuntuをWSL2用に変換 • コマンドプロンプトより「wsl.exe –l -v」と入力しWSLのVERSIONを確認 • VERSIONは1のはずなので「wsl.exe --set-version Ubuntu 2」と入力
• 「WSL 2を実行するには、カーネルコンポーネントの更新が必要です」が表示されたら、 https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel⇒「wsl_update_x64.msi」をダウン ロードして実行 • 再度「wsl.exe --set-version Ubuntu 2」を実行して「wsl.exe –l -v」でVERSION確認 変らなかったら再起動してVERSION再確認
仮想化支援機能の有効化が必要な場合 • 再度「wsl.exe --set-version Ubuntu 2」と入力して下記メッセージが出たら または「 Windowsの機能の有効化または無効化」で「仮想マシンプラットフォーム」 が表示されない場合、BIOSの仮想化支援機能を有効化する •
BIOSで有効化する項目は intel CPU: VT-x VT-d AMD CPU: AMD-V(UEFI上ではSVM Mode、CPU Configurationにある) IOMMU(Advanced>AMD CBS>NBIO Common Options等、深い場所) 【参考】https://jp.finalfantasyxiv.com/lodestone/character/6584870/blog/4364798?order=2
ssh設定
WSL2のssh設定① sshのBASIC認証許可 # Ubuntuターミナルを起動 $ sudo nano /etc/ssh/sshd_config PasswordAuthentication yes
$ sudo ssh-keygen –A $ sudo service ssh restart #以下のスクリプトをWindowsで起動時実行するバッチファイルとして作成(下例はssh_bat.bat) wsl -d Ubuntu -u root exec service ssh restart for /F %%i in (‘wsl -d Ubuntu exec hostname -I’) do set ip=%%i netsh interface portproxy delete v4tov4 listenport=22 netsh interface portproxy add v4tov4 listenport=22 connectaddress=%ip% #バッチファイルを任意の場所に保存 ssh_bat.bat
WSL2のssh設定② • 「スタートメニュー」⇒「タスクスケジューラー」⇒「タスクの作成」を開く • 全般タグは、任意の名前を付けて「最上位の特権」をチェック、構成はWindows10 • トリガータグは、新規作成から「タスクの開始」を「スタートアップ時」に設定 • 操作タグは、新規作成から「プログラム/スクリプト」に先ほどのバッチファイルを設定 •
設定タグは、念のため再起動間隔を1分間/3回で設定
Docker Desktopのインストール
Docker Desktopのインストール • https://www.docker.com/get-startedより「Windows用にダウンロード」をクリック • 「Enable WSL 2 Windows Features
」をチェックしたままインストールを続ける • インストール完了後に「setting」⇒「General」でWSL2 engineが有効なのを確認 • 「setting」⇒「Resources」⇒「WSL INTEGRATION」でUbuntuをonにしてRestart
Jupyter-Lab imageのビルドと実行
Jupyter-Lab imageのビルド • 作業フォルダを作成し機械学習環境imageをビルドする為のDockerfileを配置 • 作業フォルダに移動してimageをビルド({作業directory}はDockerfileで指定するdir名) $ mkdir {作業directory} &&
cd {作業directory} $ sudo nano Dockerfile $ docker build -t {任意のimageファイル名} . ← . は忘れないように home ubuntuのusername docker etc Dockerfile # ベースイメージ名:タグ名 FROM ubuntu:latest # pipをアップグレードし必要なパッケージをインストール RUN pip install --upgrade pip && ¥ pip install autopep8 && ¥ pip install numpy && ¥ pip install pandas && ¥ pip install matplotlib && ¥ pip install xlsxwriter && ¥ pip install Keras && ¥ pip install tensorflow # コンテナ側:{username}はubuntuのusername、{作業directory}は任意の作業用フォルダ名 WORKDIR /home/{username}/{作業directory} # コンテナ側のリッスンポート番号 EXPOSE 8888 # ENTRYPOINT命令はコンテナ起動時に実行するコマンドを指定(基本docker runの時に上書きしないもの) # "jupyter-lab" => jupyter-lab立ち上げコマンド # "--ip=0.0.0.0" => ip制限なし # "--port=8888" => EXPOSE命令で書いたポート番号と合わせる # ”--no-browser” => ブラウザを立ち上げない。コンテナ側にはブラウザがないので 。 # "--allow-root" => rootユーザーの許可。セキュリティ的には良くないので、自分で使うときだけ。 # "--NotebookApp.token=''" => トークンなしで起動許可。これもセキュリティ的には良くない。 ENTRYPOINT ["jupyter-lab", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root", "--NotebookApp.token=''"] # CMD命令はコンテナ起動時に実行するコマンドを指定(docker runの時に上書きする可能性のあるもの) # "--notebook-dir=/workdir" => Jupyter Labのルートとなるディレクトリを指定 CMD [“--notebook-dir=/home/{username}/{作業directory}] Dockerfileは以下の{username}と{作業フォルダ}を各自の環境に書換えてコピペ 作業フォルダをdockerにする場合 必要に応じてパッケージは追加・削除 { }は不要、念のため
Jupyter-Lab imageの実行 • ビルドしたdocker imageを実行する • 右のメッセージが出たら成功 • ブラウザーで「localhost:8888」と入力し起動を確認 以下の{}内を各自書き換えてコピペ
$ docker run -it -p 8888:8888 --rm --name my-lab --mount type=bind,src=/mnt/c/Users/{winPCのユーザーフォルダ名}/{任意の作業フォルダ 名},dst=/home/{username}/{work_directory} {自分がbuildしたコンテナimage名} src=以下はPC側の作業(保存)フォルダー、ubuntu側からbindで/mnt以下にぶら下がる dst=以下は仮想マシンの作業(保存)フォルダー、
VS Codeからcontainerへ接続
VS Code拡張機能インストール • 「 Ctrl-Sihft-x」(拡張機能)から「remote」と入力 • Remote Developmentをインストール 拡張機能の検索窓に 「remote」と入力
インストール
コンテナに接続 • Ubuntuターミナルでdocker runした状態で リモートウィンドウボタンをクリック • Remoto – Container: Attach
to Running Container…を選択
コンテナに接続 • 先ほどdocker runしたコンテナが表示されるので選択 しばらくすると接続が完了する 新しいウィンドウが開く
コンテナにPythonをインストール • 「 Ctrl-Sihft-x」(拡張機能)から「python」と入力 • Python拡張機能をコンテナ上にインストール
コンテナに接続 • リモートエクスプローラーを開き PC作業フォルダ(保存先)と仮想作業dirがbindされてるのを確認 リモート エクスプローラー Dockerfileで指定したPCフォルダ名 (Source)と仮想作業Dir(Distination)が表示 されていることを確認
コンテナを開く • Open Containerボタンを押してコンテナを開く • bind先とつながったコンテナ上の作業dirに移動する
VS Codeから新しいnotebookを作成 • 「 Ctrl-Sihft-p」(コマンドパレット)から Python: Create Blank New Jupyter
Notebookを選択 • しばらくすると新しいnotebookが立ち上がる
VS Codeから新しいnotebookを作成 • 適当なグラフを描画してみる • ↓怒られたら再実行する sin_wave.py import wave import
numpy as np from matplotlib import pylab as plt import struct a = 1 # 振幅 fs = 500 # サンプリング周波数 f0 = 5 # 周波数 sec = 5 # 秒 swav = [] for n in np.arange(fs * sec): # sin波生成 s = a * np.sin(2.0 * np.pi * f0 * n / fs) swav.append(s) # 表示 plt.plot(swav[0:100]) plt.show()
ファイルをbind先のPCフォルダに保存 • 名前を付けて保存したら、bindしたPCフォルダでも確認 保存 test_sampleで保存 Docker上の作業dir PC上の作業フォルダ
VS Codeリモートの切断とコンテナ終了 • リモートを切断してVS Codeを閉じてからdocker imageを停止 クリック リモート接続を終了後、VS Codeを閉じる Ubuntuターミナルで「Ctrl-C」⇒「y」で
コンテナを停止