最近在工作场所,需要配置一个GitLab,来供大家共享源代码。考虑到未来想在同时在一台机器上架Daily Build,于是选择了在Windows平台下,进行架设。
说到Windows平台的架设,一个比较简单无脑的方式是用 Docker Toolbox 一键配置出 VirtualBox 虚拟机环境下的 Boot2Docker,以进行容器操作。之后便可以根据 GitLab的Docker源 配置出来了。

不过,如果只采用其附带的Kitematic进行内部地址,到外部(Windows)系统的文件共享时,只能共享到 C:\User\当前用户\ 目录下的路径。这是由于在自动配置Boot2Docker时,仅仅将 C:\User\当前用户\ 目录,共享到了系统目录,自然也就只能设定那个目录下的东西了。

为此,我们需要手动地将额外的目录绑定到虚拟机环境内。下面是我编写的能实现这个功能的脚本(在 Docker Quickstart Terminal 产生的命令行中调用后,即可将当前的Docker Machine与SRC_HOST_PATH目录相连接):

Boot2Docker启动时,会检测在VirtualBox中共享的文件夹,然后自动地挂载到 / 目录下。如你共享了外部系统的“E:\”目录,共享名称为“f/”,Boot2Docker会将这个共享挂载到 /f 目录下。我们可以利用这点,将其他的文件夹挂载进去。(Ref:剖析 boot2docker.iso

这里用到了VBoxManage,一个命令行下变更虚拟机属性的工具,来进行修改。一是增加共享文件夹目录,二是允许其在目录下建立symlink(GitLab新建Repo的过程涉及到了Symlink)。(Ref:VBoxManage

注:尽管你允许了,但是一般而言,你还需要使用管理员权限运行虚拟机,才能建立。或者你可以打开“secpol.msc”,本地策略->用户权限分配->创建符号连接,在里面加入Everyone,以允许虚拟机在普通权限建立。(Ref: VirtualBox共享文件夹无法创建符号连接的解决方法

之后将部署文件docker-compose.yml中volume相关的内容改成刚才新挂载进去的目录就可以了:

之后启动就会将所有运行相关文件,保存到你想要的外部目录了。

PS1:记得改postgresql的数据目录!!!!!!!(Ref: lose data when I restart the container. #872
PS2:踩坑好难过Q Q
PS3:外部可以再拿nginx反向代理一下
PS4:docker真好玩真好玩,之后有分布式相关的东西一定要试试做docker镜像一键批量部署,想想就刺激(这算运维的工作…?)
PS5:f7(eiki)喜欢!