|
|
## Инструменты Docker
|
|
|
|
|
|
### 1. Многоступенчатая сборка образов
|
|
|
|
|
|
Docker позволяет задействовать несколько исходных образов при сборке результирующего, при этом используя только один Dockerfile.
|
|
|
|
|
|
Каждая стадия сборки может обмениваться файлами с предыдущими.
|
|
|
|
|
|
Эта возможность бывает особенно полезна при создании крупных приложений, состоящих из нескольких разных частей, использующих разные языки программирования и разные платформы.
|
|
|
|
|
|
### 2. Политики перезапуска и базовый мониторинг
|
|
|
|
|
|
Для контейнеров можно установить политики перезапуска, таким образом, чтобы Docker перезапускал контейнер в случае ошибки, или же в случае перезагрузки демона или даже операционной системы.
|
|
|
|
|
|
Docker также предоставляет инструмент HEALTHCHECK - возможность базового мониторинга состояния контейнера. Его можно указать как при сборке образа так и при запуске контейнера.
|
|
|
|
|
|
HEALTHCHECK **не** связан с политиками перезапуска напрямую. Для имплементации перезапуска при провале команды проверки, нужно реализовывать эту логику вручную.
|
|
|
|
|
|
### 3. Ограничение ресурсов
|
|
|
|
|
|
Docker позволяет ограничивать ресурсы компьютера, доступные контейнерам. Это бывает особенно полезно в случае некорректно написанных приложений, которые, к примеру, нерационально расходуют память системы. Таким образом можно как обезопасить хост-систему от переполнения памяти, так и более рационально распорядиться доступной памятью(или ресурсами CPU) в случае нескольких контейнеров.
|
|
|
|
|
|
### 4. Docker Compose
|
|
|
|
|
|
Как вы могли заметить, запуск команд Docker вручную - довольно утомительное занятие.
|
|
|
|
|
|
К счастью, Docker предоставляет плагин Docker Compose, который позволяет декларативно описывать конфигурацию Docker на локальной машине, включая контейнеры, сети, и все остальное. Продвинутые возможности Docker, такие как политики перезапуска, или ограничения ресурсов, в нем выглядят особенно просто и наглядно.
|
|
|
|
|
|
Docker Compose использует YAML в качестве языка конфигурации. По умолчанию, файл конфигурации называется `docker-compose.yml`
|
|
|
|
|
|
### 5. Docker Swarm
|
|
|
|
|
|
Docker Swarm это простой оркестратор для контейнеров, который доступен из коробки. Позволяет объединить докер демоны на разных машинах в кластер, что даёт возможность поставки распределённых приложений упакованных в контейнеры. Swarm позволяет настраивать кластеризованные приложения как с помощью интерфейса командной строки, так и декларативно, наподобие Docker Compose. Типичными задачами для такого типа приложений являются организация высокой доступности, балансировки нагрузки и канареечного обновления сервиса. Также вы можете добиться эластичности распределённого приложения, которое создаёт и удаляет контейнеры в зависимости от поступающей нагрузки.
|
|
|
|
|
|
Имейте ввиду, что разделение томов данных в кластере имеет свои особенности, о которых подробно можно почитать по ссылкам ниже, но вот некоторые из них.
|
|
|
|
|
|
Во-первых, стандартный драйвер томов данных в Docker имеет говорящее название `local`, и таким образом, при использовании его в кластере,
|
|
|
и при монтировании тома с помощью, к примеру, команды `docker service create --mount type=volume...`,
|
|
|
том данных будет локально создаваться на каждом узле(node, т.е. инсталляции Docker) Swarm, на котором запускается сервис. \
|
|
|
Это часто является нежелательным поведением, поэтому для кластеров часто используются специфические драйвера томов данных, такие как `NFS` или `GlusterFS`.
|
|
|
|
|
|
Во-вторых, тому данных можно задать область видимости(scope) - `single` или `multi`, что означает соответственно возможность доступа из одного или нескольких узлов.
|
|
|
|
|
|
В-третьих, тому данных можно задать ограничения на возможности чтения и записи, такие как
|
|
|
|
|
|
- `none` - доступ к тому возможен только из одного узла
|
|
|
- `readonly` - доступ к тому возможен только на чтение
|
|
|
- `onewriter` - доступ к тому на запись возможен только с одного узла одновременно, доступ на чтение - отовсюду
|
|
|
- `all` - никаких ограничений на чтение и запись
|
|
|
|
|
|
Также, в кластере Docker Swarm часто используются специальные `overlay` сети, которые позволяют разделять виртуальную сеть между разными машинами.
|
|
|
|
|
|
## Ссылки:
|
|
|
- https://docs.docker.com/engine/reference/builder/
|
|
|
- https://docs.docker.com/compose/
|
|
|
- https://docs.docker.com/compose/compose-file/
|
|
|
- https://docs.docker.com/get-started/swarm-deploy/
|
|
|
- https://docs.docker.com/engine/swarm/swarm-tutorial/
|
|
|
- https://docs.docker.com/storage/volumes/#share-data-between-machines
|
|
|
- https://www.optimum-web.com/shared-storage-volumes-in-docker-swarm/
|
|
|
- https://github.com/moby/moby/blob/master/docs/cluster_volumes.md
|
|
|
- https://github.com/moby/moby/issues/39624
|
|
|
- https://thenewstack.io/tutorial-create-a-docker-swarm-with-persistent-storage-using-glusterfs/
|