在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打算开始用比较成熟的 Docker 来做。

但众所周知在 windows 环境下,Docker 和 Virtualbox 有冲突,一山不容二虎(https://segmentfault.com/q/1010000009174921?_ea=1879415

于是决定用 Virtualbox 虚拟个 Debian 命令行系统,然后在 Debian 里面跑 Docker 这样大家就都没意见了。

整体思路:

  1. 安装 Virtualbox

  2. 新建个虚拟机,安装 Debian。

    这里推荐虚拟机开两个网卡,一个 Nat 模式,一个 HostOnly 模式。这样方便 windows 主机用 SSH 工具登入虚拟机进行管理。再把 HostOnly 那个网卡配一个静态 IP , windows 主机的 hosts 也加一个域名比如 dockerhost 指向它就更方便了。

  3. 在 Debian 里面装 Docker

  4. 在 Virtualbox,配置 Debian 虚拟机的共享目录。我选择的是 E:\dockerHostShare, 你选择你自己的目录。记得把 Auto-mount 和 Make Permanent 打上勾

  5. 在 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 里面找了。

  6. 在 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 这样就能让镜像里的执行用户有权限访问共享目录了。

转载于:https://my.oschina.net/zgldh/blog/2250351

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值