Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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.8k
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
今年やったこと最近やったこと
saito5656
1
160
【ポエム】PythonのWatchdogを調べてみた
saito5656
0
270
LoRaデバイスからAWS IoTに通信やってみた
saito5656
1
210
Local NW データを S3 に転送してみた
saito5656
0
67
シェル芸人見習い修行 〜 ラズパイ で 一発環境 構築してみた 〜
saito5656
1
180
ラズベリーパイで工場が見える話
saito5656
0
340
工場でStep FunctionsでStep Functions
saito5656
0
180
Cloudformation (SAM) で実装した EC2 の 運用自動化
saito5656
0
150
PySimpleGUIでにゃんこ見守りカメラにGUI画面つけてみた
saito5656
1
340
Other Decks in Programming
See All in Programming
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
1k
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
350
最新TCAキャッチアップ
0si43
0
140
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
2
670
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
Jakarta EE meets AI
ivargrimstad
0
610
2024/11/8 関西Kaggler会 2024 #3 / Kaggle Kernel で Gemma 2 × vLLM を動かす。
kohecchi
5
920
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.5k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
89
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Being A Developer After 40
akosma
86
590k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
410
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」で
コンテナを停止