WP-CLIをインストールした際に、ユーザー環境変数が根こそぎ全滅した、そんな日もありました。ConEmu(x64)を起動し、Git bash からdockerで仮想マシンの様子を拝見しようとして、
docker-machine ls
結果は、
bash: docker-machine: command not found
What? Are you kidding me? いや~、つい英語になっちゃいましたが、いやいやいや!前まで普通にdocker-machineコマンド使えてましたから~。で、Dockerの公式サイトをチェケラッチョ(もはや、死語かな、年代がバレますね。)
結論から、ユーザー環境変数が消えたのがまずかったみたいです。
・Windows 10 に Docker Toolbox をインストールし、Docker コンテナを実行する
・Windows管理者のためのDocker入門:無償の「Docker for Windows」で手軽にLinuxコンテナを利用する (2/2) - @IT
⇩ ユーザー環境変数とシステム環境変数については下記サイトが良い感じです
・windowsの環境変数はなんで別けてるの? - This is a Pen
WindowsでDockerを使う場合
そもそも、WindowsでDockerを導入する場合、
と、仮想環境によって変わってきてしまうようですね。VVV、VCCWなどは、Virtualboxで動かす感じなので、Docker Toolboxを使う感じでしょうか?
Hyper-vが、Windows 10 Homeでは使えないので、自分はDocker Toolboxです。
ちなみに、Hyper-vとVirtual-boxの相性が宜しくないようで、共存は難しそうです(使う場合は、どちらか片方にしたほうが良さそうです。)
Docker Toolboxの場合
ドキュメントによりますと、
- Docker Machine を動かす
docker-machine
バイナリ - Docker エンジンを動かす
docker
バイナリ - Docker Compose を動かす
docker-compose
バイナリ - Docker GUI の Kitematic (カイトマティック)
- Oracle VM VirtualBox(バーチャルボックス)
など、いろいろインストールされるわけですが、何故、これらが必要かというと、
docker-machine
を使い、仮想マシン(VM)の作成と接続が可能です。このマシンは Linuxの仮想マシンであり、自分の Windows 上の Docker ホストとなります。要するに、Dockerを使いたかったら、Linux環境を用意してくれ~、ということだと思います。
ドキュメントにもあるのですが、Windowsの場合ちょっとややこしい感じになってます。
LinuxのDocker構成
WindowsのDocker構成
そう!Windowsは、Dockerクライアントが はみだし刑事情熱系 ばりに、Dockerホストの外側に飛び出てしまってるようです、異端児ですぞ。(Mac OS Xでも状況は同じ様でした、失礼いたしました。)
まずは、仮想マシン(VM)
兎にも角にも、Windowsの場合は仮想マシンを作成してあげないことには、Dockerコンテナが使えないみたいです。
Windows 10 Homeの場合、Hyper-vが使えないので、
は、特に必要ないのかな。とりあえず、OSが64bitかどうかだけ確認で大丈夫かと。
Dockerツール
WindowsでDockerツールを使うには、2つの方法があるようです。
1. の場合、
仮想マシンがない場合は、defaultという仮想マシンを用意してくれるみたいですね。
2. の場合(コマンドプロンプトを使う例のようです)、
- コマンドプロンプト(cmd.exe)を起動します。
docker-machine
コマンドは環境変数 PATH
の中にある ssh.exe
を必要とします。この .exe
は MsysGit の bin
フォルダにあります。
- 環境変数
%PATH%
に追加するコマンドを実行します。
set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"
『bash: docker-machine: command not found』の原因は、環境変数にパス が通っていなかったということでしょうかね、ユーザー環境変数がすべて消えてしまったせいで、Git¥bin¥ssh.exeが使えないようになってたということですかね。
じゃあ、パス通せば万事解決っちゅうことですかね。
C:¥Program Files¥Git¥bin¥ssh.exeなんてないけど?
無い!そんなファイルは存在しないのだが?そもそも、自分の場合、Gitがインストールされている場所が、もうなんかおかしい感じなのだが。ちなみに、Windows for Gitで入れてるのですが、前に、ChocolateyでWindows for Gitのアップデートみたいなこと試したのがまずかったか....影響範囲がブラックボックス過ぎる。
⇩ なんかChocolateyあんまり宜しくないみたいですね...
・OneGetとChocolateyでアプリ管理、はしないことにした | kanonjiのブログ
C¥Program Files¥Git¥bin
sh.exe っちゅうのはあるけど...。インストールされてる場所がC¥Program Files(x86)でないのも気になりますね...。
WindowsでGitを使うには
CUIでは、
など、様々なものがあるようです。
⇩ 下記サイトが詳しいです。
⇩ また、Git for Windowsはバージョン2系で大幅に仕様が変わったようです。
・Mingw-w64/MSYS2 を入れなくても Git for Windows で間に合うみたい - 檜山正幸のキマイラ飼育記
バージョン1系のGit for Windowsは、msysGitで開発されていたようですが、2系になってMsys2/mingw-w64ベースとなった今、Git for Windowsはイケてるようです。
厳密には、Msys2/mingw-w64とGit for Windowsは違うので、混ぜないほうが良いみたいです。
Git for Windowsは、MSYS2+αなのです。「+α」部分はもちろんWindows向けに調整されたgitコマンドです。MSYS2のコマンド群(bashやlsなど)は全て$Git/usr/binに入っています。
何もしなくていい割にはゴチャゴチャしているので事情をまとめておきます。
- cmd.exeやPowerShellからbash, lsなどのMSYSコマンドを使いたい場合: Windowsの環境変数PATHに$Git\usr\binを加える。
- ショートカットアイコンやフルパスでbashを起動して使う場合: 起動するプログラムとして$Git\usr\bin\bash.exeを指定する。/etc/profile と ~/.profile を実行させるには --login オプションを付ける。
- gitを実行するためには、$Git\cmdがPATHに入っている必要がある。
なお、Git for Windowsをインストールするとき、"Adjusting your PATH environment"のダイアログにおいて"Run Git and induced Unix tools from the Windows Command Prompt."を選ぶと、gitと(bash自身を含む)MSYSコマンド群を使えるように設定してくれます。次のディレクトリをこの順でPATHに追加します。
- $Git\cmd
- $Git\mingw64\bin
- $Git\usr\bin
考えるのが面倒なら、設定を変えて再インストールしてしまうのが一番手っ取り早いです。
Mingw-w64/MSYS2 を入れなくても Git for Windows で間に合うみたい - 檜山正幸のキマイラ飼育記
関係ないけどWikipediaさん、CUIの説明、違いを説明して欲しいっす。
キャラクタユーザインタフェース (character user interface, CUI)
キャラクタベースユーザインタフェース (character-based user interface, CUI)
コンソールユーザインタフェース (console user interface, CUI)
⇩ こっちも全然関係ないけど、MicrosoftもGit導入したとか
・MicrosoftはWindowsの開発にGitを使う、そのための仮想ファイルシステムGVFSをすでに開発済み | TechCrunch Japan
・Microsoft、Windowsの開発におけるGitの活用状況を説明 | マイナビニュース
Git for Windowsを入れなおす
もう、ユーザー環境変数も全滅してしまったことですし、この機会にGit for Windowsをまっさらな状態にしていこうかと。
真っ新な
一点の曇りもなく ・ 透き通った ・ 曇りのない ・ 明鏡止水の ・ 澄み切った ・ 澄みきった ・ 澄みわたった ・ 透明な ・ 澄んだ ・ 曇りがない ・ ピュアな ・ 純粋な ・透きとおるような ・ 清らかな ・ まっさらな ・ 汚れのない ・ 混じりけのない ・ 清澄な ・ 濁りのない ・ 濁りがない ・ 清洌な ・ 透明感のある ・ 透明感が漂う ・ 透明感の漂う ・ 澄み渡った ・ 一点の曇りもない ・ 清純な ・ 清く ・ 清く美しい ・ 清い ・ 清潔な ・ 清い ・ 清らかな ・ きれい ・ キレイ ・ クリーン
伝家の宝刀、『プログラムのアンインストール』実行!
だが、しかし、
消しきれてない!!!!
C:¥Program File¥Git¥bin¥nkf.exe、なんじゃろ、このファイルは...思い出しました、なんか日本語文字化け対策のためのもんじゃった。残しておいても問題ないじゃろ。
ということで、あらためて、Git for Windowsを導入してまいります。
Gitのサイト(Git - Gitのインストール)からだと、
なぜか、32bit版のGit for Windowsのインストーラーが自動でインストールされるっぽいという謎仕様。
Git for Windowsのほうからだと、64bit版のインストーラーが自動でインストールされるようです。
で、『Git-2.13.0-64-bit.exe』を実行しました(おそらく64bit版)。『Next』選択。
デフォルトのインストール場所はC¥Program Files¥Git、変更せずこのまま『Next』を選択。
デフォルトの状態で『Next』しました。
デフォルトの状態で『Next』しました。
デフォルトの状態で『Next』しました。
企業等でTeam Foundation ServerやWindowsサーバー/IISでGitリポジトリサーバーを運用していて、そこへのアクセスにカスタムの認証局に発行された証明書が必要な場合、特にその証明書がADで配布されている場合には必ず後者を選択します。
個人で使う場合は、デフォルトで問題なさそうなのでそのまま『Next』。
ここは、前の会社の先輩にも教えてもらったのですが、一番下にチェックをするのが良いようです。改行問題はいろいろ厄介です。
自分はConEmuを使っているので、一番下にチェックしました。
ここはデフォルトのままにしました。『Install』選択。
インストールが始まります。
⇩ 下記サイトを参考にさせていただきました
・私家版 Git For Windowsのインストール手順 | OPC Diary
インストールが終わったんですが....
結局、 Git¥bin¥ssh.exe なんてファイルはないっすね。そもそも、MsysGitのbinフォルダ無い...というか、Git for Windowsはバージョン2系からMsys2になってるらしいし。
とりあえず、ConEmuでGit Bashを開いて
set PATH=%PATH%;"c:\Program Files\Git\bin"
試してみるが、
『bash: docker-machine: command not found』 というか『bash: docker: command not found』、dockerコマンドも無い...。そうなんです、冒頭で述べた通り、ユーザー環境変数が消えたのが駄目でした。
Docker コマンドの PATH がユーザー環境変数にセットされていたので、自分でシステム環境変数にセットしておきました。また、MSYS-Git を独自にインストールしてあったのですが、それがアンインストールされてしまい、別物がインストールされてしまったので、自分でセットアップしている MSYS-Git を再度インストールしなおしました(Gitのコマンドの PATH もセットされなかったかも?)。
Docker Toolboxインストール時も、ユーザー環境変数にいろいろ追加されてるんじゃ?そして、msysGitも勝手にインストールされるみたい(Msys2にパワーアップはできんのかしら?)ということで、Docker Toolboxのアンインストール&再インストール!
ユーザー環境変数にDocker Toolboxが追加されました!(ただ、再インストールの前に自分で同じようにユーザー環境変数を追加してみましたが、駄目だったんでDocker Toolbox自体を再インストールしました。)
※C:\Users\ユーザー名\.docker のファイルも削除しといたほうが良いかもです。
⇩ フォルダが消せない場合、バックグラウンドでプロセスが稼働してるかも
・Windowsで「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません。」と表示されて削除やリネームできない場合の対処方法
docker関連のコマンドが戻ってきました!
いや~、今回もハマりにハマってしまいましたが、これでdockerを使う準備ができました。Windowsの場合、Vagrantとdockerを使う場合は、Vagrantで仮想マシンを立てて、その仮想マシンの中でdockerコンテナを作っていく感じなのかな?
docker-machine ls でVagrantで作成した仮想マシンが表示されないところを見ると、仮想マシンの扱いがVagrantとDockerでそれぞれ異なってるっぽいですね。
Vagrantは、
Vagrant(ベイグラント)は、FLOSSの仮想開発環境構築ソフトウェア[1]。VirtualBoxをはじめとする仮想化ソフトウェアやChef(英語版)やSalt(英語版)、Puppetといった構成管理ソフトウェアのラッパーとみなすこともできる。
って言ってるけど、ラッパーする仮想化ソフトウェアにDockerは含まれないですかね?いまいち、 どういう構成が良いのか謎ですが、VagrantとDockerは別々の道を歩んでいくということですかね。
⇩ あ...でも下記サイトによるとやっぱVagrantで管理?
・dockerとvagrantの違い言える?新人エンジニアでも分かった気になれる俺流まとめ - This is a Pen
⇩ でも、Vagrantのメリットほとんど無いって言ってる人も
・1コマンドで作った。Dockerで開発環境を構築する方法 | SiTest (サイテスト) ブログ
もう、分から~ん。
・Windows — Docker-docs-ja 1.13.RC ドキュメント
今回はこのへんで。