J-A-A-M / ukraine_alarm_map

прошивка для мапи тривог на основі ESP32
https://flasher.alerts.net.ua/
GNU General Public License v3.0
33 stars 3 forks source link

Оптимізація Dockerfile та реформутування Python коду для легшого сприйняття (повторно до #186) #187

Closed yurnov closed 3 months ago

yurnov commented 3 months ago

Метою цого PR є невелика опмимізація поточних Dockerfile шляхоч заміни імеджа з python:3.10.6 на python:3.10-slim.

Результат:

@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ docker images
REPOSITORY   TAG         IMAGE ID       CREATED          SIZE
test         3.10-slim   f2c4efdd42c6   11 seconds ago   144MB
test         3.10.6      5735932c23a3   42 seconds ago   936MB
@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ 

python:3.10-slim базується на Debian 12 "Bookworm", який є current stable release, у той час як python:3.10.6 на Debian 11 “bullseye” (current oldstable release), і загалом, я не маю нічого проти bullseye, але також і не бачу сенсу триматись за bullseye для базового імеджа для Python. У будь-якому разі, якщо є аргементовані зауваження до зауваження bookworm, готовий змінити у PR імедж на 3.10-slim-bullseye.

Станом на зараз Python 3.10 у стані security (див PEP-619), і з його використанням немає проблем, але версія 3.10.6 доволі стара, і раціонаьно оновитись до новішої (трохи думок нижче), в межах 3.10.x актуальною є 3.10.14, власне вона ж і є у поточному імежжі python:3.10-slim. Я спеціально залищив python:3.10-slim а не фіксував 3.10.14-slim для автоматичного оновлення до версій наступних оновлень безпеки, але розумію підхід фіксувати конкретні версії, і якщо він прийнятий у даному репозиторії, за запитом виправлю на 3.10.14-slim-bookworm.

Можливо раціонально розглянути оновлення Python до 3.12, там з приємного краще формалізоване використанні f-string (дивись PEP-701), що робить їх використання простішим і більш інтуїтивним, проте я не став пропонувати такий перехід версій, оскільки я не перевірив сумісіність усіх бібліотек та коду з 3.12

У будь-якому випадку, найвідчутнішою зміною є прехід на slim імедж, результат якого можна бачити у прикладі на початку опису цього PR-у.

Додатково, я трохи реформатував python код за допомогою black, таке форматування робить код трохи приємнішим для читання. Зміни були зроблені в автоматичному режимі за допомогою black --line-length 120 --target-version py310 deploy з використанням black==24.3.0. Ця зміна зроблена окремим комітом, на випадок якщо автори репозиторію з такі зміни пофрмутвання не підтртмують, зміни легко ревертнути.

v00g100skr commented 3 months ago

спробуємо поганять гілку, коли закінчимо з #185

v00g100skr commented 3 months ago

не бачу перепон перелізти на 3.12 можна поки все зробити для цього

yurnov commented 3 months ago

спробуємо поганять гілку, коли закінчимо з #185

я тоді поки ревертну форматування зроблені за допомогою black, це повністю автоматичні зміни, і зробити їх ще раз буде простіше, аніж робити ребейз після мерджа змін.

І подивлюсь що там із 3.12 у рамках цього ж PR

yurnov commented 3 months ago

Результат мені подобається:

@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ docker images
REPOSITORY                  TAG         IMAGE ID       CREATED          SIZE
test                        3.10-slim   48cd7c0e32e8   7 seconds ago    144MB
test                        3.10.6      f6960601ed3f   46 seconds ago   936MB
test                        3.12-slim   dc561d600b05   2 minutes ago    149MB
ghcr.io/hadolint/hadolint   latest      da13a5ec2e84   16 months ago    2.43MB
@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ 
@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ docker inspect test:3.12-slim | jq '.[0].RootFS.Layers' | grep sha | wc -l
7
@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ docker inspect test:3.10-slim | jq '.[0].RootFS.Layers' | grep sha | wc -l
8
@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ docker inspect test:3.10.6 | jq '.[0].RootFS.Layers' | grep sha | wc -l
12
@yurnov ➜ /workspaces/ukraine_alarm_map/deploy/explosions (docker-optimization) $ 
v00g100skr commented 3 months ago

один контейнер довелось залишити на повній версіі, бо там ліба для генераціі svg на слімі не працювала