windows10 homeだけどDockerを使う(VBox)

Vagrant(PuPHPet)をご愛用している自分だけど、開発環境の共通化を強いてはdockerを要望されることもある。
なので「使ってみよう!」はいいけど、自分の端末は『windows10 home』。
そう、『Hyper-V』のない『windows10 Home』なのだ!

「プログラマは当然『Professional』!」は無視致す。
そんな挑発乗るなら既にMacユーザだ。
なので意地でもwindows 10『Home』で対応する方法をメモしておく。

info
Windows 10 home
Docker version 18.03.0-ce, build 0520e24302 (docker --version)

Homeでは『Hyper-V』の代わりにvagrantでお馴染み『Oracle Virtual Box』を利用する『Docker Toolbox』の『レガシー』を使う。

2020年現在はWSL2使った方法が出たので、こっちをオススメする。
こっちを使いたい人も要るだろうから残してはおく。


今回は前提条件として
Dドライブ直下に、今後laravalプロジェクトを複数作成することも想定し、laraval専用ディレクトリとして『laraval.host』、その下に今回作成するlaradockプロジェクト『test_pj』を作るとする。
要するに『D:/laraval.host/test_pj』

インストール

下記を参照ください。
全部解るよ、親切!
windows 10 home で docker を導入するメモ - Qiita

「既にVirtual Boxあるけど、合わせた方がいいのかなぁ」なんて軽い気持ちでチェック外さずに入れるとVirtual Boxマネージャが使えなくなって泣く泣く本家で落とし入れ直すことになるので注意。

1回『Docker Quickstart Terminal』を起動して魚が出たらOK。
あとは『Docker Quickstart Terminal』を開いた時点でVBoxのdefaultサーバが立ち上がるようになるよ便利。

docker-machine.exe stop

して画面を閉じる。
『Oracle Virtual Box』で『default』サーバが出来ていることが確認できたらインストール成功。

容量増やす

『Oracle Virtual Box』で『default』を選択→『設定』→『システム』
にて『マザーボード』の容量を初期値『1024MB』から増やす。
1024MBなどlaradockが入りもせぬ…
とりあえず『2048MB』にしておけばいいと思うけど、そこは各々個人の裁量でどうぞ。

ファイル共有

仮想環境内で作成・操作した物をwindowsで使えないのは凄い不便!
windows側のエディターで編集したいし、管理したい。
そんなときに使うのが『ファイル共有』

通常ではDocker側だけで解決出来る。
しかしWindows10 home上のファイルを共有する場合は、VirtualBox機能を使って仮想マシン(default)にイチイチ場所を提供する必要がある…ツライ。

詳しくは下記を参照!
Docker toolbox on windows マウント:Dockerコンテナの中でホストのフォルダを見たい - Qiita

ファイル共有先が解らない

貰ったDockerファイルによっては自動マウント設定があったりする。
先程書いた通り、そんな設定があっても、windows 10 homeだと『VirtualBox』を設定しないと共有出来ない。
でも設定しようにも「共有ファイル先がわからない!」という状態になる。

そんなときはまず、『Docker Quickstart Terminal』を起動し、

docker-compose up -d nginx workspace

で1回対象コンテナを起動する。

下記コマンドで、現在起動中のコンテナ情報を取得する。

docker ps

と打ち込むと下記のような感じで出る。

CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                                        NAMES
6fb2c7674d3c        laradock_nginx       "/bin/bash /opt/star…"   18 hours ago        Up 23 minutes       0.0.0.0:443->443/tcp, 0.0.0.0:800->80/tcp   laradock_nginx_1
...(以下略)

一覧の対象コンテナ名が書かれた『NAME』と共に『CONTAINER ID』が表示されているので

docker inspect 【コンテナID】

とするとどこかに

        "Mounts": [
            {
                "Type": "bind",
                "Source": "/d/laraval.host/test_pj",
                "Destination": "/var/www",
                "Mode": "cached",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

のような情報が見つかる。
上記で言えば『/d/laraval.host/test_pj』が共有フォルダ。

『Oracle VM VirtualBox』起動→『default』の設定→『共有フォルダ』→『追加』
フォルダーのパス:windows側の共有させたい場所のパス。『D:/laraval.host/test_pj』
フォルダー名:仮想環境側のパス。『/d/laraval.host/test_pj』

とすれば良いところなんだけど、これだと環境を作れば作った分だけ共有フォルダを増やさなくてはいけなくなる。

そこで前提条件の「『laraval.host』配下はプロジェクト複数作成する想定」という設定が生きてくる。

フォルダーのパス:D:/laraval.host
フォルダー名:/d/laraval.host

これでleravalのプロジェクトが増えに増えたとしても問題ない。

WEBアクセスする

VirtualBox使っているので『127.0.0.1』や『localhost』でアクセスなど出来ない
何より初期状態ではweb用のポートが開いていないので、そもそもブラウザから見ることが出来ない!
ここに気づくまで数日かけてしまった…

IPを調べる・設定

VirtualBoxのIPを調べるには、コマンド実行が出来るもので下記を打ち込むと出る。

docker-machine ip

今回は仮として『192.168.99.100』とする。

このIPをURLに打ち込むとアクセス出来るようになるのだが、イチイチ覚えるのもめんどくさいからURLを設定する。
windows側hostsファイルに下記のように情報追加。

192.168.99.100			dockerhost

ポート設定

windows側と仮想側でポートを繋ぐ。
『Virtual Box』→『default』→『ネットワーク』→『アダプター』→『ポートフォワーディング』
ホストポート:仮想環境側ポート。通常『80』
ゲストポート:windows側ポート(アクセス用ポート)。仮として『800』

別にゲストポートは『80』を設定でもいいのだが、共同作業人がmac(defaultでポート80使用)の可能性があるので、設定ファイルも共有するなら事前に相談しておくと安心。

これで『http://dockerhost:800/』または『http://192.168.99.100:800』にアクセスするとwebページが見れる。

もしHTTPSを使うなら

ホストポート:443
ゲストポート:443

を作っておくといい。

何か問題が起きた場合

空き容量がないと言われる

ERROR: failed to register layer: Error processing tar file(exit status 1): write ~.so: no space left on device

の状態。

docker system df

で見ると確かに容量が95%を超えている…とか確認出来る。

docker-compose stop

でコンテナを止めてから

docker system prune -a

にて、現在停止中の全てのコンテナ、ボリューム、ネットワーク、イメージを一括掃除しちゃってからの『docker-compose up』

Docker vlumeが満杯の可能性もあるので消しても良い。
下記はめんどくさいから全部消す例。

docker volume rm $(docker volume ls -qf dangling=true)

指定して消す方法もある。スッキリする。
Docker volumeの削除 - Qiita

ついでに念の為上記を参照にメモリを増やしておくこともオススメ。

VBoxManageコマンドを使う

もう何が原因か分からないけど巧くいかないときに、原因を調べるときに使える。

『コマンドプロンプト』を起動する。
パス通してなければ『VBoxManage.exe』があるディレクトリまで移動(cd)。
通常なら下記のようになると思う。

cd C:\Program Files\Oracle\VirtualBox

そこで使えるようになる。

例えば開いているポートとかの情報が見れる

VBoxManage showvminfo "default" |find "NIC"

※『grep』はwindowsでは、通常使えないから『find』にすれば大体使える。

下記がとても参考になった。
VirtualBox(Oracle VM VirtualBox)のVBoxManageコマンドって、なんか微妙。たぶん使い方が分かってないとは思うけど - ts0818のブログ

動いている仮想マシンを止める(終了)

docker-machine.exe stop

これをしてから『Docker Quickstart Terminal』閉じるようにした方が環境が壊れづらい。

docker-machine.exe ls  ... 現在起動中の仮想マシンの確認。
 だが『Oracle Virtual Box』でもdefault起動してるから解る。

Dockerの機能関連自体の話はこっちに移した

windows10でlaradockを使う方法についてはコチラ

半年近くたってようやくQiitaにも書いた

コメント

タイトルとURLをコピーしました