zoukankan      html  css  js  c++  java
  • 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 FilesDockerDocker esourcesin下。

    2.通过DockerToolbox.exe安装的,复制到C:Program FilesDocker Toolbox下。

    2.1.如果是通过DockerToolbox.exe安装的,还需要修改C:Program FilesDocker Toolboxstart.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='33[1;34m'
    GREEN='33[0;32m'
    NC='33[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

  • 相关阅读:
    2016华为实习编程题:停车管理系统
    lintcode:单词切分
    2016网易实习生编程题:数组中两个数的和等于sum
    2016网易实习生编程题:n个骰子的和等于m
    2016百度编程题:钓鱼比赛
    2016百度编程题:裁减网格纸
    2016百度编程题:罪犯转移
    JAVA面试基础
    扔硬币问题
    随机数生成随机数
  • 原文地址:https://www.cnblogs.com/VAllen/p/Docker-for-windows-on-VMware.html
Copyright © 2011-2022 走看看