我不知道我在做什么错,但是我docker-compose up
必须先从系统中完全删除旧容器,然后才能从注册表中使用最新映像。即使docker-compose pull获取了新的映像,compose似乎仍在使用先前启动的映像。
我研究了如何使docker-compose始终从新映像重新创建容器?这似乎与我的问题相似,但是那里提供的解决方案都不适合我,因为我正在寻找可以在生产服务器上使用的解决方案,因此我不想在启动它们之前先删除所有容器再次(可能丢失数据?)。我只想检测更改图像的新版本,将它们拉出,然后使用这些新图像重新启动服务。
为此,我创建了一个简单的测试项目,其中唯一的目标是在每个新版本中增加版本nr。如果浏览到创建的Nginx服务器,则会显示nr版本(这在本地可以正常工作)。
docker版本:1.11.2 docker-compose版本:1.7.1 OS:已使用docker-toolbox在CentOS 7和OS X 10.10上进行了测试
我的docker-compose.yml:
version: '2'
services:
application:
image: ourprivate.docker.reg:5000/ourcompany/buildchaintest:0.1.8-dev
volumes:
- /var/www/html
tty: true
nginx:
build: nginx
ports:
- "80:80"
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
php:
container_name: buildchaintest_php_1
build: php-fpm
expose:
- "9000"
volumes_from:
- application
volumes:
- ./logs/php-fpm/:/var/www/logs
在我们的jenkins服务器上,我运行以下命令来构建和标记图像
cd $WORKSPACE && PROJECT_VERSION=$(cat VERSION)-dev
/usr/local/bin/docker-compose rm -f
/usr/local/bin/docker-compose build
docker tag ourprivate.docker.reg:5000/ourcompany/buildchaintest ourprivate.docker.reg:5000/ourcompany/buildchaintest:$PROJECT_VERSION
docker push ourprivate.docker.reg:5000/ourcompany/buildchaintest
这似乎在做应该做的事情,因为每次构建完成且版本nr发生变化时,我都会在存储库中获得一个新的版本标签。
如果我现在跑步
docker-compose pull && docker-compose -f docker-compose.yml up -d
在我计算机上的文件夹中,其中的内容仅是docker-compose.yml和构建nginx和php服务所需的Dockerfiles,我得到的输出不是最新版本号,因为它已在注册表中标记或显示在docker-compose.yml(0.1.8)中,但之前的版本是0.1.7。但是pull命令的输出将建议获取图像的新版本:
Pulling application (ourprivate.docker.reg:5000/ourcompany/buildchaintest:latest)...
latest: Pulling from ourcompany/buildchaintest
Digest: sha256:8f7a06203005ff932799fe89e7756cd21719cccb9099b7898af2399414bfe62a
Status: Downloaded newer image for docker.locotech.fi:5000/locotech/buildchaintest:0.1.8-dev
只有我跑步
docker-compose stop && docker-compose rm -f
然后运行docker-compose up
命令以获取新版本以按预期方式显示在屏幕上。
这是docker-compose的预期行为吗?也就是说,即使在生产服务器上,我也应该始终docker-compose rm -f
在up
再次运行之前执行一次吗?还是我在对这里的谷物做些什么,这就是为什么它不起作用的原因?
目标是让我们的构建过程构建并创建docker-compose.yml中所需图像的标记版本,将其推送到我们的私有注册表中,然后进行“发布到生产步骤”以简单地复制docker-compose。 yml到生产服务器,并运行,docker-compose pull && docker-compose -f docker-compose.yml up -d
以使新映像开始在生产中使用。如果有人对此有建议,或者可以为这种设置指向最佳实践教程,也将不胜感激。
docker-compose up -d --force-recreate
没有工作吗?