Introduction
docker for windows が有償化されてしまったため、その代替手段の模索。
色々調べてみると、Minikube を使った方法で、docker エンジンを Windows に組み込めることがわかった。
やっていることは、docker for windows と同様、Hyper-V 仮想マシン上で docker エンジンを動かすだけで、その環境構築を Minikube 経由で行うということ。
この記事の前提は
- Windows 10
- VT-x または AMD-v が有効な CPU かつ BIOS で有効になっていること
How to get started?
Hyper-V と Hypervisor の有効化
既に有効ならスキップ。
管理者権限で起動した Powershell から下記を入力。
1 | $ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All |
それぞれインストール完了後、再起動を問われますが、全部終わったら再起動でいいと思います。
一度再起動。
Chocolatey のインストール
既にインストール済みならスキップ。
管理者権限で起動した Powershell から下記を入力。
1 | > Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) |
インストール完了後の確認
1 | > choco --version |
Minikube のインストール
Chocolatey からインストール。
管理者権限で起動した Powershell から下記を入力。
1 | $ choco install minikube |
インストール完了後の確認
1 | $ minikube version |
docker-cli のインストール
Chocolatey からインストール。
管理者権限で起動した Powershell から下記を入力。
1 | $ choco install docker-cli |
インストール完了後の確認
1 | $ docker version |
Hyper-V 仮想スイッチの追加
Minikube が仮想スイッチを介して、Hyper-V の仮想マシンにアクセスするために必要。
Powershell を管理者権限付きで起動。
まず、現在のネットワークアダプタ設定を取得。
1 | $ Get-NetAdapter |
この中から、外部に繋がっているネットワークの名前を記憶。
ここでは Wi-Fi とします。
次に、先程のネットワークを使って、外部ネットワーク の仮想スイッチを作成。
引数 --name
に指定する仮想スイッチの名前は自由。
一度ネットワークが切断されるかもしれないので注意。
1 | $ New-VMSwitch -name "Minikube ExternalSwitch" -NetAdapterName "Wi-Fi" -AllowManagementOS $true |
成功すると、Hyper-V マネージャー の 仮想スイッチマネージャー に、今追加した仮想スイッチが追加されているのがわかります。
なお、既に指定したネットワークアダプタが外部ネットワークとして使用されている場合はエラーになる。
Minikube の起動
コマンドプロンプトを管理者権限付きで起動。
後述しますが、PowerShell からの起動は不可です。
ここでは、仮想マシンの作成、起動を行われます。
引数 --hyperv-virtual-switch
には、先程作成した仮想スイッチの名前を指定。
1 | $ minikube start --vm-driver=hyperv --hyperv-virtual-switch="Minikube ExternalSwitch" |
start
コマンドのオプションは start を参照。
よくあるのが、
引数 | 意味 | 例 |
---|---|---|
–memory | メモリサイズの指定。単位 (b, k, m, g) と共に数字で指定。 | –memory 2048m |
起動後の確認
1 | $ minikube status |
注意1
重要なこととして、直接コマンドプロンプトを管理者権限で起動してください。
Windows 10 の場合、Windows メニューを右クリックして表示される一覧には Windows PowerShell (管理者) があり、そこから cmd
でコマンドプロンプトに切り替えることもできますが、この方法では失敗します。
管理者権限付きの PowerShell からコマンドプロンプトを起動した場合は、
1 | $ > minikube start --vm-driver=hyperv --hyperv-virtual-switch="Minikube ExternalSwitch" |
注意2
プロキシ環境では、自マシンへのアクセスに対して、プロキシを経由しないようにする必要がある。
つまり
1 | setx HTTP_PROXY http://xxx.xxx.xxx.xxx:xxxx |
のように、プロキシと除外設定をつけておく。
start
で動かない場合は minikube logs -f
で状況を把握できる。
ダッシュボードの起動
1 | $ minikube dashboard |
サンプルの実行
1 | $ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 |
Minikube の停止
1 | $ minikube stop |
docker の設定
現時点で、Hyper-V 上の仮想マシンで docker エンジンが動いているので、docker-cli にその旨を設定してあげる。
管理者権限で起動したコマンドプロンプトで下記を入力。
1 | $ minikube docker-env |
上記の値のうち、下記をホストマシンに設定する。
1 | $ setx DOCKER_TLS_VERIFY 1 |
これにより、docker-cli が docker エンジンを認識するようになる。
1 | $ docker version |
当然、コンテナも起動する。
1 | $ docker run hello-world |