【发布时间】:2018-08-25 09:07:14
【问题描述】:
我目前正在使用 git 在不同的主机上部署我的应用程序。我的代码库正在安装到正在运行的 Docker 映像:
docker-compose.yml
services:
app:
image: my.registry.net:5000/my/app
volumes:
- .:/app
# [...]
所以我的部署是这样的:
$ git pull
$ docker-compose build && docker-compose up -d
$ docker-compose exec app some_dependencies_installation_command
$ docker-compose exec app some_cache_clearing_command
这对我来说似乎错误,原因有很多,你可以想象。虽然如果出现问题,我仍然可以恢复到我以前的 git 发布标签。
我想通过将代码库烘焙到映像中来简化我的部署,因此我不再使用 git 进行部署,而是依赖 image pull。如果您不这样做以及为什么不建议,请随时告诉我。
我很想简单地将我的代码库添加到图像的末尾,并在主机中仅安装所需的东西:
Dockerfile
# [...]
ADD . /app
docker-compose.prod.yml
services:
app:
image: my.registry.net:5000/my/app
volumes:
- ./config.yml:/app/config.yml
- ./logs:/app/logs
- ./cache:/app/cache
- ./sessions:/app/sessions
# [...]
因此,一旦构建完成,我应该只需要部署我的图像:
$ docker-compose pull && docker-compose up -d
这会是个好方法吗?如何对我的图像进行版本控制,以便在出现问题时还原它(因为Dockerfile 实际上从不改变)?另外,不是每次都依赖 Dockerfile 的一层来提取整个代码库,而不仅仅是 diff(就像 git 一样)?
【问题讨论】:
标签: git docker production-environment