Size: a a a

2021 May 17

AS

Artem Savinov in rannts
можно
источник

AS

Artem Savinov in rannts
did
источник

AS

Artem Savinov in rannts
но контейнер должен быть в привелигированном режиме запущен(но давно не пробовал) или внутрь контейнера пробрасывается сокет от хостового докера и по факту контейнер стартует на хосте
источник

AS

Artem Savinov in rannts
но зачем?
источник

『Serg』 in rannts
всякое в голову лезет))
источник

RB

Roman Bolkhovitin in rannts
а у тебя какой CI? gitlab из коробки умеет сервисы запускать
источник

『Serg』 in rannts
Битбакет и дженкинс соответственно
источник

VR

Victor Ryabinin in rannts
cat и grep нормально работают с файлами > ТБ
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Если не ошибаюсь, то есть уже готовые образы баз данных, заточенных для тестирования. Я в своё время делал такой свой для постгри. Там на самом деле очень много времени занимает инициализация кластера постгри. Поэтому я для своего образа просто выполнил инициализацию, создал все базовые структуры (юзера, базу данных), упаковал все файлы базы в tar и засунул в образ. При запуске контейнера tar распаковывается в папку постгри (которая на самом деле tmpfs подсунутая докером), после чего запускается постгря.

Ну и там ещё другие хаки (например отключение fsync и доп. настройки в конфиге).
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Я делаю проброс в контейнер сокета от докера на хосте. Плюс может понадобится детектить ситуацию что у тебя код работает внутри контенера (решается добавлением специального ENV в образ контейнера), что-бы создать нетворк в который засунуть текущий контейнер и контейнер с базой, который ты запустишь. Иначе у тебя твой контейнер с тестами не будет иметь доступа к портам контейнера с постгрёй (или придётся заморачиваться с вывешиванием порта постгри на хосте и обеспечении доступа к нему из контейнера с тестами)
источник

A🌚

Al 🌚l in rannts
А зачем нужен был хак с tar? Просто проинициализированную базу со всеми файлами в образе держать нельзя было?
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Нужна была просто юзер и пустая база. Т.к. проект ведь развивается, таблицы в нём меняются. Поэтому проще их заново создавать на пустой базе, чем хранить в дампе.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Ну и фишка в том что данные базы лежат в tmpfs которая монтируется при запуске контейнера - в образе её нет. Потому и надо откуда-то в образе достать "дамп" и развернуть его в tmpfs. Самое быстрое было копировать из tar или может даже tar.gz (помню что подбирал вариант с максимальной скоростью "распаковки")
источник

A🌚

Al 🌚l in rannts
Чёт сложно, но ок, я ж тонкостей не знаю
источник

A🌚

Al 🌚l in rannts
Я б наверное начал с отдельного слоя незаполненной базы, а новые таблицы плодил отдельными слоями
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Это подходит если структура базы не меняется.
А для тестов её всё равно надо полностью обнулять перед каждым новым тестом, вполоть до счётчиков. Проще херакнуть всё что есть в базе и создать заново (если есть возможность, то только то что нужно для конкретного скоупа тестов, а не всю базу). Поэтому и нет смысла сразу в образе держать дамп с таблицами. Достаточно юзера и пустой базы данных
источник

A🌚

Al 🌚l in rannts
Ну да, но я видимо идею плохо объяснил. Отдельным тегом у тебя хранится пустая проинициализированная база. А каждое изменение идёт дополнительным тегом. Таким образом ты всегда можешь поднять пустую базу, наполнить ее, сохранить это с новым тегом и переиспользовать потом. А как только прилетает новая структура, накатываешь новую миграцию поверх образа с пустой базой и пушишь
источник

A🌚

Al 🌚l in rannts
То же самое примерно, но без дополнительных сущностей
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Всё что я описывал - это для кейса, когда сами тесты запускают контейнер с базой перед своим запуском и гасят его при завершении (в pytest это фикстура с scope="session").
В других реализациях можно и по другому подойти к вопросу - например просто запустить в докере перстистентную тестовую базу и не убивать её.
источник

KK

Kirill (Cykooz) Kuzm... in rannts
Кроме того быстрый SSD может в теории ликвидировать необходимость использования tmpfs. Тогда можно всё что я выше писал про tar файл не делать и просто засунуть в образ уже проинициализированный кластер.
источник