Подключение хранилища BLOB-объектов Azure в файле Docker

Я создаю файл докеров в Azure Devops и пытаюсь смонтировать контейнер хранилища BLOB-объектов Azure (содержащий файлы) в файл докеров. Я понимаю, что в Microsoft есть помощь в отношении объема, но они представлены в формате yaml, который мне не подходит, поскольку я использую Azure Devops Pipeline для создания своего образа. Я искренне ценю вашу помощь. заранее спасибо

В настоящее время мой код выглядит так

FROM ubuntu:18.04

# Update the repository sources list
RUN apt-get update
FROM python:3.7.5
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive 
RUN apt-get install -y  build-essential python3-pip python3-dev postgresql-11 postgresql-contrib ufw sudo libssl-dev libffi-dev 
RUN apt-get install -y  libldap2-dev libsasl2-dev ldap-utils 
RUN apt-get install -y  systemd vim

# Install ODBC driver 17
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update -y
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 mssql-tools unixodbc-dev redis-server rabbitmq-server

# Install python libraries
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code
RUN pip install --upgrade pip && \
    pip install -r requirements.txt

RUN mkdir /home/workspace
WORKDIR /home/workspace

COPY ./ /home/workspace

# Mount
## *** REQUIRE HELP HERE ***##


RUN service postgresql start
CMD ["python", "home/workspace/python manage.py runserver 0:8000"]


person Evelyn Omo    schedule 18.03.2020    source источник
comment
ты найдешь, как это сделать?   -  person Leo BL    schedule 13.10.2020
comment
Под монтированием вы подразумеваете монтирование тома? Потому что это делается во время выполнения, а не во время сборки. Что именно ты пытаешься сделать?   -  person C.Nivs    schedule 17.03.2021
comment
RUN service postgresql start означает, что вы хотите, чтобы служба postgres и служба python работали в одном контейнере. К сожалению, это не так. Ваша служба postgres должна быть отдельным контейнером   -  person C.Nivs    schedule 17.03.2021
comment
@risail Evelyn, пожалуйста, где вы разворачиваете свое приложение? В ACI, в службу приложений?   -  person jccampanero    schedule 18.03.2021
comment
Я использую AKS. Я не верю, что это актуально, а также то, что или как работают службы, вопрос специально для монтирования томов в файле докеров.   -  person risail    schedule 18.03.2021
comment
Вы не монтируете тома в dockerfile. Вы монтируете том в контейнер. Если вы хотите подключить большой двоичный объект Azure к AKS, я не уверен, что это напрямую поддерживается. Поддерживаемые классы хранилища перечислены здесь. Возможно, вы захотите настроить утверждение постоянного тома с файлами Azure и использовать AzCopy для перемещения большого двоичного объекта в тот, который установлен в AKS.   -  person C.Nivs    schedule 18.03.2021
comment
Большое спасибо за отзыв @risail. Что ж, в определенном смысле это может быть актуально, потому что Azure предоставляет вам некоторые варианты или нет, в зависимости от того, где вы развертываете контейнер. Пожалуйста, рассмотрите, например, это вопрос, в котором я предоставил некоторую помощь: как видите, если вы используете docker compose и службу приложений, Azure предоставляет вам возможность монтировать файл Azure или хранилище BLOB-объектов в вашем контейнере. Как видите, OP в вопросе также используется Azure DevOps   -  person jccampanero    schedule 18.03.2021
comment
Честно говоря, нет, если этот функционал поддерживается в AKS. Я раскопаюсь.   -  person jccampanero    schedule 18.03.2021
comment
Я думаю, вы что-то поняли. Лучше делать это в AKS. Я ответил на другой вопрос, который не включал компонент AKS.   -  person risail    schedule 18.03.2021
comment
@risail AKS и k8s - очень специфический вариант использования. Вместо того, чтобы пытаться использовать интерфейс командной строки AZ для копирования содержимого из учетной записи хранения в ваш контейнер, было бы предпочтительнее воспользоваться механизмами, которые предоставляет k8s, и попытаться использовать монтирование томов. Я углубился в проблему и наткнулся на эту отличную статью. Он раскрывает в двух сопутствующих сообщениях вариант использования, очень похожий на ваш, но с SQLite. Он основан на определении сборки монтирования тома через файловую папку Azure ... см. Далее   -  person jccampanero    schedule 19.03.2021
comment
И конфигурация необходимого секрета k8s на основе ключей доступа к учетной записи хранения, необходимых для доступа к общему файловому ресурсу. Я надеюсь, что это помогает.   -  person jccampanero    schedule 19.03.2021
comment
@jccampanero, в этой статье я и закончил.   -  person risail    schedule 19.03.2021
comment
Привет, @risail. Это приятно, я рад слышать, что вы смогли найти решение. Если вы не возражаете, я включу ответ, в котором резюмируется необходимая информация.   -  person jccampanero    schedule 19.03.2021
comment
Большое спасибо @risail.   -  person jccampanero    schedule 23.03.2021


Ответы (1)


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

Пожалуйста, рассмотрите, например, это вопрос, в котором я предоставил некоторую помощь: как видите, если вы используете docker compose и службу приложений, Azure предоставляет вам возможность монтировать файл Azure или хранилище BLOB-объектов в вашем контейнере.

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

Например, прочтите эту отличную статью. Автор раскрывает в двух сопутствующих сообщениях вариант использования, очень похожий на ваш, но с SQLite.

По сути, следуя инструкциям, приведенным в вышеупомянутом сообщении, сначала создайте секрет Kubernetes с данными подключения к хранилищу Azure. Вам необходимо предоставить информацию об имени вашей учетной записи хранения и значении одного из ваших ключей доступа. Файл конфигурации yaml будет выглядеть примерно так:

apiVersion: v1
kind: Secret
metadata:
  name: your-secret
  namespace: your-namespace
type: Opaque
data:
  azurestorageaccountname: Base64_Encoded_Value_Here
  azurestorageaccountkey: Base64_Encoded_Value_Here

Затем создайте развертывание Kubernetes и определите соответствующие монтирования томов. Например, если имя вашего файлового ресурса службы хранилища Azure - your-file-share-name:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-azurestorage-test
  namespace: your-namespace
spec:  
  selector:
      matchLabels:
        app: your-app
  template:
    metadata:
      labels:
        app: your-app
    spec:
      containers:
      - name: your-app
        image: your-registry.azurecr.io/your-app:latest
        volumeMounts:
        - name: azurefileshare
          mountPath: /postgre-require-dmount-path
      imagePullSecrets:
      - name: your-pull-secret-if-you-have-one       
      volumes:
      - name: azurefileshare
        azureFile:
          secretName: your-secret
          shareName: your-file-share-name
          readOnly: false

При развертывании следует учитывать следующие важные моменты: volumeMounts, используемый для указания пути, по которому файловый ресурс будет смонтирован внутри контейнера, подходящий для вашего развертывания PostgreSQL и тома с записью azureFile с информацией о секретном имени, созданном ранее, и именем вашего фактического общего файлового ресурса хранилища Azure.

person jccampanero    schedule 19.03.2021