Docker Toolboxをいれてみたら沼だった

はじめに

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を動かす

共有フォルダが2つあるのが原因か(※これは失敗)。

パス:\\?\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での環境構築方法2パターンを細かめに説明

Laradock実際どうなの??ってcompose up時に疑問になった。それに対しての解として以下は参考になる。

Laradockはどんな経緯で作られて、何が駄目なのか?

抜粋
Laradockは、Dockerを知らなくても開発環境をセットアップしたい、あらゆるレベルのPHP開発者のためのツールだ。」

つまりLaravelに特化しているというよりもPHPの開発環境ですね。だから容量が重いのかと。

📝参考
Windows環境にDocker Toolboxをインストールする
Docker Toolboxのインストール:Windows編

 

 

コメントを残す