Я не знаю, что я делаю неправильно, но я просто не могу получить docker-compose up
, чтобы использовать последнее изображение из нашего реестра, без предварительного удаления старых контейнеров из системы. Похоже, что compose использует ранее начатое изображение, даже если прикрепление докеры создало более новое изображение.
Я посмотрел на Как заставить docker-compose всегда воссоздавать контейнеры из свежих изображений?, которые, похоже, были похожи на мою проблему, но ни одна из предоставленных решения для меня работают, так как я ищу решение, которое я могу использовать на рабочем сервере, и там я не хочу удалять все контейнеры, прежде чем запускать их снова (возможна потеря данных?). Я хотел бы только создать новую версию измененных изображений, вытащить их, а затем перезапустить службы с помощью этих новых изображений.
Я создал простой тестовый проект для этого, в котором единственная цель - увеличить версию nr для каждой новой сборки. Версия nr отображается, если я просматриваю созданный сервер nginx (это работает как ожидается локально).
версия докера: 1.11.2 версия для докеров: 1.7.1 ОС: проверено как на CentOS 7, так и на OS X 10.10 с помощью панели инструментов docker
Мой 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 и необходимые файлы Dockerfiles для создания служб nginx и php, вывод, который я получаю, не является последним номером версии, как было отмечено в реестре или показан в файле 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 rm -f
перед запуском up
снова, даже на рабочих серверах? Или я делаю что-то против зерна здесь, поэтому он не работает?
Цель состоит в том, чтобы построить сборку сборки и создать тегированные версии изображений, необходимых в файле docker-compose.yml, вставить их в наш частный реестр, а затем для "выпуска на производственный этап" просто скопировать докеры -compose.yml на производственный сервер и запустите docker-compose pull && docker-compose -f docker-compose.yml up -d
для нового изображения, которое начнется в процессе производства. Если у кого-то есть советы по этому поводу или может указывать на учебник по лучшим практикам для такого рода настроек, которые также будут очень ценными.