与vagrant,docker和git的项目布局

ant*_*nko 8 php git vagrant docker

所以我最近发现了docker和vagrant,我正在开始一个新的Php项目,我想要同时使用它们:

Vagrant为了拥有一个所有开发人员都可以使用的可互换环境.

Docker用于生产,但也在流浪机内,因此开发环境尽可能地与生产环境相似.

第一种方法是使用此布局将所有定义文件与源代码一起放在同一存储库中:

/docker
   /machine1-web_server
       /Dockerfile
   /machine2-db_server
       /Dockerfile
   /machineX
       /Dockerfile
/src
   /app
   /public
   /vendors
/vagrant
   /Vagrantfile
Run Code Online (Sandbox Code Playgroud)

因此,流氓机器在配置时运行所有docker"机器"并正确设置数据库和源代码.

这是一个好方法吗?我仍在试图弄清楚这在部署到生产方面的效果如何.

Tho*_*eil 7

这是一个好方法吗?

是的,至少它几个月后对我有用.

不同的是我也有一个docker-compose.yml文件.

在我Vagrantfile的第一个配置部分安装docker,pip和docker-compose:

config.vm.provision "shell", inline: <<-SCRIPT
    if ! type docker >/dev/null; then
        echo -e "\n\n========= installing docker..."
        curl -sL https://get.docker.io/ | sh
        echo -e "\n\n========= installing docker bash completion..."
        curl -sL https://raw.githubusercontent.com/dotcloud/docker/master/contrib/completion/bash/docker > /etc/bash_completion.d/docker
        adduser vagrant docker
    fi
    if ! type pip >/dev/null; then
        echo -e "\n\n========= installing pip..."
        curl -sk https://bootstrap.pypa.io/get-pip.py | python  
    fi
    if ! type docker-compose >/dev/null; then
        echo -e "\n\n========= installing docker-compose..."
        pip install -U docker-compose
        echo -e "\n\n========= installing docker-compose command completion..."
        curl -sL https://raw.githubusercontent.com/docker/compose/$(docker-compose --version | awk 'NR==1{print $NF}')/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
    fi
SCRIPT
Run Code Online (Sandbox Code Playgroud)

最后是一个触发docker-compose的配置部分:

config.vm.provision "shell", inline: <<-SCRIPT
    cd /vagrant 
    docker-compose up -d 
SCRIPT
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以从vagrant构建和启动docker容器,但是使用docker-compose可以将我的Vagrantfile中的任何docker特性外部化.因此,这个Vagrantfile可以在没有更改的情况下重用于其他项目; 你只需提供一个不同的docker-compose.yml文件.

我做的另一件事是将项目放在Vagrantfile项目的根目录(而不是vagrant目录),因为它是人类和工具(某些IDE)期望找到它的地方.PyCharm确实如此,PhpStorm可能会这样做.

我还把我的docker-compose.yml文件放在项目的根目录上.

最后,为了开发我只是去我的项目目录并启动vagrant,告诉docker-compose(最终构建)运行docker容器.


我仍在试图弄清楚这在部署到生产方面的效果如何.

对于部署到生产,通常的做法是通过在私有 docker注册表上发布docker镜像到ops团队.您可以在自己的基础架构上托管此类注册表,也可以使用提供它们的在线服务(如Docker Hub).

还为ops团队提供了一个docker-compose.yml文件,该文件将定义如何运行容器并链接它们.请注意,此文件不应使用该build:指令,而应依赖于该image:指令.谁想在部署到生产时构建/编译东西?

这篇Docker博客文章可以帮助您了解如何使用docker-compose和docker-swarm在集群上进行部署.

  • 我使用`phusion/ubuntu-14.04-amd64`框.我尝试了流浪的码头工具提供商,但对结果不满意.它是几个月前所以也许它现在效果更好,但使用盒子+配置码头工具让你掌控一切.我的Vagrant文​​件位于https://github.com/thomasleveil/vagrant-phusion-docker/blob/master/Vagrantfile (2认同)