Docker for windows on VMware


工作環境

操作系統:Windows 10 Pro x64

Hyper-V:已卸載。

VMware:已安裝。

Virtual Box:無安裝。

 

前言

鑒於Hyper-V在Windows桌面系統下的"弱雞"表現,包括不僅限於"網絡"方面都很"辣雞",各種不兼容的原因。

我決定(禁用/卸載)Hyper-V,卻又不想用其默認的Virtual Box,於是改成最為喜愛的VMware Workstation,作為Docker machine的driver。

以上對於三個虛擬機的好與壞,只是個人親身使用后的感受,或許沒有全面了解過它們的優良之處,請勿噴,可以指教,謝謝。

然而Docker官方並不支持VMware Workstation驅動,不過我從Docker官方指導文檔中找到第三方支持:https://docs.docker.com/machine/drivers

 

正文

訪問該驅動的第三方支持,https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases/latest

下載二進制文件 -- docker-machine-driver-vmwareworkstation.exe,復制到docker-machine.exe的同級目錄下,注意:如果你是

1.通過InstallDocker.msi安裝的,復制到C:\Program Files\Docker\Docker\resources\bin下。

2.通過DockerToolbox.exe安裝的,復制到C:\Program Files\Docker Toolbox下。

2.1.如果是通過DockerToolbox.exe安裝的,還需要修改C:\Program Files\Docker Toolbox\start.sh腳本文件內容為:

#!/bin/bash

export PATH="$PATH:/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

3.打開git-bash,輸入以下命令:

3.1.docker-machine ls

檢查是否有machine實例,如果有,請自行考慮是否卸載它。

3.2.docker-machine stop dev && docker-machine rm dev

暫停並且卸載NAME為dev的machine實例。此處的dev每個人都不同,可能是default或其它,具體看docker-machine ls命令列出來的數據。

3.2.1.docker-machine create --driver=vmwareworkstation dev

創建一個名稱為dev的machine實例。

3.2.2.當然了,如果你做了2.1步驟的動作,你也可以不做3.2.1步驟的動作。

而是直接在你的桌面上找到一個名為"Docker Quickstart Terminal"的藍色Docker命令行圖標

,並且雙擊運行它。

首次運行它時,會檢查你是否有創建一個名為"default"的實例,如果有,則直接啟動命令操作界面,如果沒有,則幫你創建並且初始化一個名為"default"的實例,並且active為默認實例。

當有一個默認的machine實例后,你通過docker命令所做的操作,都是對默認實例的操作。

3.3.docker-machine ls

查看實例列表信息,在這里你可以看到實例的狀態信息,包括版本,IP,名稱等。

3.4.eval "$(docker-machine env dev)" && docker-machine active

此處兩個命令在同一個shell窗口分開執行,或一並執行都可以。

eval "$(docker-machine env dev)"這句話的意思是加載名為"dev"的machine實例的環境變量到當前的shell窗口。

docker-machine active的作用是,從上一句話加載進來的環境變量中獲取到要激活的machine實例名稱,並且激活它。

激活指定的machine實例為默認實例。一個docker只能有一個被激活的默認實例。

3.5.docker-machine ssh dev

連接到machine實例之后,你可以使用docker命令進行任何受支持的操作...

例如docker push,pull等等....

PS:此處,如果你進行了3.2.2或3.4步驟的操作,可以不需要進行3.5步驟的操作。

直接使用docker命令就可以正常使用docker開發了。

 

2017.09.20:更新了start.sh的錯誤

2019.09.01:windows10下,powershell執行不了`eval "$(docker-machine env dev)" && docker-machine active`

可以換個寫法:`docker-machine env -shell=powershell dev | Invoke-Expression | docker-machine active` 

 

參考資料

https://docs.docker.com/machine/get-started

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

http://www.cnblogs.com/yjmyzz/p/docker-machine-using-vmware.html

 

下載資源匯總

InstallDocker.msi下載地址:

https://download.docker.com/win/stable/InstallDocker.msi

https://download.docker.com/win/stable/Docker for Windows Installer.exe

https://download.docker.com/win/edge/Docker for Windows Installer.exe

DockerToolbox.exe下載地址:https://download.docker.com/win/stable/DockerToolbox.exe

                                              : https://github.com/docker/toolbox/releases/latest

boot2docker.iso下載地址:https://github.com/boot2docker/boot2docker/releases/latest

docker-machine-driver-vmwareworkstation.exe下載地址:https://github.com/pecigonzalo/docker-machine-vmwareworkstation/releases/latest

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM