Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 11 commits into from
Apr 4, 2024

Conversation

yurnov
Copy link
Contributor

@yurnov yurnov commented Apr 2, 2024

Метою цого 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 v00g100skr added the сервер Pull requests that update a dependency file label Apr 2, 2024
@v00g100skr
Copy link
Member

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

@v00g100skr
Copy link
Member

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

@yurnov
Copy link
Contributor Author

yurnov commented Apr 2, 2024

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

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

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

- ADD replaced with COPY as it recommended best
  practice (please see https://github.com/hadolint/hadolint/wiki/DL3020)

- pip install is now done in a single RUN command to reduce the number of
  layers created as recommended best practice, please
  see https://docs.docker.com/develop/develop-images/instructions/#add-or-copy
@yurnov
Copy link
Contributor Author

yurnov commented Apr 2, 2024

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

@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 v00g100skr assigned v00g100skr and unassigned v00g100skr Apr 3, 2024
@v00g100skr v00g100skr changed the base branch from develop to docker-opt April 4, 2024 09:31
@v00g100skr v00g100skr merged commit 9cbbe87 into J-A-A-M:docker-opt Apr 4, 2024
5 checks passed
@v00g100skr
Copy link
Member

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
сервер Pull requests that update a dependency file
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants