目次
VMware Workstation が導入された環境で、Docker Toolboxを利用する方法
開発環境などを手軽に導入できる事で人気を博している、コンテナ型仮想マシン「Docker」。
最近ではDocker for Windowsがリリースされた事で、Windowsの弱点であった開発環境が構築しづらい、という問題を解決できるようになりました。
そんなDocker for Windowsですが、利用するにはHyper-Vが必要で、Windows 10 Homeや既にVMware Workstationを導入している環境では、利用できない問題があります。
そんな問題を解決するために、Dockerを簡単にインストールすることができる、Docker Toolboxを利用することで問題を解決することが出来ます。
デフォルトではVirtual Boxを利用するしか無い
ただDocker Toolboxを利用するだけなら特に問題は無いのですが、仮想マシンとしてVirtual Boxを利用するのではなく、VMware Workstationを利用する場合は一工夫必要です。
https://github.com/pecigonzalo/docker-machine-vmwareworkstation
Docker Toolboxの仮想マシンとしてVMware Workstationを利用する場合は、上記のdocker-machine-driver-vmwareが必要となります。
docker-machine-driver-vmwareの導入方法
Docker ToolboxをVirtual Box無しでインストール
それでは早速VMware Workstation環境でDocker Toolboxを利用する準備を進めてみましょう。
https://docs.docker.com/toolbox/toolbox_install_windows/
まず、上記サイトの「Get Docker Toolbox for Windows」をクリックして、インストーラをダウンロードしてきます。
Docker Toolboxのインストーラをそのまま開くと、Virtual Boxのインストールが強制されていまいますので、上図の様にフォルダアドレスバーの空白部分をクリックし、
cmd
と入力して、Enterキーを押下します。
すると、Docker Toolboxのインストーラが保存されているディレクトリをカレントディレクトリとして、コマンドプロンプトが立ち上がりますので、
DockerToolbox.exe /COMPONENTS="docker,docker-machine"
と入力してEnterキーを押下します。
すると通常通りインストーラが立ち上がるので、「次へ」をクリックしてインストールするコンポーネント一覧を確認してみると、Virtual Boxのチェックが外れていることが分かります。
Virtual Boxのチェックが外れていることを確認したら、「Docker Compose for Windows」にチェックを入れて、インストールを進めます。
docker-machine-driver-vmwareのインストール
https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases
Docker Toolboxのインストールが完了したら、上記のサイトにアクセスし、「docker-machine-driver-vmware_windows_amd64.exe」をクリックしてドライバをダウンロードします。
ダウンロードしてきた「docker-machine-driver-vmware_windows_amd64.exe」を「C:\Program Files\Docker Toolbox」にコピーします。
続いて、「C:\Program Files\Docker Toolbox\start.sh」を下記の通りに書き換えます。
#!/bin/bash export PATH="$PATH:/mnt/c/Program Files (x86)/VMware/VMware Workstation" trap '[ "$?" -eq 0 ] || read -p "Looks like something went wrong in step ´$STEP´... Press any key to continue..."' EXIT VM=${DOCKER_MACHINE_NAME-default} DOCKER_MACHINE=./docker-machine.exe BLUE='\033[1;34m' GREEN='\033[0;32m' NC='\033[0m' if [ ! -f "${DOCKER_MACHINE}" ]; then echo "Docker Machine is not installed. Please re-run the Toolbox Installer and try again." exit 1 fi vmrun.exe list | grep \""${VM}"\" &> /dev/null VM_EXISTS_CODE=$? set -e STEP="Checking if machine $VM exists" if [ $VM_EXISTS_CODE -eq 1 ]; then "${DOCKER_MACHINE}" rm -f "${VM}" &> /dev/null || : rm -rf ~/.docker/machine/machines/"${VM}" #set proxy variables if they exists if [ -n ${HTTP_PROXY+x} ]; then PROXY_ENV="$PROXY_ENV --engine-env HTTP_PROXY=$HTTP_PROXY" fi if [ -n ${HTTPS_PROXY+x} ]; then PROXY_ENV="$PROXY_ENV --engine-env HTTPS_PROXY=$HTTPS_PROXY" fi if [ -n ${NO_PROXY+x} ]; then PROXY_ENV="$PROXY_ENV --engine-env NO_PROXY=$NO_PROXY" fi "${DOCKER_MACHINE}" create -d vmwareworkstation $PROXY_ENV "${VM}" fi STEP="Checking status on $VM" VM_STATUS="$(${DOCKER_MACHINE} status ${VM} 2>&1)" if [ "${VM_STATUS}" != "Running" ]; then "${DOCKER_MACHINE}" start "${VM}" yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}" fi STEP="Setting env" eval "$(${DOCKER_MACHINE} env --shell=bash ${VM})" STEP="Finalize" clear cat << EOF ## . ## ## ## == ## ## ## ## ## === /"""""""""""""""""\___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~ \______ o __/ \ \ __/ \____\_______/ EOF echo -e "${BLUE}docker${NC} is configured to use the ${GREEN}${VM}${NC} machine with IP ${GREEN}$(${DOCKER_MACHINE} ip ${VM})${NC}" echo "For help getting started, check out the docs at https://docs.docker.com" echo cd docker () { MSYS_NO_PATHCONV=1 docker.exe "$@" } export -f docker if [ $# -eq 0 ]; then echo "Start interactive shell" exec "$BASH" --login -i else echo "Start shell with command" exec "$BASH" -c "$*" fi
Docker Toolboxの設定
導入が完了したら、新しくコマンドプロンプトまたはPowerShellを実行します。
Docker Toolboxはインストールしただけではコンテナを動かす仮想マシンが作成されていないため、下記コマンドを実行して仮想マシンの作成を行います。
docker-machine create --driver=vmwareworkstation dev
すると、仮想マシンの作成が始まり、完了すると下記のようなメッセージが表示されます。
C:\works>docker-machine create --driver=vmwareworkstation dev Running pre-create checks... Creating machine... (dev) Copying C:\Users\syobon\.docker\machine\cache\boot2docker.iso to C:\Users\syobon\.docker\machine\machines\dev\boot2docker.iso... (dev) Creating SSH key... (dev) Creating VM... (dev) Creating disk 'C:\Users\syobon\.docker\machine\machines\dev\test.vmdk' (dev) Virtual disk creation successful. (dev) Starting dev... (dev) Waiting for VM to come online... Waiting for machine to be running, this may take a few minutes... Detecting operating system of created instance... Waiting for SSH to be available... Detecting the provisioner... Provisioning with boot2docker... Copying certs to the local machine directory... Copying certs to the remote machine... Setting Docker configuration on the remote daemon... Checking connection to Docker... Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env dev
ここまで完了したら、下記コマンドを実行して先ほど作成した「dev」という仮想マシンが作成されたかどうか確認します。
C:\works>docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS dev - vmwareworkstation Running tcp://192.168.111.130:2376 v18.05.0-ce
上記のようにSTATEがRunningになっていれば完了です。
Dockerを利用する
Docker ToolboxをインストールしてDockerを利用する場合、はじめに環境変数を定義して上げる必要があります。
下記コマンドを実行して、設定すべき環境変数を表示します。
docker-machine env dev
すると下記のような結果が表示されます。
SET DOCKER_TLS_VERIFY=1 SET DOCKER_HOST=tcp://192.168.111.130:2376 SET DOCKER_CERT_PATH=C:\Users\syobon\.docker\machine\machines\dev SET DOCKER_MACHINE_NAME=dev SET COMPOSE_CONVERT_WINDOWS_PATHS=true REM Run this command to configure your shell: REM @FOR /f "tokens=*" %i IN ('docker-machine env dev') DO @%i
上記の内SETから始まる物をコピーし、コマンドプロンプトまたはPowerShellに貼り付けてEnterキーを押下します。
Dockerの動作テスト
ここまで完了したら、下記のコマンドを実行してHello worldを実行してみましょう。
C:\works>docker run hello-world
下記の通りHello worldが動作することを確認します。
Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 9bb5a5d4561a: Pull complete Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77 Status: Downloaded newer image for hello-world:latest 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:For more examples and ideas, visit:Welcome to the world's largest container registry built for developers and …hub.docker.com
Tips1 Docker仮想マシンの停止
Docker仮想マシンを停止するには下記コマンドを実行します。
C:\works>docker-machine stop 仮想マシン名
例 C:\works>docker-machine stop dev Stopping "dev"... Machine "dev" was stopped.
Tips2 Docker仮想マシンのハードウェアパラメータを変更して作成する
docker-machineコマンドでvmwareworkstationドライバを利用して仮想マシンを作成すると、デフォルトでは下記のような仮想マシンが作成されます。
[table id=91 /]
もし、これらの値を変更したい場合は下記のオプションを指定します。
[table id=92 /]
例えば「test」という名前の、CPU数2、メモリサイズ2GB、ディスクサイズ40GBの仮想マシンを作成したい場合は、下記コマンドを実行します。
docker-machine create --driver=vmwareworkstation --vmwareworkstation-cpu-count 2 --vmwareworkstation-disk-size 40000 --vmwareworkstation-memory-size 2048
まとめ
Docker ToolboxをVMwareで動かすドライバを探すのに思っていたより時間がかかってしまいました・・・
サブマシンでは何も考えずにDocker for Windowsを使っていたので余り気にしていなかったのですが、いざメインマシンに導入しようと思ったときに、VMware Workstationバリバリに使ってるじゃん・・・ どうしよ・・・と呆然としていました。
これでメインマシンでも気軽にRe:Viewを使って同人誌が書けそうです・・・!