Похудеть — это то, что я знаю, но не могу сделать.Хотя я не могу похудеть, я могу уменьшить вес своего образа Docker.
Если вы читали предыдущую статьюИспользуйте Docker для создания среды разработки PythonЕсли это так, вы обнаружите очевидную проблему, то есть построенное изображение слишком велико, как показано в правом нижнем углу следующего рисунка:
Почему такой жирный?
Эмм... Просто я обычно много ем и не люблю заниматься спортом Лежать на кровати и лежать на диване очень удобно...
Давайте вернемся к теме. Прежде чем мы поговорим о том, как похудеть, давайте хорошенько разберемся, почему вы толстеете. На это должна быть причина. Упомянутый выше толстый образ называется образом 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"]
Просмотрите историю создания образа после перестроения:
Упакуйте как можно меньше контента
Например: когда мы контейнеризируем проект, не все файлы проекта нужно упаковывать в образ, мы можем игнорировать ненужные файлы при упаковке, и использовать.dockerignore, и заполните файлы и каталоги, которые не нужно запаковывать в зеркало..gitignoreОба визуального смысла.
DockerSlim
Сделайте скриншот последнего официального сайта, чтобы увидеть его возможности
напиши в конце
В этой статье представлен ряд методов похудения, некоторые из которых просты и легки для понимания и легко реализуемы, некоторые могут потребовать небольших усилий для изучения, некоторые могут иметь побочные эффекты, но эффект потрясающий, да, это похоже на человеческая потеря веса, мое первоначальное намерение также состоит в том, чтобы позаимствовать потерю веса, чтобы всем (не знакомым с Docker) было легче переварить и понять. Здесь я желаю вам всем успехов в похудении.