Размер изображения Docker при нажатии на ECR отличается от локального - PullRequest
1 голос
/ 10 марта 2019

У меня есть образ докера 1.46 ГБ на моем локальном компьютере, но когда он помещается в AWS ECR (либо через мой локальный компьютер, либо через развертывание CicleCI), он составляет всего 537.05 МБ.Я довольно новичок в Docker и в AWS, поэтому любая помощь в выяснении того, почему это может быть полезным, будет оценена!

У меня такое ощущение, что по какой-то причине он не был полностью загружен в ECR, так какЯ пытаюсь использовать этот контейнер для пакетного задания, но по какой-то причине та же команда, которая работает при локальном использовании, не работает при использовании в определении задания.Это просто команда python app.py, но я также пытался использовать абсолютный путь python /usr/local/src/app/app.py, что приводит к [Errno 2] No such file or directory.

Команды, используемые в моем развертывании Makefile, следующие:

docker build --force-rm=true -t $(EXTRACTOR_IMAGE_NAME) ./extractor
docker tag $(EXTRACTOR_IMAGE_NAME) $(EXTRACTOR_ECR_IMAGE_NAME)
$(shell aws ecr get-login --no-include-email)
docker push ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/$(EXTRACTOR_ECR_REPO)

Редактировать 1: Я думаю, что это может быть связано с размером базового изображения, в данном случае это python: 2.7.Базовое изображение составляет 914 МБ, плюс размер моего изображения ECR 537,05 МБ = 1451,05 МБ, т.е. около 1,46 ГБ.Все еще не уверен, в чем проблема с командой Batch, хотя ...

Редактировать 2: Я монтировал код в свой контейнер с помощью тома, вот почему это работаетна местном уровне.Во время сборки я забыл скопировать код в контейнер, который, как я полагаю, является единственной причиной, по которой это не работает в пакетном режиме!

Ответы [ 2 ]

3 голосов
/ 10 марта 2019

Это может быть связано с тем, как клиент Docker действует до того, как он передает изображение в ECR, как задокументировано :

Начиная с Docker версии 1.9, клиент Docker сжимает слои изображений перед их отправкой в ​​реестр V2 Docker. Выходные данные команды docker images отображают размер несжатого изображения, поэтому он может вернуть размер изображения больше, чем размеры изображения, показанные в консоли управления AWS.

Поэтому, когда вы вытягиваете изображение, вы замечаете, что слои изображения проходят три этапа:

  • Загрузка
  • Добыча
  • Завершение

Относительно этой команды: python /usr/local/src/app/app.py выполняете ее, пока вы внутри /usr/local/src/app/? Возможно, вам придется сначала убедиться, что вы также проверили команду внутри контейнера, используя изображение, прежде чем нажимать его, поскольку ошибка, по-видимому, связана с кодом больше, чем проблема с докером

1 голос
/ 10 марта 2019

Мы можем прочитать следующее в документации AWS ECR :

Примечание

Начиная с версии 1.9 Docker,Docker-клиент сжимает слои изображений перед их отправкой в ​​реестр V2 Docker.Выходные данные команды docker images показывают размер несжатого изображения, поэтому он может вернуть размер изображения больше, чем размеры изображения, показанные в Консоли управления AWS.

Я подозреваю, что выполучили бы ожидаемые размеры, если бы вы использовали CLI (docker images) вместо веб-консоли ECR.

...