您的位置:首页 > 运维架构 > Docker

Docker Machine 使用备忘

2016-05-26 08:18 861 查看
最近尝试了在Windows环境下配置Docker Machine,按照官方文档的说明一步步做下来,把中间遇到的问题做个记录备查。

首先安装Git for Windows,获得一个用MingW64模拟出的Shell环境。这个Shell环境把Windows下的驱动器映射成根目录下的一级子目录,例如C:>就是/c。这个记下来待会儿有用。

接下来去Docker Machine发布页下载docker machine可执行文件,文件名格式为docker-machine-
uname -o
-
uname -m
。这里遇到一个坑: 在官方文档里举例子时docker machine的命令行操作都是”docker-machine + 子命令”形式,于是在git bash(mingw64)环境下我将下载的docker-machine-Windows-x86_64.exe重命名为docker-machine,去掉了“Windows-x86_64.exe”这导致了docker-machine不能正常运行,具体表现为如果只执行
docker-machine version
,那么一切正常,能够打印版本信息,但如果执行
docker-machine create -d virtualbox default
则会出现出错提示“Driver ‘virtualbox’ not found. Do you have the plugin binary accessible in your PATH?”这个出错提示就彻底把人带坑里去了,实际上这跟plugin是否在执行环境的PATH里没有毛关系。

这里的plugin是指docker-machine用于和各种物理平台打交道的一套接口驱动(driver),例如使用virtualbox创建本地的docker machine就是
-d virtualbox
,这个驱动就是内置的而不是plugin。后来docker-machine要支持的平台太多了,没法都集成到docker machine binary中,于是只好做成plugin形式,放在docker-machine的执行环境中并添加到PATH变量,这样docker-machine命令运行时根据
-d
的指示调用具体的driver该接口。但这里由于virtualbox的driver根本就不是插件形式,所以跟PATH就更没关系了。

出坑过程是这样的:由于检查了半天驱动发现实在是找不到有什么问题,于是在Ubuntu下安装Linux版本的docker machine,发现一切正常。再回到Windows下,在mingw64环境外——也就是直接用cmd.exe运行docker machine,由于cmd.exe要求提供后缀,否则不认为是可执行程序,所以把”.exe”加了回去。结果运行
docker-machine.exe create -d virtualbox default
正常! 这才注意到是后缀的问题。

按照Unix用户的习惯,文件后缀变化是不会影响shell对文件类型的判断的,更不会影响其执行结果。但在Windows环境下使用模拟的shell环境则会出现这样的问题,这可能是docker machine一个潜在的bug。

为了让docker-machine在git bash环境下好用,还需要配置bash环境和自动补完脚本:

下载docker machine源码,复制源码目录下
contrib/completion/bash/
中的脚本到任意指定目录:例如,
/etc/bash_completion.d/


配置bash启动脚本(可能需要自己新建一个)
~/.bashrc


source /etc/bash_completion.d/docker-machine-wrapper.bash
source /etc/bash_completion.d/docker-machine-prompt.bash
source /etc/bash_completion.d/docker-machine.bash
alias docker-machine='docker-machine.exe'
# DOCKER_BASE是存放docker machine相关文件的路径,包括可执行文件
export DOCKER_BASE=/e/_Share/repo/docker_machine
# 添加docker-machine可执行文件的路径到PATH变量
export PATH=$PATH:$DOCKER_BASE/bin:/d/Program\ Files/Oracle/VirtualBox
# 创建本地虚拟机时,使用如下路径存放虚拟机文件。默认是%UserProfile%/.docker/machine可能会塞满你的C盘
export MACHINE_STORAGE_PATH=$DOCKER_BASE/_machines
# 修改命令行提示符
PS1='[\u@\h \W$(__docker_machine_ps1)]\$'


这样就可以使用docker-machine自带的自动补完功能了,很方便:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息