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
手順概要
- Docker Toolboxのインストール
- docker-machine-vmwareworkstationのインストール
- docker machine の作成
Docker Toolboxのインストール
Docker Toolboxのダウンロード
以下の公式サイトからDocker Toolbox for 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が作成されたことを確認。
```powershell
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を利用した。
タイトルは厳密には正しくないと思うが、あんまり時間をかけても意味がないので、無視。
良いタイトルがあればコメント等で