项目布局与流浪者,码头和混帐

所以我最近发现了docker和vagrant,并且我开始了一个新的Php项目,我在这个项目中使用了两个:

Vagrant为了有一个可供所有开发人员使用的可互换环境。

用于生产的Docker,也包含在流浪机器内部,因此开发环境与生产环境尽可能接近。

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

/docker
   /machine1-web_server
       /Dockerfile
   /machine2-db_server
       /Dockerfile
   /machineX
       /Dockerfile
/src
   /app
   /public
   /vendors
/vagrant
   /Vagrantfile

因此,流水线机器在运行时会运行所有码头“机器”,并正确设置数据库和源代码。

这是一个好方法吗? 我仍然试图弄清楚这将如何在部署到生产方面发挥作用。


这是一个好方法吗?

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

区别在于我也有一个docker-compose.yml文件。

在我的Vagrantfile有第一个供应部分安装了Vagrantfile ,pip和docker-compose:

config.vm.provision "shell", inline: <<-SCRIPT
    if ! type docker >/dev/null; then
        echo -e "nn========= installing docker..."
        curl -sL https://get.docker.io/ | sh
        echo -e "nn========= 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 "nn========= installing pip..."
        curl -sk https://bootstrap.pypa.io/get-pip.py | python  
    fi
    if ! type docker-compose >/dev/null; then
        echo -e "nn========= installing docker-compose..."
        pip install -U docker-compose
        echo -e "nn========= 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

最后是一个启动码头组件的供应部分:

config.vm.provision "shell", inline: <<-SCRIPT
    cd /vagrant 
    docker-compose up -d 
SCRIPT

还有其他一些方法可以从流浪汉中构建和启动泊坞窗容器,但使用docker-compose可以让我将我的流浪文件中的任何泊坞窗特性外化。 因此,这个Vagrantfile可以在没有变化的情况下重用于其他项目; 你只需要提供一个不同docker-compose.yml文件。

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

我也把我docker-compose.yml文件放在我的项目的根目录下。

最后,为了开发,我只需进入我的项目目录并启动流浪汉,告诉码头合成(最终构建)然后运行码头集装箱。


我仍然试图弄清楚这将如何在部署到生产方面发挥作用。

对于部署到生产环境,通常的做法是将泊坞窗图像发布到私人码头注册中心,将其提供给操作团队。 您可以在您自己的基础架构上托管这样的注册表,也可以使用提供它们的在线服务,例如Docker Hub。

还要向操作团队提供一个docker-compose.yml文件,该文件将定义如何运行容器并将其链接起来。 请注意,该文件不应该使用build:指令,而应该使用image:指令。 谁希望在部署到生产时构建/编译内容?

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


我也推荐使用docker进行开发,以获得完全的依赖关系复制。 Docker Compose是关键工具。

你可以使用这样的策略:

泊坞窗,compose.yml

db:
  image: my_database_image
  ports: ... 

machinex:
  image: my_machine_x_image

web:
  build: .
  volumes:
    - '/path/to/my/php/code:/var/www'

在您的Dockerfile中,您可以指定运行PHP代码的依赖关系。

此外,我建议保持my_database_imagemy_machine_x_image项目与他们的Dockerfiles分离,因为完美可以用于其他项目。

如果您使用的是Mac,则您已经在使用名为boot2docker的VM

我希望这有帮助。

链接地址: http://www.djcxy.com/p/30145.html

上一篇: Project layout with vagrant, docker and git

下一篇: How to automatically update your docker containers, if base