bash: docker-machine: command not found(Windows 10 Home)と msysGit、 msys2、 Cygwin とは関係ない

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を導入する場合、 

  • Docker for WindowsHyper-vで使う場合)
  • Docker Toolbox(Virtual-boxで使う場合)

と、仮想環境によって変わってきてしまうようですね。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 デーモンは Linux 固有の kernel 機能を使う為、Windows 上で Docker をネイティブに実行できません。そのかわり docker-machine を使い、仮想マシンVM)の作成と接続が可能です。このマシンは Linux仮想マシンであり、自分の Windows 上の Docker ホストとなります。

要するに、Dockerを使いたかったら、Linux環境を用意してくれ~、ということだと思います。

ドキュメントにもあるのですが、Windowsの場合ちょっとややこしい感じになってます。

LinuxのDocker構成

f:id:ts0818:20170526134558p:plain

WindowsのDocker構成

f:id:ts0818:20170526134554p:plain

そう!Windowsは、Dockerクライアントが はみだし刑事情熱系 ばりに、Dockerホストの外側に飛び出てしまってるようです、異端児ですぞ。(Mac OS Xでも状況は同じ様でした、失礼いたしました。)

 

まずは、仮想マシンVM

兎にも角にも、Windowsの場合は仮想マシンを作成してあげないことには、Dockerコンテナが使えないみたいです。

Windows 10 Homeの場合、Hyper-vが使えないので、 

  1. CPU が 仮装化技術 をサポートしていること、BIOS の設定で仮想化をサポートしていること、Windows によって認識されていることを確認します。

は、特に必要ないのかな。とりあえず、OSが64bitかどうかだけ確認で大丈夫かと。

 

Dockerツール

WindowsでDockerツールを使うには、2つの方法があるようです。

  1. Docker Quickstart Terminal から使う
  2. コマンドプロンプトやGit BashWindows for Git)、Cygwin(git導入)などから使う

1. の場合、

仮想マシンがない場合は、defaultという仮想マシンを用意してくれるみたいですね。

2. の場合(コマンドプロンプトを使う例のようです)、

  1. コマンドプロンプト(cmd.exe)を起動します。

docker-machine コマンドは環境変数 PATH の中にある ssh.exe を必要とします。この .exe は MsysGit の bin フォルダにあります。

  1. 環境変数 %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

f:id:ts0818:20170526143437j:plain

sh.exe っちゅうのはあるけど...。インストールされてる場所がC¥Program Files(x86)でないのも気になりますね...。 

 

WindowsでGitを使うには

CUIでは、

など、様々なものがあるようです。 

⇩  下記サイトが詳しいです。

Windows環境でGitを使う

⇩  また、Git for Windowsはバージョン2系で大幅に仕様が変わったようです。

Mingw-w64/MSYS2 を入れなくても Git for Windows で間に合うみたい - 檜山正幸のキマイラ飼育記

Windows環境でのgitまとめ(2016.8)

バージョン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に追加します。

  1. $Git\cmd
  2. $Git\mingw64\bin
  3. $Git\usr\bin

考えるのが面倒なら、設定を変えて再インストールしてしまうのが一番手っ取り早いです。

Mingw-w64/MSYS2 を入れなくても Git for Windows で間に合うみたい - 檜山正幸のキマイラ飼育記

  

関係ないけどWikipediaさん、CUIの説明、違いを説明して欲しいっす。 

キャラクタユーザインタフェース (character user interface, CUI)

キャラクタベースユーザインタフェース (character-based user interface, CUI)

コンソールユーザインタフェース (console user interface, CUI)

コマンドラインインタフェース (command line interface, CLI)

キャラクタユーザインタフェース - Wikipedia

 

⇩  こっちも全然関係ないけど、MicrosoftもGit導入したとか

MicrosoftはWindowsの開発にGitを使う、そのための仮想ファイルシステムGVFSをすでに開発済み | TechCrunch Japan

Microsoft、Windowsの開発におけるGitの活用状況を説明 | マイナビニュース

 

Git for Windowsを入れなおす

もう、ユーザー環境変数も全滅してしまったことですし、この機会にGit for Windowsをまっさらな状態にしていこうかと。 

伝家の宝刀、『プログラムのアンインストール』実行!

f:id:ts0818:20170526152504j:plain

だが、しかし、

f:id:ts0818:20170526152501j:plain

消しきれてない!!!!

C:¥Program File¥Git¥bin¥nkf.exe、なんじゃろ、このファイルは...思い出しました、なんか日本語文字化け対策のためのもんじゃった。残しておいても問題ないじゃろ。

WindowsにGitをインストールする手順について

 

ということで、あらためて、Git for Windowsを導入してまいります。 

Gitのサイト(Git - Gitのインストール)からだと、

f:id:ts0818:20170526164628j:plain

なぜか、32bit版のGit for Windowsインストーラーが自動でインストールされるっぽいという謎仕様。

f:id:ts0818:20170526164635j:plain

Git for Windowsのほうからだと、64bit版のインストーラーが自動でインストールされるようです。

f:id:ts0818:20170526164631j:plain

で、『Git-2.13.0-64-bit.exe』を実行しました(おそらく64bit版)。『Next』選択。

f:id:ts0818:20170526170921j:plain

デフォルトのインストール場所はC¥Program Files¥Git、変更せずこのまま『Next』を選択。

f:id:ts0818:20170526170918j:plain

 デフォルトの状態で『Next』しました。

f:id:ts0818:20170526170914j:plain

 デフォルトの状態で『Next』しました。

f:id:ts0818:20170526170911j:plain

 デフォルトの状態で『Next』しました。

f:id:ts0818:20170526170908j:plain

 

企業等でTeam Foundation ServerWindowsサーバー/IISでGitリポジトリサーバーを運用していて、そこへのアクセスにカスタムの認証局に発行された証明書が必要な場合、特にその証明書がADで配布されている場合には必ず後者を選択します。

私家版 Git For Windowsのインストール手順 | OPC Diary

個人で使う場合は、デフォルトで問題なさそうなのでそのまま『Next』。 

f:id:ts0818:20170526171008j:plain

ここは、前の会社の先輩にも教えてもらったのですが、一番下にチェックをするのが良いようです。改行問題はいろいろ厄介です。

f:id:ts0818:20170526171005j:plain

自分はConEmuを使っているので、一番下にチェックしました。

f:id:ts0818:20170526171000j:plain

ここはデフォルトのままにしました。『Install』選択。

f:id:ts0818:20170526170956j:plain

インストールが始まります。 

f:id:ts0818:20170526170952j:plain

⇩   下記サイトを参考にさせていただきました

私家版 Git For Windowsのインストール手順 | OPC Diary

 

インストールが終わったんですが....

f:id:ts0818:20170526174058j:plain

結局、 Git¥bin¥ssh.exe なんてファイルはないっすね。そもそも、MsysGitのbinフォルダ無い...というか、Git for Windowsはバージョン2系からMsys2になってるらしいし。

f:id:ts0818:20170526174225j:plain

とりあえず、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 もセットされなかったかも?)。

Windows 10 に Docker Toolbox をインストールし、Docker コンテナを実行する

Docker Toolboxインストール時も、ユーザー環境変数にいろいろ追加されてるんじゃ?そして、msysGitも勝手にインストールされるみたい(Msys2にパワーアップはできんのかしら?)ということで、Docker Toolboxのアンインストール&再インストール! 

ユーザー環境変数にDocker Toolboxが追加されました!(ただ、再インストールの前に自分で同じようにユーザー環境変数を追加してみましたが、駄目だったんでDocker Toolbox自体を再インストールしました。) 

※C:\Users\ユーザー名\.docker のファイルも削除しといたほうが良いかもです。

⇩  フォルダが消せない場合、バックグラウンドでプロセスが稼働してるかも

Windowsで「別のプログラムがこのフォルダーまたはファイルを開いているので、操作を完了できません。」と表示されて削除やリネームできない場合の対処方法 

f:id:ts0818:20170526202154j:plain

docker関連のコマンドが戻ってきました! 

f:id:ts0818:20170526215051j:plain

いや~、今回もハマりにハマってしまいましたが、これでdockerを使う準備ができました。Windowsの場合、Vagrantとdockerを使う場合は、Vagrant仮想マシンを立てて、その仮想マシンの中でdockerコンテナを作っていく感じなのかな?

docker-machine ls でVagrantで作成した仮想マシンが表示されないところを見ると、仮想マシンの扱いがVagrantとDockerでそれぞれ異なってるっぽいですね。

Vagrantは、

Vagrant(ベイグラント)は、FLOSS仮想開発環境構築ソフトウェア[1]VirtualBoxをはじめとする仮想化ソフトウェアやChef英語版Salt英語版Puppetといった構成管理ソフトウェアのラッパーとみなすこともできる。

Vagrant (ソフトウェア) - Wikipedia

って言ってるけど、ラッパーする仮想化ソフトウェアにDockerは含まれないですかね?いまいち、 どういう構成が良いのか謎ですが、VagrantとDockerは別々の道を歩んでいくということですかね。

⇩  あ...でも下記サイトによるとやっぱVagrantで管理?

dockerとvagrantの違い言える?新人エンジニアでも分かった気になれる俺流まとめ - This is a Pen

⇩  でも、Vagrantのメリットほとんど無いって言ってる人も

1コマンドで作った。Dockerで開発環境を構築する方法 | SiTest (サイテスト) ブログ

もう、分から~ん。 

 

Windows — Docker-docs-ja 1.13.RC ドキュメント