Похудеть — это то, что я знаю, но не могу сделать.Хотя я не могу похудеть, я могу уменьшить вес своего образа Docker.
Если вы читали предыдущую статьюИспользуйте Docker для создания среды разработки PythonЕсли это так, вы обнаружите очевидную проблему, то есть построенное изображение слишком велико, как показано в правом нижнем углу следующего рисунка:
Его размер составляет 937 МБ, поэтому он большой. Если вам уже не хватает места на диске, вы можете кричать на него. Если вы не считаете, что это проблема, подумайте еще раз, нужно ли вам публиковать этот образ в Docker Hub. Или любой зеркальный репозиторий? Я верю, что вы будете ругаться, когда будете нажимать на докер.Почему такой жирный?
Эмм... Просто я обычно много ем и не люблю заниматься спортом Лежать на кровати и лежать на диване очень удобно...
Давайте вернемся к теме. Прежде чем мы поговорим о том, как похудеть, давайте хорошенько разберемся, почему вы толстеете. На это должна быть причина. Упомянутый выше толстый образ называется образом myproject. Давайте сначала просмотрим Dockerfile этого образа:
FROM python:3.7
RUN pip install requests
CMD ["python3"]
С моей острой интуицией я обнаружил, что проблема определенно в первой строке, не спрашивайте почему, позвольте мне установить x один раз.
Давайте работатьdocker images python:3.7
,увидим:
Причина в том, что я обнаружил, что в качестве базового образа моего проекта образ python:3.7 очень большой, поэтому образ, который мы создадим на этой основе, будет только больше (без учета удаления файлов внутри базового образа), почему python :3.7 такой большой? ? мы бегаемdocker history python:3.7
Чтобы просмотреть историю создания этого базового образа:
docker history --no-trunc python:3.7
, вывод не очень дружелюбный, но хорошо видно, что слои с большой емкостью - это слои, которые запихивают вещи в зеркало, которые грубо делятся на нижний слой системы, различные библиотеки и инструменты для построения, Python исходные пакеты и т.д., а затем просматривая наш myproject, мы также набиваем нужный нам контент, содержимое базового образа + содержимое написанного нами Dockerfile, чтобы сформировать наш окончательный образ.
Как мы можем видеть в истории, история создания образа идет слой за слоем.Вы чувствуете, что коммиты Git также складываются слой за слоем? Каждый из этих слоев соответствует каждой строке Dockerfile, каждый слой независим, и у каждого слоя есть свое место (емкость).
Есть ли быстрый способ похудеть?
Эмм… наверное, не для меня, а для образов Docker — да.
Мы уже знаем, что сам базовый образ python:3.7 очень толстый, так что можем ли мы его не использовать? Ответ конечно. Мы можем полностью настроить свой собственный образ с нуля. Такое ощущение, что мы компилируем и устанавливаем нужное нам программное обеспечение и среду на совершенно новый сервер. Зеркалирование, похоже, требует времени, поэтому мы используем python: 3.7- alpine image для замены образа python:3.7, а содержимое Dockerfile обновляется до:
FROM python:3.7-alpine
RUN pip install requests
CMD ["python3"]
Затем мы бежимdocker build -t myproject:alpine .
Собери, посмотрим насколько большой образ, запустиdocker images myproject
Проверять:
После тестирования код myproject тоже работает нормально, все идеально, правда?
А как насчет других способов похудеть?
Если это только для моего проекта, я доволен после вышеуказанного похудения, но если есть другие зеркала более сложные, чем мой проект, мы можем:
Максимально используйте маленькое базовое изображение, желательно официальное.
Как и выше, мы уже сделали это.
Минимизируйте количество слоев зеркалирования
Dockerfile моего проекта не может продемонстрировать этот метод.Теперь, если у нас есть образ с именем demo, Dockerfile, содержимое будет следующим:
FROM python:3.7-alpine
RUN apk update
RUN apk add build-base
RUN pip install requests
RUN pip install flask
RUN pip install gunicorn
CMD ["python3"]
Заглянем в историю создания этого образа, запустимdocker history demo
:
RUN
инструкция, уровень 1CMD
команда, мы можемRUN
Оптимизированы 5 уровней инструкций, а файл Dockerfile обновлен до:
FROM python:3.7-alpine
RUN apk update \
&& apk add build-base \
&& pip install requests flask gunicorn
CMD ["python3"]
Просмотрите историю создания образа после перестроения:
Количество слоев для создания истории уменьшено с 6 до 2, но общий размер образа по-прежнему 277МБ, да, уменьшение слоев не уменьшает объем, но если попробовать разницу времени выполнения до и после, то вы обнаружите, что последний будет более быстрым строительством (помимо сетевого фактора) и более быстрым бегом, разве это не эффект потери веса?Упакуйте как можно меньше контента
Например: когда мы контейнеризируем проект, не все файлы проекта нужно упаковывать в образ, мы можем игнорировать ненужные файлы при упаковке, и использовать.dockerignore, и заполните файлы и каталоги, которые не нужно запаковывать в зеркало..gitignoreОба визуального смысла.
DockerSlim
Сделайте скриншот последнего официального сайта, чтобы увидеть его возможности
На картинке выше изображение, обработанное docker-slim, имеет разрыв в 30 раз, что ужасно.напиши в конце
В этой статье представлен ряд методов похудения, некоторые из которых просты и легки для понимания и легко реализуемы, некоторые могут потребовать небольших усилий для изучения, некоторые могут иметь побочные эффекты, но эффект потрясающий, да, это похоже на человеческая потеря веса, мое первоначальное намерение также состоит в том, чтобы позаимствовать потерю веса, чтобы всем (не знакомым с Docker) было легче переварить и понять. Здесь я желаю вам всем успехов в похудении.