Рубрики
Uncategorized

Шаг 2: одностен-узел Docker рой и SmallTalk

Ранее… В предыдущем посте мы видели введение в контейнеры докера и Linux и … Теги с Docker, RaspberryPI, SmallTalk, Devops.

Ранее…

В оформлении Предыдущий пост Мы видели введение в контейнеры докера и Linux и одно возможное использование для Smalltalk. Мы увидели, как создать Dockerfile для приложения для приложения для приморских приложений, разработанных и работает внутри VasmallTalk Создайте документ Docker и, наконец, запустите с ним контейнер.

Однако один из выводов из этого поста заключается в том, что с простой Докер Команда мы можем запустить только один контейнер одновременно, и только в этом узле Docker работает. Итак, в этом посте я хотел бы дать вам введение в Docker Rash, что позволит нам сделать это. Но, чтобы облегчить понять, в этом посте мы увидим пример одного узла (но несколько контейнеров).

Кстати, большое спасибо Julian Maestri и Norbert Schlemmer за вашу помощь!

Докер Рой и Докер-Состав

Docker может работать в «MODE MODE», который в основном позволяет создавать кластер соединений докеров. Таким образом, вы можете запустить x количество контейнеров в пределах Y Количество узлов. Конечно, Докер Рой Поставляется с большим количеством инструментов для облегчения управления кластером.

Docker-Compose — это другой инструмент, который вроде в середине между простой докером (только один контейнер работает) и рой. Это позволяет запускать несколько контейнеров, но только в этом узле, насколько я понимаю. Из-за этого я не думаю, стоит тратить слишком много времени, объясняя/узнав об этом и просто переехать в рой.

Давайте начнем использовать Docker Rash для нашего применения SmallTalk

Мы продолжим с самого тот же пример В предыдущем посте, который является этим световым приморским демонстрацией, работающей на малине PI 3.

Жидкая ошибка: внутренний

Важно отметить, что для работы рома вам не нужны дополнительные пакеты или что-то еще, он просто поставляется с обычной установкой докера.

Таким же образом DockerFile был самым важным файлом для определения образа докера, Docker-Compose.yml Это тот для рома. Вот где вы определяете, какие услуги вы хотели бы в вашем кластере, сколько «экземпляров» их, и все возможные конфигурации. Ниже наш пример:

# To start it up.
# ./startSwarm.sh

# To stop it
# ./stopSwarm.sh

version: '3'
services:
  seaside:
    image: seaside-debian-slim
    deploy:
      replicas: 10
      labels:
        traefik.port: 7777
        traefik.frontend.rule: "HostRegexp:{catchall:.*}"
        traefik.backend.loadbalancer.stickiness: "true"
  balancer:
    image: traefik:v1.7
    deploy:
      placement:
        # The webserver should only load on manager nodes
        constraints: [node.role == manager]
    # To see all available  command line options: docker run --rm traefik:v1.7 --help | less
    command: --docker --docker.swarmmode --retry --loglevel=WARN
    ports:
      - "80:80"
    volumes:
      # Required because of docker backend, so traefik can get docker data.
      - /var/run/docker.sock:/var/run/docker.sock:ro

Важные вещи, чтобы примечание:

  • Я определяю 2 сервиса Приморский и балансировщик
  • Для сервиса балансировщик Нет ничего, что нужно сделать, потому что ТРАФИК: V1.7 должны быть найдены и загружены из известных онлайн-репозиториев (например, Dockerhub)
  • Вместо этого для сервиса Приморский Я использую изображение под названием Приморки-Debian-Slim который является не на публичном репозитории. Таким образом, у вас есть 3 альтернативы:

    1. Создайте изображение в каждом узле: Docker Build -f ./debian_slim_dockerfile -t Приморский-Debian-Slim. (Мы будем использовать это для этого примера)
    2. Создайте изображение только один раз, экспортируйте его на .tar и импортируйте .tar в остальных узлах (вы можете использовать Docker Export и Docker Import Команды для этого)
    3. Используйте внутренний реестр/репозиторий. Это, очевидно, звучит как лучшая альтернатива, если у вас много узлов.
  • Обратите внимание, что я указываю 10 реплик для Приморский услуга. Это означает, что у меня будет 10 контейнеров, работающих на приморский изображение.
  • Все приморские контейнеры будут делиться тем же портом 7777. Как это возможно? Почему бы вам не получить Ошибка: Адрес уже используется ? Докер виртуализации магии. Этот порт не разоблачен, и я не думаю, что вы можете сделать это, даже если у вас есть реплики.
  • Hostregexp: {Chatall:. \ *} это просто правило на веб-сервере Trafik, чтобы перенаправить все в базовую услугу (приморский в нашем случае)
  • Traefik.backend.LoadLancer.Stickiness: «Истинно» необходимо, потому что морской каркас является штаткой, и нам нужно сродство сеанса.
  • Мы служим на внешнем мире над портом 80.

Как запустить рой сейчас?

Сначала давайте получим пример и построить изображение:

cd $HOME
git clone https://github.com/vasmalltalk/docker-examples.git
cd docker-examples/source/SeasideTrafficLights/Raspberry/
docker build -f ./debian_slim_Dockerfile -t seaside-debian-slim .

Тогда вам нужно инициализировать рой. Поскольку это будет кластер с одним узлом, единственное, что вам нужно выполнить:

docker swarm init

Наконец, все, что вам нужно сделать, это начать рой, используя мой предоставленный startswarm.sh :

#!/bin/bash docker stack deploy --compose-file docker-compose.yml seaside-debian-slim

Вы можете увидеть там команду Docker, чтобы развернуть стопку услуг, используя Docker-Compose.yml и называя это Приморки-Debian-Slim Отказ

Чтобы убедиться, что все работает, вы должны взять веб-браузер и ввести в хост-машина по порту 80. Пример http://marianopi3.local/trafficlight. или http://192.168.7.91/trafficlight. . Это покажет пример светового света приморского света, который мы видим на данный момент в примерах.

Вы можете остановить рой с Stopswark.sh У кого есть немного магии, чтобы ждать, пока сеть правильно отключается … в противном случае он потерпит неудачу, как только вы попытаетесь начать снова:

#!/bin/bash

readonly STACK_NAME=seaside-debian-slim

docker stack rm $STACK_NAME
declare TIMEOUT=0
readonly WAIT_INTERVAL=1
readonly LIMIT=120

echo -n 'waiting for network to shutdown'
while [ "$(docker network ls | grep --count "$STACK_NAME")" -gt 0 ] && [ $TIMEOUT -lt $LIMIT ]; do
    echo -n .
    sleep $WAIT_INTERVAL
    (( TIMEOUT+=WAIT_INTERVAL ))
done
if [ $TIMEOUT -ge $LIMIT ]; then
    echo ' failed' 1>&2
    exit 1
else
    echo ' ok'
fi

В предыдущем посте мы использовали команды Контейнер и изображение чтобы увидеть наши результаты. Однако с роем вы должны использовать Сервис команды. Некоторые примеры ниже:

Итак … сделать вывод, у нас есть 1 контейнер, работающий на нагрузке Traefik Web-сервера, балансируя на 10 контейнеров, работающих на 10 контейнеров, работающих на Docker Image, который имеет VasmaStalk с морями внутри одного узла (Raspberry Pi 3+ в этом случае).

Интересные советы

Бег Docker Service Logs Приморский - Debian-Slim_seaside Очень удобно следить за журналами услуг.

Еще одна волшебная вещь — это политика по умолчанию Автозагрузка контейнеров. Убейте одну из контейнеров … Убейте -9 или что-то еще … И посмотрите, насколько магически Docker начинает новый контейнер, чтобы поставить тот, который снизился и удовлетворил необходимые реплики (10 в этом примере).

См. Приморские контейнеры 2 и 7? Я убил их, и Докер автоматически начал их для меня:)

Что дальше?

Очевидно, что следующий шаг — сделать рой на работу с более чем одним узлом:) Итак, вот это тизер следующего поста:

Обновление: см. Следующее сообщение об этой теме!

Оригинал: «https://dev.to/martinezpeck/step-2-single-node-docker-swarm-and-smalltalk-46i0»