#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 оттуда