本サイトはサイト運営費捻出のため、アフィリエイト広告を利用しています。*詳細
VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

2018年6月12日
スポンサーリンク

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

開発環境などを手軽に導入できる事で人気を博している、コンテナ型仮想マシン「Docker」。

最近ではDocker for Windowsがリリースされた事で、Windowsの弱点であった開発環境が構築しづらい、という問題を解決できるようになりました。

そんなDocker for Windowsですが、利用するにはHyper-Vが必要で、Windows 10 Homeや既にVMware Workstationを導入している環境では、利用できない問題があります。

そんな問題を解決するために、Dockerを簡単にインストールすることができる、Docker Toolboxを利用することで問題を解決することが出来ます。

デフォルトではVirtual Boxを利用するしか無い

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

ただ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」をクリックして、インストーラをダウンロードしてきます。

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

Docker Toolboxのインストーラをそのまま開くと、Virtual Boxのインストールが強制されていまいますので、上図の様にフォルダアドレスバーの空白部分をクリックし、

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

cmd

と入力して、Enterキーを押下します。

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

すると、Docker Toolboxのインストーラが保存されているディレクトリをカレントディレクトリとして、コマンドプロンプトが立ち上がりますので、

DockerToolbox.exe /COMPONENTS="docker,docker-machine"

と入力してEnterキーを押下します。

VMware Workstation が導入された環境で、Docker Toolboxを利用する方法

すると通常通りインストーラが立ち上がるので、「次へ」をクリックしてインストールするコンポーネント一覧を確認してみると、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をインストールすることで環境変数が更新されるため、必ずコマンドプロンプトまたは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:
 		
Welcome to the world's largest container registry built for developers and …
hub.docker.com
For more examples and ideas, visit:
Configuring the Docker daemon
docs.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を使って同人誌が書けそうです・・・!

Source: Github | Docker