Использование службы контейнеров Azure с сопоставлением томов

Я развернул докеризованное приложение в Azure с помощью службы контейнеров Azure. Это приложение NodeJS / Express, использующее MongoDB. Все работает нормально, но теперь я хочу настроить сопоставление томов между одной из моих внутренних папок проекта и папкой на виртуальной машине.

Это отлично работает в обычном докере, я просто запускаю следующую команду при запуске контейнера:

docker run -d --net=784849494 -p 5555:80 -v /www/uploads:/var/www/myapp/uploads myapp

По сути, я создаю папку загрузок на www в моей виртуальной машине, и она сопоставляется с загрузками папок моего проекта.

Это то, что меня смущает, когда я создаю папку на своей виртуальной машине, созданную для меня лазурью, к которой обращается

user@myazureapp -p 2200 -L 22375:12.0.0.1:2375 -i mykey

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


person unconditionalcoder    schedule 18.12.2016    source источник


Ответы (1)


Укороченная версия:

Вы не хотите использовать их в папках виртуальных машин, вам нужен какой-то сетевой диск для ваших данных. Возможно, используйте службу MongoDB или храните файлы MongoDB в учетной записи хранения, где у вас есть гарантии доступа к данным. Чтобы сделать последнее, вы можете, например, использовать драйвер тома Azure Files для Docker (см. https://azure.microsoft.com/en-us/blog/persistent-docker-volumes-with-azure-file-storage/)

Более длинная версия:

Машина, на которой вы создаете папку, является мастером. Это не то место, где развернуты ваши контейнеры, это то место, где находится мастер Docker Swarm. Вот почему вы этого не видите. Вам нужно создать папку на агентах.

Однако вы не знаете, где Swarm собирается развернуть ваш контейнер в кластере, и поэтому нет гарантии, что он будет размещен на виртуальной машине, где находится ваша папка. Даже если вам повезет и при первом развертывании вы попадете на правильную виртуальную машину, нет гарантии, что она будет перезапущена на той же виртуальной машине, если Docker когда-либо потребуется перезапуск.

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

Во многих случаях лучший вариант - использовать службу для ваших данных, а не запускать ее в своем кластере, например https://docs.microsoft.com/en-us/azure/documentdb/documentdb-protocol-mongodb. Это означает, что кто-то другой отвечает за резервное копирование, доступность, масштабируемость, производительность и т.д. Кластер ACS.

Если вы действительно хотите разместить свой собственный экземпляр MongoDB, вы можете рассмотреть возможность использования драйвера тома, который гарантирует, что ваш контейнер MongoDB всегда имеет доступ к сетевому хранилищу независимо от того, где он развернут. Например, вы можете использовать драйвер тома файлов Azure для Docker (см. https://azure.microsoft.com/en-us/blog/persistent-docker-volumes-with-azure-file-storage/).

person rgardler    schedule 06.01.2017