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
今年やったこと最近やったこと2024
saito5656
0
150
今年やったこと最近やったこと
saito5656
1
200
【ポエム】PythonのWatchdogを調べてみた
saito5656
0
540
LoRaデバイスからAWS IoTに通信やってみた
saito5656
1
270
Local NW データを S3 に転送してみた
saito5656
0
76
シェル芸人見習い修行 〜 ラズパイ で 一発環境 構築してみた 〜
saito5656
1
200
ラズベリーパイで工場が見える話
saito5656
0
360
工場でStep FunctionsでStep Functions
saito5656
0
190
Cloudformation (SAM) で実装した EC2 の 運用自動化
saito5656
0
160
Other Decks in Programming
See All in Programming
從零到一:搭建你的第一個 Observability 平台
blueswen
0
220
TypeScript だけを書いて Tauri でデスクトップアプリを作ろう / Tauri with only TypeScript
tris5572
2
530
DevTalks 25 - Create your own AI-infused Java apps with ease
kdubois
2
120
Rethinking Data Access: The New httpResource in Angular
manfredsteyer
PRO
0
220
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
790
型安全なDrag and Dropの設計を考える
yudppp
5
660
抽象データ型について学んだ
ryounasso
0
210
『Python → TypeScript』オンボーディング奮闘記
takumi_tatsuno
1
140
TypeScriptのmoduleオプションを改めて整理する
bicstone
4
420
衛星の軌道をWeb地図上に表示する
sankichi92
0
250
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
yuukit
3
610
Parallel::Pipesの紹介
skaji
2
870
Featured
See All Featured
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
840
4 Signs Your Business is Dying
shpigford
183
22k
GraphQLとの向き合い方2022年版
quramy
46
14k
How to train your dragon (web standard)
notwaldorf
92
6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How GitHub (no longer) Works
holman
314
140k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Documentation Writing (for coders)
carmenintech
71
4.8k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
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」で
コンテナを停止