vmware
Docker
Windows8.1
docker-machine
Docker-Toolbox

Docker ToolboxをVMware Workstationで使う

Docker for Windowsに対応していないWindows8.1でDockerを利用するには、Docker Toolboxで環境を構築する。

Docker Toolboxには以下が含まれている。



  • Docker CLI client for running Docker Engine to create images and containers

  • Docker Machine so you can run Docker Engine commands from Windows terminals

  • Docker Compose for running the docker-compose command

  • Kitematic, the Docker GUI

  • the Docker QuickStart shell preconfigured for a Docker command-line environment

  • Oracle VM VirtualBox


上記引用元:(https://docs.docker.com/toolbox/toolbox_install_windows/#what-you-get-and-how-it-works)

筆者の環境では、既にVMware Workstation12がインストールされているので、VirtualBoxの代わりにVMware Workstationを使う。VMware Workstationを使うには、下記ドライバが必要となる。

https://github.com/pecigonzalo/docker-machine-vmwareworkstation

以下では、上記を参考にVMware Workstationを使うための手順を示す。


筆者環境


  • Windows8.1

  • VMware Workstation 12

  • Docker Toolbox

  • docker-machine-vmwareworkstation v1.1.0


手順概要


  1. Docker Toolboxのインストール

  2. docker-machine-vmwareworkstationのインストール

  3. docker machine の作成


Docker Toolboxのインストール


Docker Toolboxのダウンロード

以下の公式サイトからDocker Toolbox for Windowsをダウンロードする。

https://docs.docker.com/toolbox/toolbox_install_windows/

Dockerを実行するにあたり、OSごとに必要となる設定が変わってくるので、同ページ内の「Step1: Check your version」を参考に設定を行う。

ダウンロードしたディレクトリをcmdの管理者権限で開き、下記コマンドを実行し、インストールを進める。

> DockerToolbox.exe /COMPONENTS="Docker,DockerMachine,DockerCompose"


start.shファイルの書き換え

下記リンク内のInstalling with Docker Toolbox > Replace contents of C:\Program Files\Docker Toolbox\start.sh with this script.に掲載されているスクリプトでC:\Program Files\Docker Toolbox\start.shを書き換える。

https://github.com/pecigonzalo/docker-machine-vmwareworkstation

上記から引用したものが以下のスクリプト



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-machine-vmwareworkstationのインストール

下記リンク内のLatest release > docker-machine-vmwareworkstation.exeをダウンロードし、C:\Program Files\Docker Toolbox\内に保存する。

https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases


Docker利用する


Docker Machineの作成

以下を実行すると、先ほどダウンロードしたdocker-machine-vmwareworkstationを使ってdevという名前のmachineが作成される。

※以降では、Pathを一部改変しています

C:\Users\Desktop\docker>docker-machine create --driver=vmwareworkstation dev

以下で、machineが作成されたことを確認。

C:\Users\Desktop\docker>docker-machine ls

NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
dev * vmwareworkstation Running tcp://172.16.111.128:2376 v18.06.1-ce

C:\Users\Desktop\docker>


環境変数の設定

Docker MachineでDockerを動かすために、環境変数の設定を行う。

C:\Users\Desktop\docker>docker-machine env dev

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://172.16.111.128:2376
SET DOCKER_CERT_PATH=C:\Users\.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

C:\Users\Desktop\docker>SET DOCKER_TLS_VERIFY=1

C:\Users\Desktop\docker>SET DOCKER_HOST=tcp://172.16.111.128:2376

C:\Users\Desktop\docker>SET DOCKER_CERT_PATH=C:\Users\.docker\machine\machines\dev

C:\Users\Desktop\docker>SET DOCKER_MACHINE_NAME=dev

C:\Users\Desktop\docker>SET COMPOSE_CONVERT_WINDOWS_PATHS=true

C:\Users\Desktop\docker>


動作確認

以下では、動作の確認で2つほどコンテナを実行する。

行っているのは公式の下記リンクに記載されている内容。

https://docs.docker.com/machine/get-started/#run-containers-and-experiment-with-machine-commands


hello world

以下でhello worldが表示されるか確認。

C:\Users\Desktop\docker>docker run busybox echo hello world

Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
90e01955edcd: Pull complete
Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
Status: Downloaded newer image for busybox:latest
hello world

C:\Users\Desktop\docker>


nginx

nginxのコンテナを実行。

C:\Users\Desktop\docker>docker run -d -p 8000:80 nginx

Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
f17d81b4b692: Already exists
d5c237920c39: Pull complete
a381f92f36de: Pull complete
Digest: sha256:b73f527d86e3461fd652f62cf47e7b375196063bbbd503e853af5be16597cb2e
Status: Downloaded newer image for nginx:latest
0462eb967f8a156fdcdeae651ced151f52fef0bee6d56b877a7fc828da57c53e

machineのipを確認し、curlでレスポンスが返ってくるか確認する。

※curlがインストールされていない場合は、ブラウザで確認してください。

C:\Users\Desktop\docker>docker-machine ip dev

172.16.111.128

C:\Users\Desktop\docker>curl 172.16.111.128:8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

C:\Users\Desktop\docker>


おわりに

Docker ToolboxでインストールされるVirtualBoxの代わりにVMware Workstationを利用してDockerを利用した。

タイトルは厳密には正しくないと思うが、あんまり時間をかけても意味がないので、無視。

良いタイトルがあればコメント等で


参考