LINUX.ORG.RU
ФорумAdmin

В чем преимущество контейнеризации комплексного софта, если обновление ломает контейнер?

 , , ,


0

2

В контексте конечного пользователя (админа, который поднимает сервисы в докере на сервере). Вот есть какой-нибудь условный некстклауд (пусть даже на AIO, а простой официальный контейнер). Я изучил докер специально, чтобы не учить, как там внутри некстклауда все утроено, как поднимать каждую часть этого сервиса, как их друг к другу подгонять. Мне просто нужно готовый для работы образ с беспроблемными обновлениям. Я админ локалхоста с десятком сервисвом на своем сервере для бытовых нужд. Мне лично не хочется становиться разработчиком, чтобы исправлять ошибки, тратить на это время. Я поддерживаю проекты денежкой. Хочу использовать их и спать спокойно.

Вот я поднял свой некстклауд, тогда еще была по-моему 20 версия. И каждое обновление (да, буквально каждое), даже какая-то минорщина, ломает мне контейнер. Причем ошибки хрен определишь. В логах докера пустота типо все ок (запросы/ответы, дб работает), а кто хоть раз смотрел логи самого НК, там черт ногу сломит. В итоге, я минорщиу вообще не накатываю, а мажорные версии ставлю с нуля, перегоняя базу данных (благо, версия не меняется) и директорию с данными. Хотя и это не гарантия, на 23 и 24 версию и там были проблемы, на решение которых потратил часов 5.

Я допускаю, что может я такой криворукий или не понимаю назначения докера (ну да, может оно в первую очередь для разработчиков, но куча энетрпрайз реди софта именно в докере же поставляется, значит и ориентация на такое использование есть и гарантирована работа). В итоге я просто с этим докером страдаю (как мышка и кактус, ага). Дело не только в некстклауде, та же ситуация у меня и с другими контейнерами, типо vaultwarden, jellyfin и другими. В итоге может проще разобраться как вручную подгонять, чтобы понимать, как решать проблемы, а не создавать еще один слой проблем для себя в виде докера? Или проще вообще забить на обновления?

Тема просто для обсуждения. Хочу услышать мнения сторонников/противников использования докера и контейнеров. Свою историю выложил как крик души. Ну и может кто подскажет пути обновления образов контейнеров с минимальной головной болью. Рекомендуемое

docker compose down
docker compose pull
docker compose up -d

создает больше проблем…

Перемещено hobbit из general

Софт в контейнерах должен персистентное состояние хранить в отдельном вольюме. Останавливаешь один контейнер с одной версией софта, запускаешь другой контейнер с другой версией софта, указывая тот же самый вольюм. Имхо.

iliyap ★★★★★
()

Как ты обновляешь docker контейнер?

Просто делаешь обновление образа и запускаешь контейнер с нового образа с пробросом директорий с данными и базой?

По сути docker - это «бутылка» в которой запускаются только нужные процессы.

Чтобы подключиться в запущенный докер и посмотреть состояние запущенных процессов делай следующее:

  • в выводе docker ps смотришь имя запущенного процесса docker, последнее поле;
  • далее подключаешься в консоль запущенного контейнера docker exec -it имя_процесса /bin/bash и смотришь состояние сервисов.

Чтобы посмотреть что вообще в докере и как запускается делай следующее, вот на примере контейнера nginx:

docker image inspect nginx:latest  | less

Здесь ты увидишь как собирался контейнер и увидишь команду запуска в поле «CMD», которая запускает сервисы (процессы) в контейнере.

После подключения в консоль докера проверяй, что требуемые процессы запущены, если они не запустились смотри как они запускаются, пробуй запустить и смотри их логи.

Докер контейнер позволяет иметь изолированное окружение от основной системы для запуска нужных тебе программ с минимизацией потребления ресурсов. Т.к. в отличие от полноценной виртуальной машины запускаются только конкретные процессы и в память загружаются только их зависимости. Плюс облегчает переносимость и обеспечивает повторяемость среды.

kostik87 ★★★★★
()

Пользуюсь Nextcloud в контейнере на основе «официального» fpm-образа. Ничего не ломается.

Выше написали, что нужно выносить отдельно persistent - это /var/www/html и ничего не будет ломаться, при повышении версии в контейнере будет происходить апдейт, ну и не забывайте обновлять приложения для Nextcloud.

https://hub.docker.com/_/nextcloud раздел Persistent data.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от iliyap

У меня так и настроено. Персистентные база данных и директория с пользовательскими данными.

@kostik87, тушу и удаляю контейнер, пулю новый имедж, поднимаю контейнер. Через композ все. Вот мой для НС

services:
  app:
    image: nextcloud:stable
    container_name: nextcloud
    hostname: home-server
    restart: always
    links:
      - db
    volumes:
      - /docker/containers/nextcloud/:/var/www/html
      - /docker/containers/nextcloud/apps:/var/www/html/custom_apps
      - /docker/containers/nextcloud/config:/var/www/html/config
      - /docker/containers/nextcloud/data:/var/www/html/data
    environment:
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=
  db:
    image: mariadb:10.5
    container_name: nextcloud-db
    hostname: home-server
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW 
    volumes:
      - /docker/containers/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=
      - MYSQL_PASSWORD=
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

Просто делаешь обновление образа и запускаешь контейнер с нового образа с пробросом директорий с данными и базой?

Получается так.

Плюс облегчает переносимость и обеспечивает повторяемость среды

Раз повторяемость обеспечена, то тот, кто создал обновленный образ, должен гарантировать его работу. Почему тогда его обновление, что по суди удалить старый образ, установить новый, добавить пользовательские данные, не работает? Где же это преимущество на практике?

Cellaheea
() автор топика
Ответ на: комментарий от vvn_black

Ну так у меня так и настроеное, только не fpm образ, а обычный. Выше описал, какие у меня бинды на директории. С ними постоянно ломается.

Cellaheea
() автор топика

или не понимаю назначения докера

Именно. Докер он чтобы избавить админов от головной боли когда разрабы хардкодят локалхост:3000 или когда вместо установочного пакета выдают файлик с неизвестным набором зависимостей.

Докер контейнеры не обновляют. Их пересобирают целиком при выходе новой версии или секьюрити патча на любой из установленных внутрь пакетов. Данные у тебя внутри докера лежать не должны.

ya-betmen ★★★★★
()
Ответ на: комментарий от Cellaheea

¯\_(ツ)_/¯

Я целиком каталог монтирую из вне, без разделения на app, config и data. Может, что с правами у вас.

Ну, и БД (PostgreSQL) у меня в отдельном контейнере.

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 3)
Ответ на: комментарий от ya-betmen

Зачем к словам придираться..? Обновление я описал. Это и есть удалить старый контейнер, установить новый из обновленного образа. Я не имел ввиду обновление внутри старого контейнера на манер обновления через пакетный менеджер.

@vvn_black, права дефолтные, ничего не менял. Да и в логах по грепу нет ругани на привилегии или невозможность доступа. Дистр тоже вполне себе обычный - дебиан 11. БД у меня тоже в отдельном контейнере, это видно из композ файла. Единственное, у меня не постргрес, а рекомендованная мариа. Могут быть проблемы из-за одной БД, у которой персистентная база? Да еще и рекомендованной?

Cellaheea
() автор топика

Могу предположить, что у тебя не обновляется схема базы данных. Т.е. база у тебя от 20.0, ты её остановил, накатил nextcloud 23.0, в котором схема изменилась, а патчи для обновления базы никто не применял. Отсюда и ошибки. В логах nextcloud'а должно быть видно. При штатном обновлении через вебморду или консоль nextcloud'а эти патчи применяются скриптами обновления. Если хочется заморочиться с докерами, надо выковырять команду для раскатки апдейтов базы, и положить её в контейнер с проверкой перед стартом инстанса всего nextcloud.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

Это что за подход такой, если это так, менять схему базы данных каждое обновление? Они что, об обратной совместимости вообще не думают? Это же вроде энтерпрайз реди решение.

Cellaheea
() автор топика
Ответ на: комментарий от Cellaheea

Какие сообщения в логах запуска nextcloud в контейнере ты видишь?

В логах прочих сервисов, которые запускаются.

В любом случае нужно смотреть логи.

Как подключиться к консоли контейнера я описал выше.

Даже при обновлении nextcloud на обычной системе или виртуальной машине, а не в контейнере, скорее всего, будут проблемы и нужно смотреть логи.

И выполнять необходимые операции согласно рекомендаций nextcloud по переходу на более новую версию программного обеспечения.

kostik87 ★★★★★
()
Ответ на: комментарий от Cellaheea

Что в документации nextcloud по обновлению до новой версии тextcloud написано - то и делай.

Ты открывал документацию? А логи смотрел?

kostik87 ★★★★★
()

В итоге может проще разобраться как вручную подгонять

Использую lxc контейнер, который в этом плане ничем не отличается от виртуальной машины. С обновлением nextcloud’а разбираюсь каждый раз при выходе мажорной версии, так как обновляются зависимости, какие-то приложения не обновляются и т.д.

В общем случае обновляю через вебапдейтер, далее 50/50 или надо смотреть логи и искать почему не работает или нет.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 1)
Ответ на: комментарий от Cellaheea

Во-первых, я не знаю, меняют ли они базу при каждом апдейте или нет. Это только лишь моё предположение. Во-вторых при изменении базы любое приложение с большой вероятностью свалится, если версия базы не совпадает. Другое дело, что кто-то свалится молча, а кто-то об этом явно напишет. Может быть в логах что-то об этом есть. Если в логах искать тяжело, можно включить дебаг в php и ошибки будут видны прямо в браузере. Ну и в-третьих, при обновлении nextcloud штатными средствами(веб-интерфейс или консоль), работает без сбоев.

shell-script ★★★★★
()
Ответ на: комментарий от kostik87

И выполнять необходимые операции согласно рекомендаций nextcloud по переходу на более новую версию программного обеспечения.

У nextcloud для этого есть специальные скрипты.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

В любом случае ему их нужно вызвать в контейнере, а для этого подключиться в консоль запущенного контейнера, либо если возможно, запустить в WEB-интерфейсе nextcloud.

Я ставил и настраивал owncloud, правда на полноценную ВМ и несколько раз его обновлял.

Но было это уже давно, нюансов не помню.

kostik87 ★★★★★
()

Вот я поднял свой некстклауд, тогда еще была по-моему 20 версия. И каждое обновление (да, буквально каждое), даже какая-то минорщина, ломает мне контейнер.

Ты делаешь что-то очень не так, я перешел на nextcloud со стандалон-инсталляции в контейнер где-то в районе 17 версии кажется и с тех пор не испытывал проблем.

Последнюю проблему, что помню - это смена метода шифрования, вот там да, там был ад.

Pinkbyte ★★★★★
()
Ответ на: комментарий от kostik87

Можно обновить уже установленную версию через веб, оно накатит изменения в базу, потом раскатать контейнер с новой версией. Но тут тоже есть подводные камни. Например, при изменении формата конфигов, часть настроек может не мигрировать со старой версии в новую.

Если сначала накатить новую версию nextcloud, а потом из неё прогнать скрипты, тоже могут быть проблемы - новая версия всё-таки рассчитана на то, что скрипты уже были запущены ранее.

В общем, я не вижу сейчас готового решения, которое даст стопроцентную гарантию беспроблемного обновления в докере. Это надо изучать и возможно руками дорабатывать.

Я сам уже несколько лет использую nextcloud, но без докера и обновляюсь при каждом апдейте.

shell-script ★★★★★
()
Ответ на: комментарий от Cellaheea

В упор не вижу где у тебя тут NEXTCLOUD_UPDATE=1 - без него при мажорных апдейтах надо ЕМНИП руками через occ обновляться.

Далее - cron ты как запускаешь? WebCron? Потому что отдельного контейнера для cron-задач я у тебя тут тоже не вижу.

Ну и список используемых плагинов было бы неплохо узнать. Я сам пользуюсь парочкой плагинов из категории unsupported, они пока тьфу-тьфу не сломались, но вообще могут.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

В упор не вижу где у тебя тут NEXTCLOUD_UPDATE=1

Ага. Вот оно решение. Разработчики предусмотрели апдейты в настройках докера, если я правильно понял.

shell-script ★★★★★
()
Ответ на: комментарий от Cellaheea

Вот, заодно обновился (просто поменял версию образа с докер хаба), не мажорное, конечно:

Initializing nextcloud 24.0.5.1 ...
Upgrading nextcloud from 24.0.2.1 ...
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
Turned on maintenance mode
Updating database schema
Updated database
Updating <circles> ...
Updated <circles> to 24.0.1
Updating <notifications> ...
Updated <notifications> to 2.12.1
Update app bookmarks from App Store
Starting code integrity check...
Finished code integrity check
Update successful
Turned off maintenance mode
Resetting log level
The following apps have been disabled:
 bookmarks
 circles
 notifications
Initializing finished
[25-Sep-2022 11:43:53] NOTICE: fpm is running, pid 1
[25-Sep-2022 11:43:53] NOTICE: ready to handle connections 

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от shell-script
The install and update script is only triggered when a default command is used (apache-foreground or php-fpm). If you use a custom command you have to enable the install / update with

    NEXTCLOUD_UPDATE (default: 0)

Ну, как я понимаю это для не стандартного обновления.

vvn_black ★★★★★
()

та же ситуация у меня и с другими контейнерами, типо vaultwarden, jellyfin и другими

Наводит на мысли, что всё-таки, что-то не до конца правильно с persist data.

vvn_black ★★★★★
()
Ответ на: комментарий от Cellaheea

Тогда это вопрос к тем кто эти докеры собирает.

ya-betmen ★★★★★
()

Сюр какой-то, изза пыхоскрипта столько страданий.

Anoxemian ★★★★★
()

В чем преимущество контейнеризации комплексного софта

По идее, поддерживает штаны недоадминам-недопрограммистам девопсам

, если обновление ломает контейнер?

Утирает нос им же, когда не все обновления одинаково полезны.

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

По идее, поддерживает штаны недоадминам-недопрограммистам девопсам
По идее

Правильно сказано!

Утирает нос им же, когда не все обновления одинаково полезны.

Что логично. «Я нажала кнопочку и у меня все сломалось».

anc ★★★★★
()
Ответ на: комментарий от Cellaheea

Интересно как то. Внутренняя сетка не описана (и порты) а у обоих контейнеров :

hostname: home-server

да и это :

      - /docker/containers/nextcloud/:/var/www/html
      - /docker/containers/nextcloud/apps:/var/www/html/custom_apps
      - /docker/containers/nextcloud/config:/var/www/html/config
      - /docker/containers/nextcloud/data:/var/www/html/data

Я не помню как там овервлей работает внутри одного контейнера. Может лучше только 1-ую строку оставить ?

mx__ ★★★★★
()

Я допускаю, что может я такой криворукий или не понимаю назначения докера … может проще разобраться как вручную подгонять, чтобы понимать, как решать проблемы, а не создавать еще один слой проблем для себя в виде докера? Или проще вообще забить на обновления?

Докер дает возможность юзеру локалхоста быстро поставить софтинку не обременяя себя проблемами совместимости с версией host-системы. Можно одновременно использовать разные версии софта для решения конкретных задач.

С конкретным образом - конкретной его версией - идет и конкретная инструкция по установке-запуску. НО… это абсолютно не гарантирует совместимости последующих версий образов с вашими текущими настройками и примонтированными базами данных. Здесь все как обычно - надо знать и понимать продукт достаточно детально. Так что, при смене версий докер-образов нужно или все ставить «с нуля» или постигать азы администрирования конкретной софтинки. Слишком часто обновлять образы конечно не имеет особого смысла - только при появлении каких-то критческих обновлений, ну и по мере реальной необходимости.

vinvlad ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.