diff --git a/03.linux/10005.docker.md b/03.linux/10005.docker.md index 0afb15c..5ea5173 100644 --- a/03.linux/10005.docker.md +++ b/03.linux/10005.docker.md @@ -149,3 +149,20 @@ services: restart: unless-stopped ``` +### Dockerfile Commands ### +* FROM [image name]: specifies the base image to build on. +* MAINTAINER [name]: instruction allows you to set the Author field of the generated images. +* LABEL [key=value]: instruction adds metadata to an image +* RUN [command]: runs a command during build time. +* CMD [command]: specifies the default command to run when a container is started. +* COPY [source] [destination]: copies files or directories from the build context into the container. +* ADD [source] [destination]: Copies new files, directories, or remote file URLs from [source] and adds them to the filesystem of the image at the path [destination]. +* EXPOSE [port]: exposes a port for networking. +* WORKDIR [path]: sets the working directory for subsequent commands. +* ENTRYPOINT [command] [param1] [param2]: Allows you to configure a container that will run as an executable. +* ARG [=]: Defines a variable that users can pass at build-time to the builder with the docker build command using the --build-arg = flag. +* ENV [key] [value]: sets an environment variable. +* VOLUME [path]: Creates a mount point with the specified name and marks it as holding externally mounted volumes from native host or other containers. +* USER : sets the user name or UID to use when running the image and for any RUN, CMD and ENTRYPOINT instructions that follow it in the Dockerfile. +* HEALTHCHECK [--interval=] [--timeout= | 30s] [--retries= | 3] CMD - check container health by running a command inside the container (0 - healthy, 1 - healthy; 2 - reserved) + diff --git a/03.linux/10030.docker_swarm.md b/03.linux/10030.docker_swarm.md new file mode 100644 index 0000000..eb9e503 --- /dev/null +++ b/03.linux/10030.docker_swarm.md @@ -0,0 +1,299 @@ + +# Docker Swarm справочник # + +## Терминология: ## +- Service - описание того, какие контейнеры будут создаваться. Кроме стандартных полей docker в режиме swarm поддерживает ряд дополнительных, большинство из которых находятся внутри секции deploy. Один service запускает определенное количество tasks. + +- Stack - это набор сервисов, которые логически связаны между собой. По сути это набор сервисов, которые мы описываем в обычном compose файле. Части stack (services) могут располагаться как на одной ноде, так и на разных. + +- Task — это атомарная запланированная единица Docker Swarm, которая содержит информацию о контейнере и команду, которая должна запущена внутри контейнера. + +- Реплика – каждый контейнер, который запускается на ноде. Количество реплик — это ожидаемое число всех контейнеров для данной service + +### Режимы деплоя сервисов: ### + +- replicated service - указанное количество реплицируемых контейнеров распределяются между узлами на основе стратегии планированния +- global service - один контейнер запускается на каждом доступном узле в кластере + +### Порты ### +Для manager нод: +``` +firewall-cmd --add-port=2376/tcp --permanent; +firewall-cmd --add-port=2377/tcp --permanent; +firewall-cmd --add-port=7946/tcp --permanent; +firewall-cmd --add-port=7946/udp --permanent; +firewall-cmd --add-port=4789/udp --permanent; +firewall-cmd --reload; +``` + +Для worker нод: +``` +firewall-cmd --add-port=2376/tcp --permanent; +firewall-cmd --add-port=7946/tcp --permanent; +firewall-cmd --add-port=7946/udp --permanent; +firewall-cmd --add-port=4789/udp --permanent; +firewall-cmd --reload; +``` + +## Инициализация и управление Swarm-кластером ## + +- Инициализация Docker Swarm, превращая текущий узел в менеджер кластера. +``` +docker swarm init --advertise-addr +# - IP-адрес менеджера (указание необходимо в случае с несколькими интерфейсами) +``` + +- Выводит токен для присоединения к кластеру как рабочий узел или менеджер. + +``` +docker swarm join-token worker # Токен для рабочих узлов +docker swarm join-token manager # Токен для менеджеров +``` + +- Присоединение узла к существующему кластеру. + +``` +docker swarm join --token :2377 +# - токен для добавления в кластер +# :2377 - IP-адрес и порт менеджера +``` + +- Отключение узла от кластера. +``` +docker swarm leave --force +``` + +## Управление нодами ## +- Выводит список узлов в Swarm-кластере. + +``` +docker node ls +``` + +- Выводит список тасок на ноде в Swarm-кластере. +``` +docker node ps +``` + + +- Посмотреть параметры ноды: +``` +docker node inspect --pretty +# - идентификатор узла +``` + +- Обновление настроек узла (например, понижение или повышение до менеджера или временное выключение-включение (drain-active)). +``` +docker node update --role manager + +docker node update --availability drain +docker node update --availability active + +docker node update --label-add foo --label-add bar=baz +# foo,bar=baz - добавляемые ярлыки на ноду +``` + +- Повысить до менеджера (promote) или понизить до воркера (demote) ноду +``` +docker node promote +docker node demote +``` + +- Удаление узла из кластера. +``` +docker node rm +``` + +## Работа со стеками ## + +- Развертывание стека из docker-compose.yml в Swarm-кластере. +``` +docker stack deploy --with-registry-auth -c +# --with-registry-auth - позволяет передать авторизационные данные на worker ноды, для того чтобы использовался один и тот же образ из регистра (Опционально) +# - путь к файлу docker-compose.yml +# - имя стека +``` + +- список всех стеков в кластере +``` +docker stack ls +``` + +- Список тасок стека +``` +docker stack ps stack_name +``` + +- Удаление стека и его сервисов. +``` +docker stack rm +``` + +- Список всех сервисов, работающих в стеке. +``` +docker stack services +``` + +## Управление сервисами ## + +- Создание нового сервиса. +``` +docker service create --name +# - имя сервиса +# - образ для запуска +``` + +- Вывод списка всех сервисов. +``` +docker service ls +``` + +- Обновление сервиса (например, изменение числа реплик). +``` +docker service update --replicas +# - число реплик +# - имя сервиса + +docker service update --image user/container:1.2 userserv + +docker service update --force --update-parallelism 1 --update-delay 30s nginx + +docker service update --update-parallelism 5--update-delay 2s --image user/container:1.2 userserv + +docker service update --limit-cpu 2 nginx + +docker service update --replicas=5 nginx +``` + +- Просмотр журнала для конкретного сервиса: +``` +docker service logs +``` + +- Удаление сервиса. +``` +docker service rm +# - имя сервиса +``` + +- Масштабирование сервиса до указанного числа реплик. +``` +docker service scale = +# - количество реплик +``` + +## Работа с секретами ### + +Swarm предоставляет хранилище для приватных данных (secrets), которые необходимы контейнерам. Как правило эта функциональность используется для хранения логинов, паролей, ключей шифрования и токенов доступа от внешних систем, БД и т.д. + +- Создание секрета: +``` +docker secret create main_config + +# +# example.yaml +# token: sfsjksajflsf_secret +# +``` + +- Посмотреть список секретов: +``` +docker secret ls +``` + +## Работа с сетью ## + +- Создание сети в режиме overlay (для использования в Swarm). +``` +docker network create --driver overlay +# - имя сети +``` + +- Список сетей, доступных в кластере. +``` +docker network ls +``` + +- Удаление сети. +``` +docker network rm +# - имя сети +``` + +## Работа с томами ## + +- Создание нового тома. +``` +docker volume create +# - имя тома +``` + +- Вывод списка томов. +``` +docker volume ls +``` + +- Удаление тома +``` +docker volume rm +# - имя тома +``` + +## stack-шаблон ## +``` +version: "3" +services: + some-db: + image: my-db:latest + volumes: + - db-data:/data + networks: + my-net: + aliases: + - db + deploy: + placement: + constraints: [node.role == manager] + + some-app: + image: some-app:latest + networks: + - my-net + depends_on: + - some-db + deploy: + mode: replicated + replicas: 2 + labels: [APP=SOME-APP] + resources: + limits: + cpus: '0.25' + memory: 512M + reservations: + cpus: '0.25' + memory: 256M + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + update_config: + parallelism: 1 + delay: 10s + failure_action: continue + monitor: 60s + max_failure_ratio: 0.3 + placement: + constraints: [node.role == worker] + +networks: + my-app: + +volumes: + db-data: + + +``` + +--- +* [https://docs.docker.com/engine/swarm/](https://docs.docker.com/engine/swarm/)