这是一个好方法吗?
是的,至少几个月以来它对我有用。
不同的是我还有一个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
最后是触发 docker-compose 的配置部分:
config.vm.provision "shell", inline: <<-SCRIPT
cd /vagrant
docker-compose up -d
SCRIPT
有other ways 可以从 vagrant 构建和启动 docker 容器,但是使用 docker-compose 允许我将任何 docker 特性从我的 Vagrantfile 外部化。因此,这个 Vagrantfile 可以在不改变的情况下用于其他项目;你只需要提供一个不同的docker-compose.yml 文件。
我做的另一件不同的事情是将Vagrantfile 放在项目的根目录中(而不是放在vagrant 目录中),因为这是人类和工具(某些IDE)期望找到它的地方。 PyCharm 有,PhpStorm 可能有。
我还将docker-compose.yml 文件放在我的项目的根目录下。
最后,为了进行开发,我只需转到我的项目目录并启动 vagrant,它会告诉 docker-compose(最终随后构建)运行 docker 容器。
我仍在尝试弄清楚这将如何在部署到生产中发挥作用。
为了部署到生产环境,一种常见的做法是通过将 docker 镜像发布到 private docker registry 上,将它们提供给运维团队。您可以在自己的基础架构上托管此类注册表,也可以使用提供它们的在线服务,例如 Docker Hub。
还为操作团队提供docker-compose.yml 文件,该文件将定义如何运行容器并链接它们。请注意,此文件不应使用build: 指令,而应依赖image: 指令。谁想在部署到生产环境时构建/编译东西?
这个Docker blog article 可以帮助弄清楚如何使用 docker-compose 和 docker-swarm 在集群上进行部署。