Я не знаю, що я роблю неправильно, але я просто не можу docker-compose up
використовувати останнє зображення з нашого реєстру, не попередньо повністю видаливши старі контейнери з системи. Схоже, компонування використовує попередньо розпочате зображення, навіть незважаючи на те, що витягування докером-композицією отримало нове зображення.
Я розглянув Як змусити docker-compose завжди відтворювати контейнери зі свіжих зображень? що здавалося схоже на мою проблему, але жодне із запропонованих рішень не працює для мене, оскільки я шукаю рішення, яке я можу використовувати на робочому сервері, і там я не хочу видаляти всі контейнери перед їх запуском знову (можлива втрата даних?). Я хотів би для compose лише виявити нову версію змінених зображень, витягнути їх, а потім перезапустити служби з цими новими зображеннями.
Я створив простий тестовий проект для цього, в якому єдиною метою є отримання версії nr, яка збільшується при кожній новій побудові. Версія nr відображається, якщо я переглядаю створений сервер nginx (це працює локально).
версія docker: 1.11.2 версія docker-compose: 1.7.1 ОС: тестована як на CentOS 7, так і на OS X 10.10 за допомогою docker-toolbox
Мій 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 та необхідні файли Docker для створення служб 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
команду, чи отримаю я, що нова версія відображається на екрані, як очікувалося.
Це передбачувана поведінка докера-композитора? тобто я повинен завжди робити a docker-compose rm -f
перед запуском up
знову, навіть на робочих серверах? Або я тут роблю щось проти зерна, через що воно не працює?
Мета полягає в тому, щоб побудувати наш процес побудови та створити позначені версії зображень, необхідних у docker-compose.yml, перенести їх до нашого приватного реєстру, а потім для "звільнення до виробничого кроку" просто скопіювати docker-compose. yml на робочий сервер і запустіть a docker-compose pull && docker-compose -f docker-compose.yml up -d
для запуску нового образу у виробництво. Якщо хтось має поради щодо цього або може вказати на підручник з найкращих практик для такого роду налаштування, який також був би дуже вдячний.
docker-compose up -d --force-recreate
не працював?