Перейти к содержимому

Как обновить docker compose

  • автор:

Как обновить docker?

docs.docker.com/install/linux/docker-ce/ubuntu либо скачать бинарники download.docker.com/linux/static/stable/x86_64 и заменить в /usr/bin предварительно остановив dockerd (не рекомендую, но помогает в некоторых случаях)

26 мар 2019 в 10:07

@TotalPusher, не, бинарники — зло: ru.stackoverflow.com/a/907613/191416. Тока через пакетный менеджер, благо на бубунте всё должно взлететь.

26 мар 2019 в 22:45

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Логика во всех случаях и вкусах GNU/Linux одна и та же — добавляем официальные репозитории Docker и ставим последнюю версию:

GNU/Linux Debian Stretch+

# apt-get install apt-transport-https dirmngr ca-certificates software-properties-common # echo 'deb https://apt.dockerproject.org/repo debian-stretch main' >> /etc/apt/sources.list.d/docker.list # apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys F76221572C52609D # apt-get update # apt-get install docker-engine 

GNU/Linux Ubuntu 18.0+

# apt-get install apt-transport-https dirmngr ca-certificates software-properties-common # Добавляем GPG ключи # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - # add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" # apt update # apt install docker-ce 

GNU/Linux Fedora 28+

# dnf -y install dnf-plugins-core # source /etc/os-release # cat  
centos/ debian/ fedora/ raspbian/ stalinux/ static/ ubuntu/ 

Можно конечно использовать NixOS, где контейнеры просто не нужны в виду нового подход доставки пакетов.

Ссылки

  • https://download.docker.com/linux/
  • https://discourse.nixos.org/t/is-there-much-difference-between-using-nix-shell-and-docker-for-local-development/807
  • https://github.com/NixOS/nixops

Как обновить docker-compose на prod-сервере, ничего не поломав?

Добрый день. Я джун, прод меня мало касается, и у меня даже нет туда доступов, но чисто из любопытства было бы интересно узнать мнения более опытных людей на этот счет.
Есть два сервера: тестовый и продакшн. Проблема в том, что на тестовом сервере версия docker-compose выше, чем на проде, и в этой версии есть --env-file флаг для указания файла с переменными окружения для бэкенда, а в версии на проде этого флага нет.
Вот и получается выбор: закостылять свой проект под более старую версию docker-compose, либо же рискнуть и обновить docker-compose до более новой версии, но я понимаю, что это может быть чревато.
Но все же, если подумать, неужели теперь все разработки на этом сервер обречены крутиться на старой версии docker-compose?) Странно это и нелогично. Значит, должен быть какой-то путь, как обновить docker-compose, не поломав при этом проекты.

  • Вопрос задан более года назад
  • 700 просмотров

Комментировать
Решения вопроса 1
Vitaly Karasik @vitaly_il1
DevOps Consulting

Ответ простой - обновляют docker-compose.
Варианта два:
1) если прод. сервер один, то просят время на downtime, обновляют, проверяют, возвращают в продакшен
2) если серверов несколько, то исключают один сервер из сервиса, обновляют, проверяют, подключают заново, и т.д. со следующими

Ответ написан более года назад
Комментировать
Нравится 3 Комментировать
Ответы на вопрос 1
ДевОпс Сисадмин

"Проблема в том, что на тестовом сервере версия docker-compose выше, чем на проде, и в этой версии есть --env-file флаг для указания файла "

А зачем вы используете разные по версиям ПО среды для тестирования/разработки и в проде? Такого быть не должно, если вы конечно не планируете апгрейд прода и обкатываете новую среду, но это уже не проблемы джуна.

Ответ написан более года назад
Нравится 3 1 комментарий
Sazoks @Sazoks Автор вопроса

Ну, если бы я знал) Так вот получилось. Надеюсь, в скором времени все обновят, а то на старой версии докера сидеть не охота.

Ваш ответ на вопрос

Войдите, чтобы написать ответ

docker

  • Docker

Почему не запускается compose.yaml на сервере?

  • 1 подписчик
  • 9 часов назад
  • 62 просмотра

macos

  • macOS
  • +2 ещё

Как избавиться от непонятных символов в docker logs?

  • 2 подписчика
  • 13 часов назад
  • 66 просмотров

Обновление версии docker compose в ubuntu linux

моя система os is ubuntu, текущая docker-compose version was 1.25 но импортированное python-django web app has compose-file with version was 3. 9. как обновить мою систему docker-compose версии , чтобы я мог выполнить веб-приложение

Это зависит от версии Ubuntu, но обычно вы можете обновить docker-compose , установив самую новую возможную версию, как описано в официальной документации .

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose 

# Обновление Test IT в Docker Compose

Перед обновлением Test IT до версии 4.3 и выше убедитесь, что дата и время в установках сервера синхронизированы с датой и временем в установках внешней базы данных! Несовпадение даты и времени может привести к нарушениям работы лицензии.

В качестве примера в этой инструкции используется проект с именем testit . Вы можете использовать другое название.

Если в .env и .yml файлах используются пользовательские значения переменных, перенесите их в файлы .env и .yml новой версии Test IT. Все значения в файлах .env и .yml новых версий Test IT заменяются на значения по умолчанию при обновлении.

# Подготовка к обновлению до версии 4.5

# Перед началом работы

Обновление до версии 4.5 осуществляется с версии 4.4.0 и выше.

  • Создайте резервную копию установленной системы (рекомендуется). Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называется testit (вы можете использовать другое название).
  • Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД Postgres.
  • Если вы используете внешнее объектное хранилище MiniO, не включайте в запуск миграции контейнер mc-minio .
  • Если вы используете внешние СУБД Postgres, пропустите соответствующие разделы настоящей инструкции.

# Объединение контейнеров MiniO и Postgres

Начиная с версии 4.5 бакет avatars перемещается в контейнер minio . Поэтому перед обновлением необходимо выполнить миграцию бакетов MiniO и их метаданных.

  1. Из архива поставки Test IT версии 4.5 скопируйте следующие файлы из папки scripts в папку с установочными файлами, с помощью которых была развернута текущая версия Test IT. Файлы должны находиться в той же директории, что и файл docker-compose.yml :
    • docker-compose.unite-postgres-minio.yml
    • db-unite.sh
    • minio-unite.sh
    • postgres-init.sql (расположен в корневой папке поставки)
  2. Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop 
chmod +x db-unite.sh minio-unite.sh 
docker compose -f docker-compose.yml -f docker-compose.unite-postgres-minio.yml -p testit up -d minio avatars.minio mc-minio new-db authdb avatars.db backgrounddb licensedb globalsearchdb 
docker logs -f testit-mc-minio-1 

Важно В зависимости от объема данных в бакетах, процесс может занять некоторое время.

Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:

Done! 

В случае ошибки миграции отобразится строка:

bucket_name> bucket migration failed! 

В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru). Пример логов с успешным выполнением миграции:

...> 1/1 buckets were imported successfully. mc: IAM info successfully downloaded as SOURCE-iam-info.zip mc: IAM info imported to TARGET from SOURCE-iam-info.zip avatars/ bucket migrated successfully! Source files count: 4 Transferred files count: 4 Done! 
docker exec testit-new-db-1 bash /db-unite.sh 

Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:

Script finished! 

В случае ошибки миграции отобразится строка:

Import FAILED! Check database availability and postgres environment variables! 
docker compose -f docker-compose.yml -f docker-compose.unite-postgres-minio.yml -p testit down 

# Подготовка к обновлению до версии 4.2

# Перед началом работы

Обновление до версии 4.2 осуществляется с версии 4.0.1 и выше.

Перед обновлением системы выполните следующие действия:

  • Создайте резервную копию установленной системы (рекомендуется). Файлы docker-compose.yml и backup.sh находятся в одной директории. Чтобы перенести информацию из вольюмов со старой версии на новую, имена проектов в обеих версиях должны совпадать. В наших примерах проект называется testit (вы можете использовать другое название).
  • Убедитесь, что на компьютере с установленным продуктом достаточно места для создания файла дампа БД Postgres.
  • Убедитесь, что у вас есть возможность исполнять команды от лица пользователя root.
  • Если вы используете внешнее объектное хранилище MiniO и/или внешнюю СУБД Postgres, а не сервисы из поставляемого docker-compose.yml, пропустите соответствующие разделы настоящей инструкции.

# Миграция бакетов MiniO

Начиная с версии 4.2 MiniO Gateway не поддерживается. Поэтому перед обновлением необходимо выполнить миграцию бакетов MiniO и их метаданных.

  1. Из архива поставки Test IT версии 4.2 скопируйте файлы docker-compose.minio-migrate.yml , minio-migrate.sh , move-migrated-volumes.sh из папки scripts в папку с установочными файлами, с помощью которых была развернута текущая версия Test IT. Файлы должны находиться в той же директории, что и файл docker-compose.yml .

Если вы работаете в режиме оффлайн, в папке с файлами поставки 4.2 также выполните команду для загрузки образов MiniO, необходимых для миграции: docker load -i images.tar.gz .

  1. Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT и остановите контейнеры продукта. Используйте команду:
docker compose -f docker-compose.yml -p testit stop 
chmod +x ./move-migrated-volumes.sh ./minio-migrate.sh 
docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p testit up -d minio avatars.minio new-minio new-avatars-minio mc-minio 
docker logs -f testit-mc-minio-1 
  • В зависимости от объема данных в бакетах, процесс может занять некоторое время.

Убедитесь, что миграция прошла успешно. При успешной миграции по окончании работы скрипта отобразится строка:

Done! 

В случае ошибки миграции отобразится строка:

bucket_name> bucket migration failed! 

В случае ошибки миграции устраните проблему самостоятельно или свяжитесь с технической поддержкой (support@yoonion.ru). Пример логов с успешным выполнением миграции:

...> 1/1 buckets were imported successfully. mc: IAM info successfully downloaded as SOURCE-iam-info.zip mc: IAM info imported to TARGET from SOURCE-iam-info.zip avatars/ bucket migrated successfully! Source files count: 4 Transferred files count: 4 Done! 
docker compose -f docker-compose.yml -f docker-compose.minio-migrate.yml -p testit down 
sudo -s ./move-migrated-volumes.sh testit new-minio-data-volume new-avatars-minio-data-volume exit 

# Миграция СУБД Postgres

Начиная с версии 4.2 в качестве основной системы управления базами данных (СУБД) используется Postgres 14. В процессе обновления необходимо выполнить дамп ваших баз данных (БД) с предыдущей версии Test IT и их восстановление в новой версии. В течение дампа и восстановления баз данных продукт будет недоступен.

БД backgrounddb появляется в версии 4.1. Если вы обновляете систему с версии ниже, чем 4.1, действия с базой и сервисом backgrounddb, приведенные в настоящей инструкции, выполнять не нужно.

  1. Перейдите в директорию с установочными файлами, с помощью которых была развернута текущая версия Test IT.
  2. Остановите контейнеры продукта, используя .yml файл, из которого он был запущен. Используйте команду:
docker compose -f docker-compose.yml -p testit down 
docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb 
docker exec -i testit-db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres testitdb" > dump_path>>/dump_db docker exec -i testit-authdb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres authdb" > dump_path>>/dump_authdb docker exec -i testit-avatars.db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres avatarsdb" > dump_path>>/dump_avatars.db docker exec -i testit-backgrounddb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_dump -Fc -v --clean --if-exists -h localhost -U postgres backgrounddb" > dump_path>>/dump_backgrounddb 
docker compose -f docker-compose.yml -p testit down 
docker volume rm testit_db-volume docker volume rm testit_authdb-volume docker volume rm testit_avatars.db-volume docker volume rm testit_backgrounddb-volume 
docker compose -f docker-compose.yml -p testit up -d db authdb avatars.db backgrounddb 
docker exec -i testit-db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d testitdb"  dump_path>>/dump_db docker exec -i testit-authdb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d authdb"  dump_path>>/dump_authdb docker exec -i testit-avatars.db-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d avatarsdb"  dump_path>>/dump_avatars.db docker exec -i testit-backgrounddb-1 /bin/sh -c "PGPASSWORD=F1rstL0g0N! pg_restore -Fc -v --clean --if-exists -h localhost -U postgres -d backgrounddb"  dump_path>>/dump_backgrounddb 
docker compose -f docker-compose.yml -p testit up -d 

# Подготовка к обновлению до версии 4.0.1

Начиная с версии 4.0.1 в конфигурации docker compose была изменена сеть по умолчанию с testit_network на yoonion_network. Чтобы применить данные изменения необходимо выполнить следующие команды.

Если вы обновляете продукт с версии ниже 4.0.0, перед обновлением выполните указания из раздела Подготовка к обновлению до версии 4.0

  1. Создайте сеть yoonion_network:
docker network create yoonion_network 
docker compose -f docker-compose.yml --project-name testit up --detach --timeout 120 --remove-orphans 

В файле .env начиная с версии 4.0.1 была добавлена переменная COMPOSE_NETWORK_NAME, определяющая название сети, в которой будут запущены контейнеры. Ее значение по умолчанию yoonion_network.

# Подготовка к обновлению до версии 4.0

В целях повышения безопасности в версии 4.0 процессы в контейнерах запускаются от имени пользователя uid=611(testit) . Чтобы избежать некорректной работы контейнеров webapi и rabbitmqconsumer , при обновлении необходимо запустить скрипт, мигрирующий права в вольюмах контейнеров.

При обновлении с более ранних версий до версии 4.0.0 без выполнения скрипта сервисы webapi и rabbitmqcosumer будут рестартовать из-за ошибки в сервисе лицензий.

  1. Сделайте резервную копию системы.
  2. Остановите контейнеры системы:
docker compose -f docker-compose.yml --project-name testit stop --timeout 120 
chmod +x scripts/phoenix_migrate_volumes_rights.sh sudo scripts/phoenix_migrate_volumes_rights.sh testit 

testit в примерах команд необходимо заменить на название проекта Docker Compose, в котором запущена система. Чтобы определить название проекта, выполните команду docker ps . Префикс к названиям контейнеров является названием проекта.

Важно Для выполнения скрипта могут потребоваться права пользователя root на хост-системе. В таком случае необходимо запускать скрипт с использованием sudo или от имени пользователя root .

При чистой установке версии 4.0 выполнение скрипта не требуется.

# Обновление онлайн

  1. Создайте новую директорию, скачайте и распакуйте в ней файл для установки онлайн. Актуальная версия установочного файла доступна на странице загрузок
docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans 

# Автономное обновление

  1. Создайте новую директорию, скачайте и распакуйте в ней файл для автономной установки. Актуальная версия установочного файла доступна на странице загрузок
docker load -i images.tar.gz docker compose -f docker-compose.yml --project-name testit up -d --remove-orphans 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *