Статьи

Размещенное удаленное хранилище с Amazon S3

Далее следует слегка измененная выдержка из главы 10 Докера в действии . Глава 10 подробно описывает проект Docker Distribution.

Simple Storage Service (или S3) от AWS предлагает несколько функций в дополнение к хранилищу больших двоичных объектов. Вы можете настроить двоичные объекты для шифрования в состоянии покоя, контроля версий, контроля доступа или предоставления доступа через сеть доставки контента AWS.

Используйте свойство хранилища «s3», чтобы принять S3 в качестве вашего удаленного хранилища BLOB-объектов. Существует четыре обязательных под-свойства: «accesskey», «secretkey», «region» и «bucket». Они необходимы для аутентификации вашей учетной записи и определения места, где будут выполняться чтение и запись больших двоичных объектов. Другие подчиненные свойства определяют, как проект Распространения должен использовать хранилище BLOB-объектов. К ним относятся «шифрование», «защита», «v4auth», «размер куска» и «корневой каталог».

Если для свойства encrypt установлено значение «true», шифрование как остальное будет включено для данных, которые ваш реестр сохраняет на S3. Это бесплатная функция, которая повышает безопасность вашего сервиса.

Свойство «secure» контролирует использование HTTPS для связи с S3. По умолчанию установлено значение false, что приведет к использованию HTTP. Если вы храните материал с личным изображением, вы должны установить для него значение true.

Свойство «v4auth» указывает реестру использовать версию 4 протокола аутентификации AWS. В общем случае это должно быть установлено в true, но по умолчанию в false.

Файлы размером более 5 ГБ должны быть разбиты на более мелкие файлы и повторно собраны на стороне службы в S3. Однако фрагментированные загрузки доступны для файлов размером менее 5 ГБ и должны рассматриваться для файлов размером более 100 МБ. Куски файлов могут загружаться параллельно, а отдельные сбои при загрузке блоков могут удаляться по отдельности. Проект Distribution и его клиент S3 автоматически выполняют группирование файлов, но свойство «chunksize» устанавливает размер, за который файлы должны быть разделены. Минимальный размер чанка составляет 5 МБ.

Наконец, свойство «rootdirectory» устанавливает каталог в вашей корзине S3, куда должны быть укоренены данные реестра. Это полезно, если вы хотите запустить несколько реестров из одного сегмента. Следующее является ответвлением файла конфигурации по умолчанию и настроено для использования S3 (при условии, что вы заполняете пробелы для своей учетной записи).

Имя файла: s3-config.yml

version: 0.1
log:
level: debug
fields:
service: registry
environment: development
storage:
cache:
layerinfo: inmemory
s3:
accesskey: <your awsaccesskey>
secretkey: <your awssecretkey>
region: <your bucket region>
bucket: <your bucketname>
encrypt: true
secure: true
v4auth: true
chunksize: 5242880
rootdirectory: /s3/object/name/prefix
maintenance:
uploadpurging:
enabled: false
http:
addr: :5000
secret: asecretforlocaldevelopment
debug:
addr: localhost:5001

После того, как вы предоставили свой ключ доступа к учетной записи, секрет, имя группы и регион, вы можете упаковать обновленную конфигурацию реестра в новый образ со следующим Dockerfile:

Имя файла: s3-config.df

FROM registry:2

LABEL source=dockerinaction

LABEL category=infrastructure

Укажите файл конфигурации

Установите аргумент по умолчанию, чтобы указать файл конфигурации для использования. Если установить его раньше, включится кэширование слоя, если s3-config.yml изменится.

CMD ["/s3-config.yml"]
COPY ["./s3-config.yml","/s3-config.yml"]

И собрал его с помощью следующей команды docker build:

docker build -t dockerinaction/s3-registry -f s3-config.df .

Запустите новый реестр с поддержкой S3 с помощью простой команды «docker run»:

docker run -d --name s3-registry dockerinaction/s3-registry

Альтернативой созданию полного образа может быть использование томов bind-mount для загрузки файла конфигурации в новый контейнер и установки команды по умолчанию. Например, вы можете использовать следующую команду Docker:

docker run -d --name s3-registry -v "$PWD"/s3-config.yml:/s3-config.yml registry:2 s3-config.yml

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

docker run -d --name s3-registry \
-e REGISTRY_STORAGE_S3_ACCESSKEY=$AWS_ACCESS_KEY \
-e REGISTRY_STORAGE_S3_SECRETKEY=$AWS_SECRET_KEY \
-e REGISTRY_STORAGE_S3_REGION=us-west2 \
-e REGISTRY_STORAGE_S3_BUCKET=my_registry \
-e REGISTRY_STORAGE_S3_ENCRYPT=true \
-e REGISTRY_STORAGE_S3_SECURE=true \
-e REGISTRY_STORAGE_S3_V4AUTH=true \
-e REGISTRY_STORAGE_S3_CHUNKSIZE=5242880 \
-e REGISTRY_STORAGE_S3_ROOTDIRECTORY=/s3/object/name/prefix \
registry:2

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

S3 предлагается по модели затрат на основе использования. Для начала не требуется никаких предварительных затрат, и многие небольшие реестры смогут работать в рамках «бесплатного уровня» любой из услуг.

Если вы не заинтересованы в размещенной службе данных и не стесняетесь перед лицом технической сложности, то вы можете альтернативно рассмотреть возможность запуска кластера хранения Ceph и серверного хранилища BLOB-объектов RADOS.