文档章节

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

zgldh
 zgldh
发布于 10/21 21:57
字数 797
阅读 25
收藏 2

标题绕口。 我之前一直使用 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 这样就能让镜像里的执行用户有权限访问共享目录了。

© 著作权归作者所有

共有 人打赏支持
zgldh
粉丝 95
博文 35
码字总数 46344
作品 2
高级程序员
私信 提问
vagrant+virtualbox使用小记

virtualbox是类似vmware workstation的虚拟机软件,而且是开源的,支持多平台,在win10上也能顺畅运行。win10上安装vagrant能在终端xshell上像linux一样命令行操作,也便于开发环境的切换,很...

hiwill
09/16
0
0
Vagrant 2.2.1 发布,开发者友好的环境构建工具

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境,能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境。。简单地说,Vagrant让我们可以通过代码的方式快速地、可重...

专写垃圾代码
今天
0
0
『中级篇』如何在mac上通过vagrant安装虚拟机(七)

大部分老铁,都是用的mac或者windows,并没有一台linux的主机,如果想在linux上安装docker的话,linux的机器可以通过虚拟化来实现。 一般虚拟化通过的软件是VirtualBox 或者 VMware Worksta...

IT人故事
07/22
0
0
『中级篇』如何在window上通过vagrant安装虚拟机(八)

大部分老铁,都是用的mac或者windows,并没有一台linux的主机,如果想在linux上安装docker的话,linux的机器可以通过虚拟化来实现。 一般虚拟化通过的软件是VirtualBox 或者 VMware Worksta...

IT人故事会
06/02
0
0
Debian/Ubuntu下安装VirtualBox以及使用工行U盾

1.从4.0版本开始,VirtualBox分为开源的基础部分,和闭源的拓展包部分,开源部分可以直接通过Debian包管理器安装。闭源的extension packs需要在VirtualBox官网上下载安装,注意要找对应版本的...

wang7x
2014/02/09
0
1

没有更多内容

加载失败,请刷新页面

加载更多

在Flutter中嵌入Native组件的解决方案

摘要: 引言 在漫长的从Native向Flutter过渡的混合工程时期,要想平滑地过渡,在Flutter中使用Native中较为完善的控件会是一个很好的选择。本文希望向大家介绍AndroidView的使用方式以及在此...

阿里云官方博客
37分钟前
1
0
aws S3 util demo

package com.example.demo;import com.amazonaws.AmazonClientException;import com.amazonaws.AmazonServiceException;import com.amazonaws.auth.BasicAWSCredentials;import co......

经常把天聊死的胖子
57分钟前
4
0
linux下查看cpu、memo、io、swap性能数据脚本

直接贴脚本: 1、cpu #!/bin/bashCurrentDate=`date -d today '+%Y%m%d'`CurrentTime=`date -d today '+%Y%m%d%H%M'`mytext="$CurrentTime\t`top -b -n 1 | grep Cpu\(s\......

郑加威
今天
5
0
MySQL之——查询重复记录、删除重复记录方法大全

MySQL之——查询重复记录、删除重复记录方法大全

安小乐
今天
2
0
spring容器启动,停止,关闭事件监听-ApplicationEvent

ApplicationEvent ApplicationEvent相当于一个事件,所有自定义事件都需要继承这个抽象类。在Eclipse中Ctrl+Shift+H调用类的层次结构列表,可以看到如下 Application下抽象子类ApplicationCo...

tantexian
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部