我的Docker映像构建在Jenkins CI服务器上,并被推送到我们的私有Docker Registry。我的目标是使用docker- compose配置环境,该环境始终会启动映像的原始构建状态。
我目前在不同的机器上使用docker-compose 1.3.2和1.4.0,但是我们之前也使用了旧版本。
我总是使用docker-compose pull && docker-compose up -d命令从注册表中获取新图像并启动它们。我相信我的首选行为在某个时间点之前都可以按预期工作,但是从那时起,它docker-compose up开始重新运行以前停止的容器,而不是每次都启动原始构建的映像。
docker-compose pull && docker-compose up -d
docker-compose up
有办法摆脱这种行为吗?这样可以成为在docker-compose.yml配置文件中连接的一种方式,以使其不依赖于每次调用时“不要忘记”命令行上的某些内容吗?
ps。除了找到一种实现目标的方法外,我还想进一步了解这种行为的背景。我认为Docker的基本思想是构建一个不变的基础架构。docker- compose的当前行为似乎与这种方法完全冲突..还是我在这里错过了几点?
docker-compose up --force-recreate是一个选择,但是如果您将其用于CI,我将以构建开始,docker-compose rm -f以停止并删除容器和卷(然后通过上拉并跟随它)。
docker-compose up --force-recreate
docker-compose rm -f
这是我用的:
docker-compose rm -f docker-compose pull docker-compose up --build -d # Run some tests ./tests docker-compose stop -t 1
重新创建容器的原因是保留可能使用的任何数据量(同时它也会使up速度更快)。
up
如果您正在执行CI,则不需要这样做,因此只需删除所有内容即可获得所需的内容。
更新:使用1.7 up --build中添加的功能docker-compose
up --build
docker-compose