【Bash】Windows Subsystem for Linux【WSL】3
■ このスレッドは過去ログ倉庫に格納されています
>>643
インストール時の管理者権限は必要無いようだ >>652
WSLは基本的にユーザー権限の中で動くので
WSLの中でsudoをやった所で、WSLの世界でのrootにはなってるけど
Windowsの世界の管理者になるわけじゃないよ
おそらくエミュレートしてるLinuxのシステムコールの何かが
Windows上での管理者権限を必要としてるとかではないだろうか? mattnさんのツイート:
WSL の docker 遅いなぁ。nginx 動かして
$ ab -k -c 10 -n 1000 http://127.0.0.1:8080/
してみたら 1300 req/sec しか出ないや。まぁ動くだけマシだけど。
https://twitter.com/mattn_jp/status/1016020548520820736
3:05 - 2018年7月9日
mattnさんのツイート:
昨日試した限りだと WSL に入れた Ubuntu 18 だと docker 動かなかった。
https://twitter.com/mattn_jp/status/1016461641767006208
8:18 - 2018年7月10日 >>654
ネットワーク、ソケットがらみかねえ・・・ 別のバージョンのUbuntuでdockerの動作を確認するときは、一度OSを再起動する必要
があるようだ。例えば、Ubuntu-16.04で一度dockerデーモンを動かすと、OSの再起動
をなしではUbuntu-18.04でdockerデーモンが動かない。dockerデーモンをstopしても
同様だった。また、OS再起動直後にUbuntu-18.04でdockerデーモンを起動すると動くが、
invalid argumentが出て動作はしない。(デーモンとの通信エラーにはならない。)
調べているけど、原因分からず。同様のエラーの報告はちらほら見受けられる。 まだ完璧じゃない部分があるんでしょうね。
だけど、dockerが普通に動くのぞみは出てきたね。
Linuxカーネルの多くをエミュレートしないと無理そうだと思っていたから
難しいんだろうなと思ってたけど、大きな山はなさそうだ WSL自体を再起動する方法ってあるの? あれってサービス?sudo rebootしたい >>659
Linuxバイナリを動かすことができるコマンドプロンプト
だから再起動なんて無いよ >>659
wslは起動していないので、再起動できません でも最近のwslはコンソール閉じてもプロセス生きてるよね >>663
initが残るようになったからのはず
そのinitも結局はwindiwsのプロセス WSLはWindowsの中の機能の一つ、という立ち位置。
WSLの窓を開かなくてもLinuxのサービスを走らせることはできるよ。
もちろんコマンドプロンプトからも実行できるし、タスクマネージャーなんかにも登録できる。
完全に位置機能として扱える。 X410 を購入 - Microsoft Store ja-JP
https://www.microsoft.com/ja-jp/p/x410/9nlp712zmn9q
> 4,650 → 580 (税込) ( 4,070 値引き あと 18 日です)
Windows StoreをWSLで検索して見つけた。良さそうだけど どう思う? Windows側のIMEで透過的に日本語入力とかは期待できそうに無いな
対応言語や法人名を見るに、韓国製か
中国語に対応していないのが少々意外な dockerでexecは動かないのかな。attachは動くけど。カーネルの機能が足りないのかな。
$ keyctl session
keyctl_join_session_keyring: Function not implemented 遅いのは何とかしてほしい
デュアルブートしたくなる
ほんま遅い 普通にDocker for Windows使えばいいだけ Docker for WindowsはHyper-V使ってるから、WSLのDockerとは共存できない模様。
じょいさんのツイート:
WSLでDocker動かない各位、Hyper-Vの機能OFFにすると動きますよ
https://twitter.com/joy1192/status/1016519642808905728
12:09 - 2018年7月10日 >>673
じゃあDocker Toolboxを使えばいいだけの話では? >>674
> Docker for WindowsはHyper-V使ってるから、WSLのDockerとは共存できない模様。
その理屈はおかしい。
WSLのDockerがHyper-Vなんか使うわけがない
Dockerはハードウェアの仮想化をしてないんだから Docker for WindowsもWSLのDockerも
同じWindows上で動くDockerだからポート番号でもかぶってるんだろ
Hyper-Vをオフにすることで、Hyper-Vが必要なDocker for Windowsが
停止したってのが真実だろうな。つまりHyper-Vをオンのままでも
Docker for Windowsを停止すればWSLのDockerは動くだろう >>676
そうだね。Vagrantを使う方法もある。けど、WSLだけで動かしてみたい。
お手軽だし。 関係ないけどhyperVは他の仮想化と共存できないのがウザいよな >>679
Docker ToolboxはVagrantじゃないぞ。VirtualBoxを使う
Docker ToolboxならDocker for Windowsとそう変わらないはずだけど
>>680
Vagrantがね。HyperVでもvagrantは使えるけど
VirtualBoxと組み合わせてたからなぁ
VagrantとVirtualBoxのVBoxManage.exeを組み合わせた
個人的用のスクリプト書いてたんでちょっと困った
今はWSLできたんでVagrantの必要性は減ったんだけど HyperVって本当にハイパーバイザ型なんだよね?
OSの下にハイパーバイザがいるんだよね?
昔Xenで特殊なドライバが必要だったりとか
えらく苦労したんだがWindowsのHyperVは
ハイパーバイザを使ってる感じが全くしなくて不思議だ Hyper-Vも専用ドライバが必要だけど、
Windowsは自前で持っているし、Linuxも随分前から対応しているので。
Hyper-V用のドライバのソース提供をMicrosoftの侵略!!とか言って騒いでたし GPUドライバもXen用が必要だった記憶があるんだが
Xen用カーネルはまあLinuxだし仕方ないけど そもそも「WSLでdockerが動くらしい!やってみよう!」が趣旨だろうから違うツール使えってのはナンセンスだろう。
WSLっておもちゃで遊んでるだけなんだから。 動くだけで満足するなら遅くても問題ないでしょ?
俺は技術的な大きな問題は解決したからあとはWSL全体を含めたチューニングだけ。
WSL使うのが開発の主流になるのは時間の問題だなって考えてるよ
今すぐ実用的に使いたいならDocker for WindowsかDocker Toolboxを使う
あとはMS頑張って!って思ってるよ 俺もWSLの完成度が上がっていくと嬉しいけど、仕組み上dockerよりもいい物があるとは思うけどね、並行して2この環境を持てるとか。
WSLは今までと仕組みが違うから逆にWSLだからできることが見つかりそうな気がする。
ネイティブAPIとwindowsAPIの区別は完全じゃないから機能的に難しいものは絶対にあるよ。 pythonとかnodeが満足に動くだけでいいと思うんだけどなあ >>688
並行して2個の環境を持つのは仮想マシンでできるじゃない
WSLだからできることっていうのは、Windows上でLinuxアプリを動かせることだよ
一つのOSでできることっていうのが大きな違い >>691
そんなことはわかってる。WSLでdockerって発想はナンセンスだからWSLでディストリを複数持つとかでいいってこと。
WSLでできることはWindows上の仮想マシンでぜんぶできる。そんなことはみんながわかってるよ。 >>692
> WSLでdockerって発想はナンセンスだから
別にナンセンスだと思わないけど?
むしろWSLはWindowsに追加したLinux互換システムコールなわけで
Windowsそのものが持ってる機能の一つ。
WSL=Linux互換システムコール=Windowsの機能を呼び出すdockerは、
Windows用アプリとしてネイティブに動いてる状態なんだけど WSLでCore OSが動けば、Docker専用にすることも可能性としてはあるな。 今のWSLにはDockerを動かすに足るような信頼性はないんだよ。本物のLinuxとの互換性が低すぎて、入手したコンテナが正常に動いている保証が全然ない。それはnpmやpipやRubyGemsでも同じだ。
現代の開発では、企業製のソフトやディストロの公式パッケージだけを利用する時代は終わって、npmやpipやRubyGemsといった無数の作り手による無数のパッケージが必要とされるようになった。
WindowsにはCygwinがあるがLinuxとの互換性が低く、これらの作り手はCygwinを動作保証の対象にするのを嫌がり、Cygwinはどんどん没落していっている。
そこでMSはnpmなどを動かすプラットフォームとしてWSLを出したわけだが、現状はどう考えてもベータ水準以下で、よくMSはこれを正式版扱いにしたもんだと呆れる。
まあ将来はまともなプラットフォームになりうるかも知れんが、現状はただのおもちゃだ。ディストロの公式パッケージが豊富に存在しているCygwinの方がまだ実用性がある。 >>693
>linux互換システムコール
新しい言葉作んな。互換レイヤーだ。
WSLはWindowsが持ってるネイティブAPI以上のことはできないからlinuxの代わりになることは原理的に無理。
dockerはOSの基盤になるようなシステムコールを使うからWindowsサブシステムと共存できない。
だから管理者権限が必要であったりするんだ。
WSLに他の新しい仕組みを付け足せばできるかもしれんが、夢を見すぎだ。 そもそもWSLでdockerが動くなら互換レイヤーの上でlinuxが動くんだからWSLをlinuxコンテナ化すればいい。 互換性についてはCreators Update時点でのデータはあるな。1804のデータって何処かになりんだろうか?
https://blogs.msdn.microsoft.com/wsl/2017/04/11/testing-the-windows-subsystem-for-linux/
System Calls
Passing 744
Failing 93
Unimplemented 171
Skipped 102
Total 1110
Pass % (not including unimplemented) 88.88%
Pass % (including unimplemented) 73.81%
Filesystem
Of the failing filesystem tests the majority are due to missing support for the rt_sigqueueinfo system call.
Passing 52
Failing 9
Total 61
Pass % 85.24% >>659
17704以降ならwslconfig /terminate linuxがそのまま動くversionboxやvmでもういいや 変換ミス
バーチャルボックスね
ってかversionboxってあったんだな いやいや、半角入力で変換ミスはないだろw
暑さでやられてる? ミスぐらい自由にミスらせてあげればいいのに。ミスなんだし。 WSL自体がコンテナみたいなものなのにさらにその中にコンテナを作るのか >>712
システムコンテナとアプリケーションコンテナという考え方がある
システムコンテナはコンテナ技術を用いてシステムを作るもの
システムコンテナは仮想マシンに近くOSに相当するシステムを作り出し
作業者はこのシステム上にログインして作業する。
WSL(正確に言えばbashでログインした状態)はこれに近い
それに対してDockerはアプリケーションコンテナ
アプリケーション実行に必要な外部ライブラリをパッケージング
しただけで、アプリケーションをそのまま実行するのと意味的には等しい
作業者はデバッグのためにDockerコンテナに入ることはあるが
通常はDockerコンテナの上で作業したりはしない 実際dockerで配布されてるアプリケーションもあるしな。
でもWSLで動かないものがWSLのdockerで動くわけじゃないし、通常はWSLにアプリケーションをインストールすればいいと思うよ。 >>713
wslのシステムコンテナの本体はどこにあるの? >>716
コンテナはプロセスだよ。隔離された空間にあるだけのプロセス
だから本体は実行時にメモリに現れ終了したらなくなる
コンテナを作るためのUbuntuのイメージファイルって話なら
C:\Users\USERNAME\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
とかみたいだけど、これはWSLじゃなくて、Ubuntuのイメージファイルか
WSL(Windows Subsystem for Linux)自体はサブシステムであってコンテナじゃない。
サブシステムを提供するためのファイルはC:\Windows以下の何処かにあるだろうけど、
やっぱりWSLで作られるLinux環境はプロセスとしか言いようがないな >>717
ってかドッカーやらのコンテナって仮想マシンとは違うとかよくいわれるけど
windowsとmacで動いてるやつは裏で仮想マシンまわってるだけだろ? >>718
DockerはLinuxカーネルで動くものです。
WindowsとMacのことは一旦忘れましょう。
Dockerは仮想マシンではありません。
実際に仮想マシンは使いません >>720
グロ
死体画像
うpってんじゃねーぞゴミカス! WSLはサーバーサイドアプリをインストールして使えるのが最大の強みだと思うわ。
もちろんlocalhostでだけど。
Windows立ち上げてるときだけ使えるサーバー環境。
gitbucket、ampache、cloud9、等々 サーバー環境作るならdocker でない?
WSLはフロントエンド環境。 >>724
開発するならdockerがいい。サーバーアプリをただつかうだけならWSLで十分、常駐させても問題ないレベル。 I/O周りが遅すぎて開発に使うのやめてプレゼン用に使ってたけど、
先日npm installでセットアップ中にカレントディレクトリ以下のファイルの
90%ほどをぶっ壊してくれて、上位にあった~/.zsh_historyの一部まで
バイナリで書き込まれる惨事
dockerへ出戻り Dockerを開発環境に使ってるの?
あれ開発環境にはいまいちじゃない?
パッケージングにはいいと思うけど IDEとかの開発環境をまとめたdockerなら全然あるし、使える。 >>730
IDEでDocker使うんか?
Vagrantみたいに? やったことないけどCloud9をWSLで使うこともできるらしい。
Dockerでやったほうがいいけど。 >>732
横からだけど、例えばWeb開発なら開発からテスト配布まで、dockerでできる。cloud9とかを入れておいて、ブラウザから開発する。 >>734
Cloud9をサービスとして起動できるDockerを使ってローカルで開発と言うこと?
最近はそんな感じなのか
Cloud9使ったことないけど便利なのかなぁ
その組み合わせの利便性によってはDockerを見る目がまた変わるわ 仮想化も組み合わせによって色々面白いことできるねぇ
ブラウザから使えるideかぁ
ちょっと興味出てきた わざわざローカルにcloud9入れて使ってるやついるのか?
名前の通りクラウドで使うためのものやろあれ 俺WSLにcloud9入れて使ってるけど、単純にsshクライアントもいらなくなるし、Windowsのubuntu窓使わずに済むし幸せ。 >>735
遅レスだけど、gitとweb環境とcloud9入りのdockerで開発するってこと。
別にエディタはcloud9じゃなくてもいいけど、1つの窓でエラーログ見るコマンドも打てるし便利でしょ。
特に少数複数人で開発する時にPCが違ってもgitリポジトリを紐づけたdockerファイルを共有して、ブランチをpullすれば開発環境が整う。キモはcloud9じゃなくてgitなんだけど、cloud9ならブラウザ動けばみんな同じコーディングができるので。
基本的にローカルは汚さずに、万一dockerが壊れてもgit最新に戻せる。
開発からテスト、dockerファイルをいじって、配布まで、できる。
むしろ現場でdockerが流行るのはこのおかげ。
データベースも小さいのならgitに入れちゃえ。 WSLにcloud9入れるのはマシンスペックが足りないPC向け。
dockerをWindowsで動かすには結局仮想化するので、スペックを分けなきゃいけない。これができないからWSLが不完全でも使う層が出てくる。docker動かせるならそっちのほうがいい。 環境を汚してもいい鯖持ってるならWSLもdockerもなくていい。
dockerはあってもいい。 WSL、forkの速度あがらないかなー
OSの基本部分に関わるところだから、
forkの機能を備えてないNTカーネルでは
エミュレートに時間がかかるんだろうけど
それでも10倍はひどすぎる。
おかげでforkさせないシェルスクリプトの
プログラミングノウハウが溜まっていくwww 愕然とする事実発覚。WSLはパイプを使うだけでも遅すぎる
これもforkが遅いからか?
[test1.sh]
foo() { :; }
i=0
while [ $i -lt 1000 ]; do
foo | foo
i=$((i+1))
done
--------
time ./test1.sh
real 0m8.005s
user 0m0.047s
sys 0m3.391s
[test2.sh]
foo() { :; }
i=0
while [ $i -lt 1000 ]; do
foo
foo # fooの呼び出し回数を合わせるため
i=$((i+1))
done
--------
time ./test2.sh
real 0m0.027s (殆どが起動時間)
user 0m0.000s
sys 0m0.000s ちなみにLinuxで同じことをやったら
[test1.sh]
real 0m0.281s
user 0m0.285s
sys 0m0.157s
[test2.sh]
real 0m0.006s
user 0m0.006s
sys 0m0.000s
WSLはLinuxの28倍
でもLinuxでも遅いっちゃー遅いな coLinuxならどうなんだろうね。WSLより速いのか? 速いんじゃないの? coLinuxのLinuxアプリはWindowsとは
隔離された空間で動いているんでしょ?
NTカーネル上でLinuxアプリを実行してるんじゃなくて、
NTカーネル上に作ったLinux空間でLinuxアプリを動かしてる
WSLはLinuxアプリは、NTカーネルから見たとき1つのアプリに見えるけど
coLinuxはNTカーネルから見たときcoLinuxアプリしか見えない。という認識 着実にチューニングが進んでいるw
上のベンチマークじゃなくて今作ってるやつだけど
パイプをなくしたら200msから100msに二倍になった
もう一箇所、サブプロセス作ってる所があるのでそこを直すと60msぐらいになりそう
大した差はないように思えるけど、コマンドの実行で300msかかると
つっかかりを感じて、200msだと実行結果が表示開始されるまで一瞬の待ちを感じて
100msだと実行したと同時に1行ずつ出力されいく感じになる。
50msだと結果全てが一瞬で表示される感じになる
使い方によっても何度も実行する部分だからできる限り早くしておきたい。
Linuxだったこれがパイプ使っていても17ms
なくしたら8msなんだけどな >>747
ksh で約2倍高速化(bash比)w ■ このスレッドは過去ログ倉庫に格納されています