Как загрузить большие изображения docker в реестр контейнеров Google?

#docker #google-cloud-platform #google-cloud-sdk #google-container-registry

#docker #google-облачная платформа #google-cloud-sdk #google-container-registry

Вопрос:

Я создаю изображение круга из этого (https://github.com/ulsmith/alpine-apache-php7 ) и в моем приложении у меня есть папка с изображениями объемом 2,5 ГБ. изображение создается успешно, но когда я пытаюсь поместить его в реестр контейнеров Google, оно не работает из-за большого размера, а иногда и тайм-аута сервера, и это будет похоже на минимум20 мин. Я получаю сообщение об ошибке изображения через 15 минут или более, а до этого Google Cloud SDK ничего не показывает. Вот команда, которую я использую: gcloud builds submit --tag us.gcr.io/[project-id]/test:v1

Я проверил crcmod, и он включен.

введите описание изображения здесь

Это мой файл Dockerfile:

 FROM alpine:edge
MAINTAINER Paul Smith <pa.ulsmith.net>

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

RUN apk update amp;amp; apk upgrade amp;amp; apk add 
    bash apache2 php7-apache2 curl ca-certificates openssl openssh git php7 php7-phar php7-json php7-iconv php7-openssl tzdata openntpd nano

RUN curl -sS https://getcomposer.org/installer | php amp;amp; mv composer.phar /usr/local/bin/composer

RUN apk add 
    php7-ftp 
    php7-xdebug 
    php7-mcrypt 
    php7-mbstring 
    php7-soap 
    php7-gmp 
    php7-pdo_odbc 
    php7-dom 
    php7-pdo 
    php7-zip 
    php7-mysqli 
    php7-sqlite3 
    php7-pdo_pgsql 
    php7-bcmath 
    php7-gd 
    php7-odbc 
    php7-pdo_mysql 
    php7-pdo_sqlite 
    php7-gettext 
    php7-xml 
    php7-xmlreader 
    php7-xmlwriter 
    php7-tokenizer 
    php7-xmlrpc 
    php7-bz2 
    php7-pdo_dblib 
    php7-curl 
    php7-ctype 
    php7-session 
    php7-redis 
    php7-exif 
    php7-intl 
    php7-fileinfo 
    php7-ldap 
    php7-apcu

RUN apk add php7-simplexml

RUN cp /usr/bin/php7 /usr/bin/php 
    amp;amp; rm -f /var/cache/apk/*

RUN sed -i "s/#LoadModule rewrite_module/LoadModule rewrite_module/" /etc/apache2/httpd.conf 
    amp;amp; sed -i "s/#LoadModule session_module/LoadModule session_module/" /etc/apache2/httpd.conf 
    amp;amp; sed -i "s/#LoadModule session_cookie_module/LoadModule session_cookie_module/" /etc/apache2/httpd.conf 
    amp;amp; sed -i "s/#LoadModule session_crypto_module/LoadModule session_crypto_module/" /etc/apache2/httpd.conf 
    amp;amp; sed -i "s/#LoadModule deflate_module/LoadModule deflate_module/" /etc/apache2/httpd.conf 
    amp;amp; sed -i "s#^DocumentRoot ".*#DocumentRoot "/app/public"#g" /etc/apache2/httpd.conf 
    amp;amp; sed -i "s#/var/www/localhost/htdocs#/app/public#" /etc/apache2/httpd.conf 
    amp;amp; printf "n<Directory "/app/public">ntAllowOverride Alln</Directory>n" >> /etc/apache2/httpd.conf
ENV PHP_ALLOW_URL_INCLUDE=On
RUN mkdir /app amp;amp; mkdir /app/public amp;amp; chown -R apache:apache /app amp;amp; chmod -R 755 /app amp;amp; mkdir bootstrap
COPY app/ /app/public/
ADD start.sh /bootstrap/
RUN chmod  x /bootstrap/start.sh

EXPOSE 80
ENTRYPOINT ["/bootstrap/start.sh"]
  

Есть ли лучший способ загружать большие изображения?

Комментарии:

1. Не могли бы вы поделиться своим сценарием / командой сборки?

Ответ №1:

Пожалуйста, свяжитесь с нами, чтобы предоставить неотредактированное изображение по адресу gcr-contact@google.com

В целом (возможно, это не проблема для вас) проблема с большими изображениями заключается в том, что токены доступа с коротким сроком действия, которые вы получаете через наш обычный обмен токенами, приведут к неудачной загрузке. Вам нужно будет изучить аутентификацию по ключу JSON, чтобы включить эти очень длинные сеансы при загрузке ваших изображений в GCR

Также следует отметить, что реестр контейнеров не поддерживает загрузку Docker в виде фрагментов. Некоторые инструменты для создания изображений контейнеров поддерживают загрузку больших изображений контейнеров либо с помощью фрагментированных загрузок, либо с помощью одной монолитной загрузки. При загрузке изображений контейнеров в реестр контейнеров необходимо использовать монолитные загрузки.

Ответ №2:

Если вы загружаете большое изображение в GCR, гораздо более быстрым способом было бы:

  • Раскрутите экземпляр виртуальной машины GCP
  • Загрузите свой Dockerfile (и любые соответствующие файлы, необходимые для сборки)
  • Создайте контейнер и нажмите на GCR оттуда