使用docker provisioner了解vagrant

时间:2014-08-17 00:59:48

标签: vagrant docker vagrantfile

所以我的目标是让Vagrant为我提供一个可用作rails web应用程序开发环境的VM。我对Vagrant,Docker等非常非常新,并想检查这是否有意义:

我应该创建一个Docker镜像还是两个?我的想法是,一个图像用于rvm,ruby和rails,另一个图像用于Apache。

目标可以分发给少数人,然后他们可以轻松获得完全相同的环境。

这是我目前的Vagrantfile:

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.box = "phusion/ubuntu-12.04-amd64"
    config.vm.network "forwarded_port", :guest => 80, :host => 5000

    # Share the docker configs
    config.vm.synced_folder "./docker", "/docker"

    config.vm.provision "docker" do |d|
        d.build_image "-t me/rvm-dev /docker/rvm-dev"
        d.run "me/rvm-dev"

    end
    config.vm.host_name = "coursera-rail.dev"
    config.vm.network :forwarded_port, guest:80, host:8080  
end

这是我当前(可能是错误的)Dockerfile (顺便说一句,我试图找到一些关于创建“docker”用户帐户的良好指导,因此我不会以root身份运行所有内容)

## Dockerfile
FROM ubuntu:latest

RUN apt-get update
RUN apt-get upgrade -y

RUN apt-get install -y curl

RUN mkdir -p /tmp/downloads

## Install RVM, Ruby, Rails
RUN cd /tmp/downloads
RUN \curl -L https://get.rvm.io | bash -s stable --ruby --rails

最后,上面的工作,如果我使用vagrant ssh我可以进入我的VM,但显然我不能使用RVM而不用docker运行-i -t me / rvm-dev并获得带有docker的shell 。这应该是工作流吗?

1 个答案:

答案 0 :(得分:-1)

以我的拙见,最好的流程是

1)将您的应用和数据库堆栈分成流浪盒

2)在宿主(物理机器)上运行docker,并在流浪盒内运行数据库实例(mysql等)。

选项一是最好的,因为你是"沙盒" Vagrant中的堆栈(DB和APP)的两个层因此将操作系统留在本地计算机(Windows,Linux,Mac OSX)上。当然,您可以在物理计算机上安装/运行I​​DE。