はじめに
Docker Toolboxを入れてDockerについて学んでみました。
と書きだしましたが、沼過ぎてLaravelの表示まで辿り着けませんでした。。。以下備忘録となります。
✅ゴール
・Dockerの理解を深める
✅環境
Windows
✅参考
WindowsにDocker Toolboxをインストールする(公式)
Docker Toolboxをいれてみた
『Windows上でVirtualBoxにて仮想環境が作られ、その中でDockerコンテナが動く』
✅インストール
①公式より最新の.exeファイルをインストールして起動。

注意:VirtualBoxをすでに入れている人はチェックを外すらしい。Docker composeとGitも外した。
②Docker Quickstart Terminalを起動する
注意:Hyper-Vにチェック入れていると以下のようにエラーになる。
Starting "default"... (default) Check network to re-create if needed... (default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar. Unable to start the VM: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe startvm default --type headless failed: VBoxManage.exe: error: Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED) VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole Details: 00:00:02.674852 Power up failed (vrc=VERR_NEM_VM_CREATE_FAILED, rc=E_FAIL (0X80004005)) Looks like something went wrong in step ´Checking status on default´... Press any key to continue...
起動に成功

VirtualBoxでも確認(defaultという名前でインストールされている)

③Git Bashから確認
※起動直後はなぜかDocker側のターミナルでコマンドが利かなかったが後程確認したところ動作しました(反映にタイムラグがある??)。
docker --version >> Docker version 19.03.5, build 633a0ea docker-machine ls >> NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox Running tcp://192.168.99.100:2376 v19.03.5 docker images >> REPOSITORY TAG IMAGE ID CREATED SIZE docker image pull hello-world:latest >> latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1 Status: Downloaded newer image for hello-world:latest docker.io/library/hello-world:latest
④コンテナ起動
docker container run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
確認
docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9de5dd7fe9ef hello-world "/hello" About a minute ago Exited (0) About a minute ago intelligent_pascal
コンテナ削除
// docker container rm <container-id or container-name> docker container rm intelligent_pascal intelligent_pascal
Laradockを試してみる
参考はもはやおなじみのこの教材です。
①git clone
git clone https://github.com/Laradock/laradock.git -b v9.6 cd laradock cp env-example .env
②laradock/.envの編集
APP_CODE_PATH_HOST=../laravel DATA_PATH_HOST=../data COMPOSE_PROJECT_NAME=laravel-sns
③postgres/Dockerfileの1行目を編集
FROM postgres:11.6
③コンテナ起動(初回は時間がかかる。今回は30分ほどかかった。Macの場合1時間半くらい。。。これはPCのスペックが原因??)
docker-compose up -d workspace php-fpm nginx postgres
※docker-composeは、複数のコンテナを同時に取り扱うDocker Composeという機能を使うためのコマンド
※upは、Docker Composeでコンテナを起動するときに使うコマンド
※-dは、コンテナを起動した後に、ターミナルの操作に戻るためのオプション
④Laravelのインストール
docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.8.*"
※ところがここでLaravelプロジェクトの行方が一切わからない現象が発生。未解決。。。
👉DOCKER TOOLBOX から DOCKER DESKTOP への移行
上記の記事を参考にDocker Desktopへ戻すことにしました。
躓いた点
✅Laravelプロジェクトが行方不明
※未解決
Laravelのインストール後、本来laravel-sns上にlaravelディレクトリが出来上がるはずがない。。。
参考:LaradockをWindows 10 Homeにインストール
どうやら扱い方を根本的に間違っていたっぽい。。。(GitBashだと以下コマンドが使えない。)
docker-machine ssh
まずはgitとVirtualBox上のターミナルが同期できるように設定挑戦
Git

VirtualBox(ちなみに右側のctrlキーで離脱可能)

パスの設定

docker-machine sshでdockerに接続して設定
docker@default:~$ echo 'sudo mkdir -p /c/dockerWorkspace' |sudo tee -a /var/lib/boot2docker/profile >> sudo mkdir -p /c/dockerWorkspace docker@default:~$ echo 'sudo mount -t vboxsf -o uid=0,gid=0 c/dockerWorkspace /c/dockerWorkspace' |sudo tee -a /var/lib/boot2docker/profile >> sudo mount -t vboxsf -o uid=0,gid=0 c/dockerWorkspace /c/dockerWorkspace exit
再起動
docker-machine restart
git上でssh接続して作ったファイルがVirtualBox上のターミナルと一致することは以下より確認。

どうやらホスト上から作成したフォルダの変更は反映されない模様。

また、再起動してみたところVM上では見当たらなくなった。永続化もしくはマウントができていない模様。

このあとtest2をGit上で作成するもホスト側には反映されず。。。
✅データ永続化
参考:
Docker Toolbox上のデータ永続化
これみるとボリュームが必要らしい。
WindowsでDocker Toolbox&docker-composeを動かす

パス:\\?\c:\Users
フォルダ名:c/Users
※上記を削除するためのメモ。
削除して再起動。失敗。
本来は、ボリュームで永続化する必要性があるらしい。が一旦ステイ。
docker volune create hogehoge
✅localhostにアクセスできない 参考
原因:ToolboxではVirtualBoxのLinux VMを実行しているためデフォルトは192.168.90.100になるとのこと。
ipアドレスの確認
docker-machine ip 192.168.99.100
確認(起動はしている)
docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------------- laravel-sns_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laravel-sns_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp laravel-sns_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laravel-sns_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp laravel-sns_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
更に確認でポート番号を探る。
docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS default * virtualbox Running tcp://192.168.99.100:2376 v19.03.5
http://192.168.99.100:2376/にアクセス。

追記:ここにアクセスしてもLaravelは起動できなかったので更に設定が必要そう。
Laradockのポート番号確認
docker-compose.yaml
ports: - "${NGINX_HOST_HTTP_PORT}:80"
laradock/.envを確認
### NGINX ################################################# NGINX_HOST_HTTP_PORT=80 NGINX_HOST_HTTPS_PORT=443 NGINX_HOST_LOG_PATH=./logs/nginx/ NGINX_SITES_PATH=./nginx/sites/ NGINX_PHP_UPSTREAM_CONTAINER=php-fpm NGINX_PHP_UPSTREAM_PORT=9000 NGINX_SSL_PATH=./nginx/ssl/
ターミナルを確認
compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------------- laravel-sns_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laravel-sns_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp laravel-sns_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laravel-sns_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp laravel-sns_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
ここからはこの記事が参考になる。
docker-compose.ymlに記載したポートフォワーディングはVirtualBox => Dockerコンテナ でしかないためWindows => VirtualBoxのポートフォワーディングは別で設定する必要がある
以下のようにポートフォワーディングルールを追記。

docker-machine restartで再起動。
表示されず。。。
✅VirtualBoxがHyper-Vをオフっても起動しない
※Hyper-Vの解除で再起動⇒下記コマンド実行後再起動で計2回の再起動が必要っぽい。
参考:
Windows10上のVirtualBoxがエラー吐いた時の備忘録
【VirtualBox】VirtualBox 6.1.14にしたらHyper-Vと共存できるようになった件
現状。

たまたま見つけたHyper-VマネージャでDockerコンテナが実行されていることが確認できた。

Hyper-Vの解除
アプリと機能⇒プログラムと機能⇒Windowsの機能の有効化または無効化⇒Hyper-Vを選択⇒再起動
同様のエラーだったのでPowerShellの管理者で以下のコマンド後、再起動。
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
確認。起動できた。

おわりに
追記:掘れば掘るほどDocker Toolboxは沼だった。。。難しいので理解するにはもう少し根本のVirtualBoxの理解を深めないといけなそう。。。ポートフォワーディングなり。
以下記事参考にLaravelのプロジェクトを複数作る際の環境構築も早く理解したい。
Laradock実際どうなの??ってcompose up時に疑問になった。それに対しての解として以下は参考になる。
「Laradockは、Dockerを知らなくても開発環境をセットアップしたい、あらゆるレベルのPHP開発者のためのツールだ。」
つまりLaravelに特化しているというよりもPHPの開発環境ですね。だから容量が重いのかと。
📝参考
Windows環境にDocker Toolboxをインストールする
Docker Toolboxのインストール:Windows編
コメントを残す