标题绕口。 我以前一直使用 Virtualbox 和 homestead 来运行个人 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操做失误和环境不兼容等问题形成的各类损失。就打算开始用比较成熟的 Docker 来作。nginx
但众所周知在 windows 环境下,Docker 和 Virtualbox 有冲突,一山不容二虎(https://segmentfault.com/q/1010000009174921?_ea=1879415docker
因而决定用 Virtualbox 虚拟个 Debian 命令行系统,而后在 Debian 里面跑 Docker 这样你们就都没意见了。segmentfault
总体思路:windows
安装 Virtualbox工具
新建个虚拟机,安装 Debian。命令行
这里推荐虚拟机开两个网卡,一个 Nat 模式,一个 HostOnly 模式。这样方便 windows 主机用 SSH 工具登入虚拟机进行管理。再把 HostOnly 那个网卡配一个静态 IP , windows 主机的 hosts 也加一个域名好比 dockerhost 指向它就更方便了。code
在 Debian 里面装 Dockerserver
在 Virtualbox,配置 Debian 虚拟机的共享目录。我选择的是 E:\dockerHostShare, 你选择你本身的目录。记得把 Auto-mount 和 Make Permanent 打上勾开发
在 Debian 里面装 VBoxGuestAdditions 服务部署
官网流程: https://virtualboxes.org/doc/installing-guest-additions-on-debian/
参考 BSalita 的回答: https://serverfault.com/questions/674974/how-to-mount-a-virtualbox-shared-folder
要注意的是你可能须要把当前用户添加入 vboxsf 用户组(须要重启)。若是你是 root 就无所谓了。为了方便你能够 ln -s /media/sf_dockerHostShare ~/dockerHostShare 就不用每次都到 media 里面找了。
在 windows 主机的 E:\dockerHostShare 目录下能够添加你任何项目目录,项目目录里添加 Dockerfile, 而后你就能够在 Debian 虚拟机里执行这些 Dockerfile 了。
以上安装方法可能致使 docker 跑的 Nginx 老是 404,缘由是共享目录的用户组是 root:vboxsf , 一般的 nginx 镜像里是没有 vboxsf 用户组的, 且大部分的 docker 镜像里面的程序都是用 gid 为 1000 的用户/用户组执行的。
因此此时须要你手工修改 Debian 里的 /etc/group 将 vboxsf 的 gid 改成 1000, 把另外一个 gid 是 1000 的改为别的数(下称 default_gid)。别忘了也要将 /etc/passwd 里面原来是 1000 的 gid 调整为 default_gid,不然默认用户会混乱。
而后到 VirtualBox 控制面板,删掉原来的共享目录,再从新添加共享目录。回到 Debian 查看这个目录的权限 ls -lan 就会发现用户/用户组变成了 0 1000 (其实仍是 root vboxsf, 只是 gid 改了)
主要思路就是这样。若是遇到哪些镜像使用的用户/用户组和 0:1000 不匹配,请自行在他的 Dockerfile 里添加 RUN addgroup -gid 1000 vboxsf \ && adduser 镜像里的执行用户名 vboxsf
这样就能让镜像里的执行用户有权限访问共享目录了。