在windows環境下使用Virtualbox虛擬Debian系統來運行Docker

標題繞口。 我以前一直使用 Virtualbox 和 homestead 來運行個人 PHP 開發環境。最近決心開始嘗試 DevOps,使得開發、部署容器化,來化解人爲操做失誤和環境不兼容等問題形成的各類損失。就打算開始用比較成熟的 Docker 來作。nginx

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

因而決定用 Virtualbox 虛擬個 Debian 命令行系統,而後在 Debian 裏面跑 Docker 這樣你們就都沒意見了。segmentfault

總體思路:windows

  1. 安裝 Virtualbox工具

  2. 新建個虛擬機,安裝 Debian。命令行

    這裏推薦虛擬機開兩個網卡,一個 Nat 模式,一個 HostOnly 模式。這樣方便 windows 主機用 SSH 工具登入虛擬機進行管理。再把 HostOnly 那個網卡配一個靜態 IP , windows 主機的 hosts 也加一個域名好比 dockerhost 指向它就更方便了。code

  3. 在 Debian 裏面裝 Dockerserver

  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 這樣就能讓鏡像裏的執行用戶有權限訪問共享目錄了。

相關文章
相關標籤/搜索