Vagrantで開発環境を構築するために愛用していた『PuPHPet』。
終了してしまったのか、アクセスできなくなってしまった!
設定ファイルで、PHP等色々機能のバージョンを上げてみるも失敗するし…
仕方ないdockerに戻るか…
と思っていたら、友人が『WSL2』をオススメしてくれた。
WSL(Windows Subsystem for Linux)2。
ざっくり言うと『WSL2』はLinux仮想環境を作るためのもの。
Windowsに全く依存しない形でLinuxカーネルごと起動する。
だからwindows 10 homeにHyper-Vが入ってなくても関係ない。
そして今まで仮想環境をつくるために必要だったVirtualBox、VMWareが要らなくなる。
『Docker Toolbox』の『レガシー』でなくて、『Docker Desktop』が使える!
あと多分軽くなるんじゃない? 1個介さなくなるわけだしね!
便利そうこの上ないので、1回それを使ってみることにするまでの話。
※今まで使っていたVagrant環境が使えなくなります。戻せますが、慎重に!
基本的に機能を呼び出すには、画面下の『タスクバー』の『ここに入力して検索』(※虫眼鏡アイコン)を使う。
途中まで打ち込めば候補として出るので、これが一番手っ取り早い呼び出し方法かと思う。
※以下『検索』とする。
コマンド(CUI)でも出来るが、自分は基本GUI派。
面倒になればCUI使うかもしれないけど。
なので、GUIでの方法を記載しておく。
WSL2をインストールする
再起動を繰り返すから、やるなら時間あるときをオススメする。
残業代の出ない会社のPCに、退勤前にやるなんて以ての外!
Windows Update
『検索』にて『更新プログラムの確認』呼び出す。
『更新プログラムのチェック』をして『最新の状態です』になっていることを確認。
なっていなければ、せっせと更新する。
Windowsのバージョンを確認
『検索』にて『ファイル名を指定して実行』呼び出す。
『winver』→『OK』とし、出たバージョンを確認する。
もし『バージョン1909』だった場合、WSL2入っていないので先に進む。
作業領域の容量を開けておく
アップデートには10GB超程度の空き容量が必要らしい。
大概『Cドライブ』で、『20GB』程度空いていれば安心。
手動で更新ファイルをインストール
『Windows 10 のダウンロード』にアクセス。
※『検索』で『Windows10 更新アシスタント』と打ち込んでもアクセス出来る。
『今すぐアップデート』を押し『Window10Upgrade【省略】.exe』ダウンロードし、実行。
あとは流れに任せる。
インストール後、再度バージョンを確認するとバージョンが上がっていることが確認出来る。
※因みに2020年8月現在
アップデートは『Windows 10 May 2020 Update』
ファイル名は『Windows10Upgrade9252.exe』
インストールのバージョンは『バージョン2004』
になっている。
WSl2のCPU、メモリ割り当て
使っていて気づいたが、気兼ねなく遠慮なくメモリを食っていく。
なので自分は後から設定した。
WSL2では『[ユーザープロファイル]\.wslconfig』にWSL全体に関わる設定を書くそうだ。
コマンドで言うなら
%USERPROFILE%\.wslconfig
因みに『ユーザプロファイル』の位置は『C:\Users\【ユーザ名】』
インストールしたら用意される訳ではないので、新規に作成し、下記の内容で保存する。
[wsl2] memory=2GB processors=2
上記の場合軽量VMにCPU2コア、メモリ2GBを割り当てることになる例。ありがたい。
WSL2を有効化する前なら良いが、した後に設定した場合、設定後Windowsを再起動するとよろしい。
参考:Windows Subsystem for Linux 2(WSL 2)をセットアップしてみた | Developers.IO
wsl.conf と .wslconfig - roy-n-roy メモ
WSL2を有効化する
『検索』で『Windowsの機能の有効化または無効化』を呼び出す。
- 『Linux用Windowsサブシステム』
- 『仮想マシンプラットフォーム』
にチェックを入れ、再起動。
因みに下記コマンドでも同じこと。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
※この設定をすると『vagrant up』が出来なくなります。
使う場合は両方OFFにして、再起動してください。
※因みに『Docker Toolbox』の『レガシー』とであれば、Windowsの機能の有効無効関係ないので両方使うことが出来る。
カーネル コンポーネントの更新
仮想環境を起動したいところであるが、大概最初はWSL1になっている様子。
試しに『Windows PowerShell(管理者)』で『wsl --set-default-version 2』とか打ってみて
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
と出るようなら、確実にカーネルコンポーネントを更新対象。
『WSL 2 Linux カーネルの更新 | Microsoft Docs』にアクセス。
x64 マシン用の最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロードしてください。
から『wsl_update_x64.msi』をダウンロードし、実行すればOK。
WSL2を使う
基本的に『Windows PowerShell』を管理者権限で使って操作する。
タスクバー『スタート』の右クリックメニューから『Windows PowerShell(管理者)』で起動がオススメ。
以降はそこで操作する。GUIじゃないのが悔しい。
コマンドは基本的に『wsl --help』見ればいいかと。
WSL2 を既定のバージョンとして設定
新しいLinuxディストリビューションをインストールするとき、WSL2を既定のバージョンとして設定する。
wsl --set-default-version 2
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
と出た場合は、カーネルコンポーネントを更新してから、再度実行する。
OS(Ubuntu)を入れる
いつ入れてもいいのだけど、通常バージョンを変更した後(↑の項目)がオススメ。
『検索』から『Microsoft Store』を呼び出し、検索窓に入れたいOSを探す。
今回、自分は『Ubuntu 20.04 LTS』を入れることにした。
インストールされていなければ、『インストール』
済んでいれば『起動』になっている。
Ubuntu使ってみる/入ってみる
『検索』から『Ubuntu』と打ち込んで『管理者として実行』をクリック。
するとSSHしたみたいな感じで、Ubuntuに入っている。
dockerは基本的にここでした方が無難。
コマンド打ち込みをちょっとだけ楽にする
いちいちsudoすんのめんどい。そんな人用。
やり方は、初回起動時にユーザ名を確認されるのだが、そこを『root』て打ち込む。
再度入力を求められるが、無視して画面を閉じるだけ。
次回起動時、ちゃんと『root』でログインできてることが確認出来る。
参考:WSLのUbuntuの初期ユーザーをrootにする | skt workshop
WSLからWindowsへのアクセス:マウント
『/mnt/{ドライブ名}』でアクセスできる。
Cドライブなら『/mnt/c』、Dドライブなら『/mnt/d』
cd /mnt/c
とすれば、アクセス出来る。
マウントがオカシイ…
lsしたとき、あるはずのディレクトリがない!
そんなとき、PowerShellで下記コマンドを実行する。
wslconfig /t 【インストールしたOS】
今回は『Ubuntu-20.04』なので
wslconfig /t Ubuntu-20.04
Dockerコマンドが使えなくなっている
『Release file for ~ is not valid yet』と出る
WinSCP/SSHで操作する
両方ssh使えるようにする必要がある。
ss state all sport = :ssh
『WARNING: apt does not have a stable CLI interface. Use with caution in scripts.』
とか出たら入ってない。
※『netstat --tcp -a | grep ssh』としたいところだけど、現在は『ss』推奨らしい。
127.0.0.1だとは思いつつ、IPアドレスを確認してみる。
ip address show
※『ipconfig』としたいけど、現在は『ip』推奨らしい。
そして127.0.0.1である。
SSHインストールする
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config
して入った設定ファイルのパスワードログインを有効化
PasswordAuthentication yes
@todo ちょっと後回し
参考:Windows Subsystem for Linuxにssh接続する - Qiita
入れたOSを修復・リセットしたい場合
もし上手く動かなくなったりした場合、修復やリセットを試みるとよろしい。
user名、パスワードをセットしなかったとか色々、やりたいときもあるもの。
今回の場合は上記同様『Ubuntu』で記載する。
検索窓に『ubuntu』と打ち込むと、右側に入れたものの情報と項目が出てくる。
その中から『アプリの設定』をクリック。
出てきたその画面の下の方『リセット』という項目にあるボタンを押すだけ。
再度入れるときは『インストール』または『起動』の横『...』を押して、『自分のデバイスにインストールする』で入れ直すことが出来る。
wslのバージョン確認
そこで
wsl -l -v
を実行する。
例えば、下記の場合はバージョン2。
NAME STATE VERSION * Ubuntu-20.04 Stopped 2
StoppedとかRunningは、サーバの状態なので、バージョン変換は不要。
NAME STATE VERSION * Ubuntu-20.04 Stopped 1
こうなっているとwslのバージョンは1。
wsl2用ではないので、変換が必要。
wslがコマンドから動かない場合
前日動いてた『wsl -l -v』等が下記メッセージを出力し動かなくなった。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:
https://aka.ms/wslstore
リセットしたからかも知れない。
その場合、ストアの入れたOSの『…』押して『自分のデバイスにインストールする』を押しインストールし直すことで解決した。
削除してから『インストール』を繰り返してもダメで、デバイスにインストールをし直さなければ、ダメだった。
wsl2用にバージョン変換
wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
のあと
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。
が出れば完了。
カーネル コンポーネントを更新してないと、下記が出て実行出来ない。
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
カーネル コンポーネント更新後、再度変換を実行すれば問題ない。
もう1回下記を実行した場合、2になっていることが確認出来る。
wsl -l -v
Docker Desktopを入れる
基本的には『Docker Desktop for Mac and Windows | Docker』から、自分のOSに合うものを落として入れるだけでOK。
チェックは外さずにそのままにすること。
入れるPCにDocker Toolboxが入っている場合、インストールエラーになるので消しておく。
アカウントが必要になるので、作る必要があるが、インストールしながら作ればいい。
起動アイコンを右クリックし『Setting』
『General』の『Use the WSL 2 based engine』にチェックがついていること
『Resources』の『Enable integration with my default WSL distro』にチェックがついていることを確認すればOK。
インストール後『docker-desktop』と『docker-desktop-data』が出来ている。
使っていると大きくなるから、どうにかしたい場合は下記を参照するといいかと。
WSL2 Dockerのイメージ・コンテナの格納先を変更したい (WSL2のvhdxファイルを移動させたい) - Qiita
Docker for Macを使っていたら50GB位ディスク容量を圧迫していたのでいろんなものを削除する - Qiita
ポート原因のインストールエラー
起動後のチュートリアルをやった結果
多分下記のコマンドを実行したあたりで
docker run -d -p 80:80 docker/getting-started
下記メッセージが出て失敗終了することがある。
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
80ポート使うようなサーバプログラム動かしてないんですけど!?となった。
コマンドプロンプト『netstat -nao』と打ち込み、ポート一覧を取得。
アクティブな接続 プロトコル ローカル アドレス 外部アドレス 状態 PID TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4
他にも色々でるが今回はスルー。PIDの番号を覚えておく。
『タスクマネージャー』起動→『詳細』タブを選択。該当するPIDが、そのポートを使っているアプリとなる。
大概、そのPIDに該当するアプリケーションを削除するなり、ポート番号変えるなりで解決する。
ところが上記の場合、PID 4は『システムプロセス』である。
この場合は『Microsoft』系アプリが原因。
それ以外の詳細はわからない。正直そこまで書いてほしい。
今回、自分の場合は『World Wide Web サービス』が有効になっていることが原因だった。
しいては『.Net 拡張 3.5』が。
つまりは以前『Microsoft .NET Framework 3.5』をインストールしたことが原因の様子。
2020年現在『Microsoft .NET Framework 4.8』で、今回実行したアップデートに含まれているし、3.5同様に4.8の拡張項目もあるが、チェックは入っていない。
なので、3.5も消しても問題はないと思われる、多分。
対応方法としては
『検索』で『Windowsの機能の有効化または無効化』を呼び出す。
『インターネット インフォメーション サービス』→『World Wide Web サービス』のチェックを外し、再起動。
これでポート80は開放されて、dockerが動かせる。
参考:【Apacheが起動しない】System(PID:4)にてポート番号80を使用/Windows10 - marronブログ
因みに
docker run -d -p 80:80 docker/getting-started
は『-p ホストのポート80:コンテナのポート80』だから
docker run -d -p 8080:80 docker/getting-started
にして、アクセスするURLを
『http://localhost:8080/』または『http://127.0.0.1:8080/』
にしてしまえば、そもそも問題なかったりする。
まぁ、これはこれでCMSやFWによっては問題だったりするのだが…
dockerコマンドを使う
Docker Desktopをインストールしたした時点で『docker』『docker-compose』が使える。
インストール時のチュートリアル的なので、ちょっと動かして入るのだけど。
Dockerの使い方自体はこっちの記事にあるので、以下は観ずに移動して貰ってもOK
docker --version docker-compose --version
コレでコマンドが動くことは確認出来る。
まずは基本として『hello-world』
docker run hello-world
すると
docker images
でたくさん出来てしまったことが確認出来る。
気にしなくてもいいけど、不要と判断したら消してもOK。
docker ps -a
で見れる内容は、Docker Desktopの『Dashboard』から見る内容と同じ。
Ubuntuサーバを立ち上げてみる
docker run -it ubuntu bash
なんやかんや出たあと、サーバに入れた。
Docker DesktopのDashboardでも『ubuntu』があることが確認出来る。
『docker-compose.yml』が使えるようになった。ら、もう『Laradock』でいいかも…
docker使うための環境構築は出来た。
環境もチュートリアルのファイルをちゃんと読み、いじれば出来るのであろう。
と思って
コマンド実行時の位置『C:\WINDOWS\system32』以下にを見るも『docker-compose.yml』はなかった。
無いんかい!
どうやら『C:\Users\【ユーザ名】\getting-started』に以下がそれのようだ。
『docker/』で指定されることでここに行くのね。
内容はえらくシンプルな構成で、ファイル名.mdだねとか、それはいいのだ。
自分がやりたいことは、
・レガシー使っていたときに作成及び仕事で貰った『docker-compose.yml』を使い、仮想WEB環境を使うこと
・Vagrantの開発環境と同等のものを、Vagrantレベルで簡単に使うこと
なのである。
そこで自PC内にある『docker-compose.yml』を探してみたら、随分沢山文章量あるし、外部参照と思われる内容が多い。
と思っていたら、Laradockだった。
そう、仕事で使っていたのは、いつもLaradock。
しばらく使っていないということは、こういうことなのである。
そうだね、もうLaravelでなくてもLaradock使えばいいよね、ハハハ
そうじゃない人は、下記をご参照くださいということで完。
Docker(for Windows)で開発環境の構築を行う - Qiita
Docker for Windows を始めよう — Docker-docs-ja 19.03 ドキュメント
今さら聞けないDockerのはじめのはじめ – CodeAid(コードエイド)
コメント