2016-07-15 7 views
11

У меня есть несколько контейнеров, которые требуют состояния - я только когда-либо установил масштаб в 1, но мне бы хотелось, чтобы независимо от того, какой хост, который они запускают на томе, будет общим.Docker 1.12 swarm mode и объемы контейнера

Я предполагаю, что мне нужно использовать сетевое устройство для достижения этого (и это хорошо), но как настроить громкость с помощью докеры 1.12?

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

ответ

12

docker service create --mount ... предоставляет два варианта постоянных данных; bind mounts и именованные тома. Bind mounts persist на созданном хосте не будет работать для вас, так как не будет использоваться.

Именованные тома могут быть созданы с использованием docker volume create или созданы неявно как часть docker service create с использованием параметра -mount, например.

$ docker volume create -d --driver cio --name cassandradb --opt profile=CASSANDRA 
$ docker service create \ 
--mount source=cassandradb,target=/var/lib/cassandra,volume-driver=cio \ 
--replicas 1 \ 
--name cassandra \ 
cassandra 

docker service create по умолчанию имени тома, так что тип не указан в примере. Драйвер громкости поддерживает переносные тома. Другие драйверы томов, такие как RexRay или Flocker, также поддерживают переносные тома. Вот статья с примерами на RexRay.

Есть также опции -mount для томов и томов. Официальная документация по-прежнему не поддерживается на сайте Docker. Однако вы можете получить дополнительную информацию о привязках привязок и названных томах here.

8

Я не уверен, что синтаксис был завершен на этом, как показано на рисунке github pull request 24334, но параметр cli, который вы ищете, - docker service --mount .... При использовании чего-то подобного вы создаете ситуацию, когда вам нужно убедиться, что данные доступны для монтажа, поэтому вы смотрите на драйверы, такие как nfs или gluster. В противном случае, если контейнер нужно переместить, и вы установили данные непосредственно с хоста, он будет перезагружен без необходимого монтирования.


Edit: текущий --mount синтаксис:

docker service create --name nginx \ 
    --mount type=bind,source=`pwd`/static-site,target=/usr/share/nginx/html \ 
    -p 80:80 nginx 

для принимающих/Монтирование или

docker service create --name nginx \ 
    --mount type=volume,source=web,target=/usr/share/nginx/html \ 
    -p 80:80 nginx 

для именованного монтировании. Я также разместил blog post по этой теме, потому что я слышу один и тот же вопрос.

+0

Я использую rc4 и смонтировал сетевой ресурс в/mnt/docker/jackett. Должно ли это работать? 'docker service create --mount bind, src =/mnt/docker/jackett, dst =/config/.config -p 9117: 9117 --name files_jackett dreamcat4/jackett'. Ошибка, которую я получаю для -mount: недопустимое поле 'bind' должно быть ключом = значение. –

+3

Похоже, что синтаксис должен быть: 'docker service create --mount type = bind, source =/mnt/docker/jackett, target =/config/.config -p 9117: 9117 --name files_jackett dreamcat4/jackettclear'! благодаря –

Смежные вопросы