Я хочу докеризовать свое приложение на Python. Я зашел в центр Docker и обнаружил, что существует множество потенциально звучащих базовых образов.
3.7.0-stretch, 3.7-stretch, 3-stretch, stretch (3.7/stretch/Dockerfile)
3.7.0-slim-stretch, 3.7-slim-stretch, 3-slim-stretch, slim-stretch, 3.7.0-slim, 3.7-slim, 3-slim, slim (3.7/stretch/slim/Dockerfile)
3.7.0-alpine3.8, 3.7-alpine3.8, 3-alpine3.8, alpine3.8, 3.7.0-alpine, 3.7-alpine, 3-alpine, alpine (3.7/alpine3.8/Dockerfile)
3.7.0-alpine3.7, 3.7-alpine3.7, 3-alpine3.7, alpine3.7 (3.7/alpine3.7/Dockerfile)
Несмотря на мои попытки поискать в Google, я не мог найти разницы между «растяжка», «стройная», «стройная-стрейч» и альпийская. Помощь?
Упс, я пропустил это внизу страницы. Но все же остается несколько открытых вопросов: 1) что такое растяжка? 2) нижний текст предлагает использовать простые изображения 3.7.n, но я не вижу их в подробном списке всех доступных изображений. Что мне не хватает?
Я думаю, что все эти теги "stretch" происходят от кодового имени Debian "Stretch": wiki.debian.org/DebianStretch
В любом случае, 3.7 явно существует и выглядит как та версия, которую я хочу. Это в основном сводится к тому, что я неправильно прочитал страницу. Простите всех.
Исправлено :) github.com/docker-library/docs/pull/1332






Репозиторий Github с файлами Dockerfiles находится здесь, но он очень динамичный и его нелегко читать:
https://github.com/docker-library/python
Ридми также находится здесь:
https://github.com/docker-library/docs/tree/master/python
Похоже, что информация о stretch действительно отсутствует. Не удалось найти даже в истории ревизий git, если он был случайно удален.
Я создал проблему: https://github.com/docker-library/python/issues/343
Потягиваться - это кодовое имя Debian 9 - в настоящее время стабильная версия (до 06.07.2019, когда был выпущен Debian 10 Бастер). «Старая стабильная версия» Debian 8 имеет кодовое имя Джесси.
https://wiki.debian.org/DebianReleases
Моя личная рекомендация - использовать минималистичные образы Alpine и использовать образы Debian, если что-то не работает :)
Сравнение Debian и Alpine (если возможно, с точки зрения Docker):
Судя по моему ограниченному опыту, наиболее заметным отличием является apt против apk и GNU libc6 против musl libc. А Alpine использует Busybox вместо полных версий многих системных команд.
Обновление: многие колеса Python со скомпилированным двоичным кодом будут работать с образами на основе Debian, но их необходимо перекомпилировать (с помощью pip install) для образов на основе Alpine. В этих случаях я рекомендую использовать образы на основе Debian.
Итак, если я делаю FROM python: 3.7, я использую ubuntu? альпийский? какая ОС?
@ Mr-Programs на hub.docker.com/_/python вы видите, что 3.7 является «общим тегом» с 3.7.3-stretch и 3.7.3-windowsservercore-1809 (и двумя другими windowsservercore). Итак, в Docker на Linux python:3.7 будет использовать 3.7.3-stretch - это текущая стабильная версия Debian (у нее кодовое имя «Stretch»).
По состоянию на июль 2019 года стабильной версией Debian является Debian 10 под кодовым именем buster. Поэтому лучший выбор с точки зрения совместимости и стабильности - python:3.7-buster. Для Python 3.8 есть только изображение с нарушением правил, но не с растянутым изображением.
TWTMC: для пользователей, использующих библиотеки машинного обучения / науки о данных, некоторые из основных пакетов (SciPy и Scikit-Learn) могут представлять некоторые проблемы при использовании изображений alpine. Иногда необходимо перейти к изображениям версий, чтобы избежать ошибок из-за отсутствия библиотек.
Обратите внимание, что в нижней части Python Oficial Docker Hub вы получите полезные подсказки о том, что находится в репозитории.
Stretch, Apline, Buster относятся к базовая ОС, который использует контейнер.
Стрейч и Бастер - это последовательные версии Debian, а Альпийский - минималистичная версия для Linux, основанная на musl и BusyBox.
разница в размере является значительным, увеличиваясь до 30x от Alpine к другим, но компромиссы следует принимать во внимание как от лучшего сообщества к лучшим размерам и производительности.
Также примите во внимание, что ваш контейнер должен быть установлен и насколько он может быть минималистичным.
stretchмы можем спорить, но остальные четко описаны на этой самой странице: hub.docker.com/_/python