По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Что это вообще такое?
Docker Compose является инструментом для определения и запуска контейнерных приложений. С Compose вы получаете возможность настраивать службы используя файл YAML. С помощью одной команды Compose вы создаете и запускаете все службы в соответствии с вашей конфигурацией.
Установка начинается с создания каталога проекта:
$ mkdir composetest
$ cd composetest
Создайте файл под названием app.py и вставьте в него следующие данные:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.
'.format(count)
В нашем случае название хоста - redis, который использует порт 6379. Создайте файл под названием needs.txt в каталоге вашего проекта и вставьте его в:
flask
Redis
Теперь следует написать код для файла Dockerfile, содержащий все необходимые переменные для среды разработки.
В каталоге вашего проекта создайте файл с именем Dockerfile (файл будет определять среду приложения) и вставьте следующее содержимое:
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
Определение сервисов осуществляется при создании файла с именем docker-compose.yml в каталоге вашего проекта со следующей информацией:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
На основании содержания файла происходит запуск двух сервисов: Web и Redis, а в дальнейшем вы можете вносить в этот файл различные БД и иную важную информацию.
C помощью команды Compose создайте ваше приложение, после чего из каталога проекта запустите приложение, запустив docker-compose. Вот так:
$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
redis_1 | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1 | * Restarting with stat
redis_1 | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379.
redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
web_1 | * Debugger is active!
redis_1 | 1:M 17 Aug 22:11:10.483 # Server initialized
redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
web_1 | * Debugger PIN: 330-787-903
redis_1 | 1:M 17 Aug 22:11:10.483 * Ready to accept connections
Compose извлекает образ Redis, создавая образ для вашего приложения и запускает выбранные службы. В этом случае код копируется в образ во время сборки. Как вам такое?
Теперь попробуйте ввести http://localhost:5000/ в браузере, чтобы чекнуть запущенное приложение.
Если вы используете Docker для Linux, Docker Desktop для Mac или Docker Desktop для Windows, то теперь веб-приложение должно "смотреть" на порт 5000 на хосте Docker. Введите в своем веб-браузере адрес http://localhost:5000, чтобы увидеть сообщение Hello World. Если не сработает, вы также можете попробовать зайти на http://127.0.0.1:5000.
Если вы используете Docker Machine на Mac или Windows, используйте ip MACHINE_VM docker-machine для получения IP-адреса вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере.
Вы должны увидеть сообщение в своем браузере:
Hello World! I have been seen 1 times.
Переключитесь на другое окно терминала и введите docker image ls, чтобы вывести список локальных образов/контейнеров. Вывод на этом этапе должен показывать redis и web.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
composetest_web latest e2c21aa48cc1 4 minutes ago 93.8MB
python 3.4-alpine 84e6077c7ab6 7 days ago 82.5MB
redis alpine 9d8fa9aa0e5b 3 weeks ago 27.5MB
Важно: Вы можете просматривать запущенные контейнеры с помощью Docker Inspect Tag или ID
Запустите docker-compose из каталога вашего проекта во втором терминале, либо нажмите CTRL + C в исходном терминале, где приложение уже запущено и отредактируйте файл Compose.
Отредактируйте docker-compose.yml в каталоге вашего проекта для внесения той или иной правки в веб-службе
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
Новый ключ редактирует каталог проекта на хосте внутри контейнера, что позволяет изменять код без необходимости перестраивать весь образ. Ключ среды устанавливает переменную FLASK_ENV, которая сообщает о запуске в режиме разработки и перезагрузке кода при изменении. Важно: этот режим должен использоваться только при разработке.
В каталоге проекта введите docker-compose up, чтобы создать приложение с обновленным файлом Compose, и запустите его.
$ docker-compose up
Creating network "composetest_default" with the default driver
Creating composetest_web_1 ...
Creating composetest_redis_1 ...
Creating composetest_web_1
Creating composetest_redis_1 ... done
Attaching to composetest_web_1, composetest_redis_1
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
…
Поскольку код приложения теперь добавляется в контейнер с помощью тома, вы можете вносить изменения в его код и мгновенно просматривать изменения без необходимости перестраивать образ.
Измените сообщение в app.py и сохраните его:
Hello from Docker!:
return 'Hello from Docker! I have been seen {} times.
'.format(count)
Обновите результат в вашем браузере (нажмите F5 или Ctrl + F5) . Приветствие должно быть обновлено, а счетчик должен увеличиваться.
Вы можете поэкспериментировать с другими командами. Если вы хотите запускать свои службы в фоновом режиме, вы можете сделать следующее:
docker-compose up and use docker-compose ps to see what is currently running:
$ docker-compose up -d
Starting composetest_redis_1...
Starting composetest_web_1...
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------
composetest_redis_1 /usr/local/bin/run Up
composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp
Команда docker-compose run позволяет вам применять одноразовые команды к вашим сервисов. Например, чтобы увидеть, какие переменные среды доступны для веб-службы:
$ docker-compose run web env
Выполните команду docker-compose –help, чтобы увидеть весь список доступных команд.
Если вы запустили Compose с помощью docker-compose up -d, то нужно будет остановить ваши службы после работы с ними, для этого поможет команда ниже:$ docker-compose stop
Если хотите полностью уничтожить контейнер, используйте команду down.
Пинг. Что может быть проще? Стандартная операция отправки эхо-запроса ICMP (Internet Control Message Protocol) для проверки доступности. Пишете в командной строке ping, затем адрес и готово! Действительно, проще некуда. А что если нам наоборот, нужно что-то посложнее? Для этого в Linux вам поможет утилита fping.
/p>
Что такое fping?
Fping – это инструмент, аналогичный утилите ping, но гораздо более производительный в случае, когда нам нужно сделать пинг до нескольких узлов. С fping можно использовать файлы со списком адресов или даже указывать целые диапазоны сетей с маской.
Установка
В большинстве дистрибутивов Linux пакет fping можно установить из репозиториев:
# sudo apt install fping [ДляDebian/Ubuntu]
# sudo yum install fping [Для CentOS/RHEL]
# sudo dnf install fping [Для Fedora 22+]
# sudo pacman -S fping [Для Arch Linux]
Если нужно установить из исходного пакета, то используются следующие команды:
$ wget https://fping.org/dist/fping-4.0.tar.gz
$ tar -xvf fping-4.0.tar.gz
$ cd fping-4.0/
$ ./configure
$ make && make install
Готово! Теперь посмотрим, что мы сможем сделать с помощью fping
Пинг множества адресов
Используйте команду fping, а затем через пробел укажите нужные IP адреса
# fping 192.168.1.1 192.168.1. 192.168.1.3
192.168.1.1 is alive
192.168.1.1 is unreachable
192.168.1.3 is unreachable
Пинг диапазона адресов
Используйте ключи –s и –g, после которых укажите первый и последний адрес диапазона.
# fping -s -g 192.168.0.1 192.168.0.9
192.168.0.1 is alive
192.168.0.2 is alive
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.3
ICMP Host Unreachable from 192.168.0.2 for ICMP Echo sent to 192.168.0.4
192.168.0.3 is unreachable
192.168.0.4 is unreachable
8 9 targets
2 alive
2 unreachable
0 unknown addresses
4 timeouts (waiting for response)
9 ICMP Echos sent
2 ICMP Echo Replies received
2 other ICMP received
0.10 ms (min round trip time)
0.21 ms (avg round trip time)
0.32 ms (max round trip time)
4.295 sec (elapsed real time)
Пинг целой подсети
Укажите маску подсети через слеш, чтобы пропинговать всю подсеть. Ключ –r 1 указывает на то, что будет одно повторение операции
# fping -g -r 1 192.168.0.0/24
Пинг с адресами из файла
Можно записать в файл список адресов (в нашем случае мы назвали его merionfping.txt), и зачитать из него адреса для пинга
# fping < fping.txt
192.168.1.20 is alive
192.168.1.100 is alive
Дорогой друг! Ранее мы рассказывали про новинки FreePBX 14. Новые и интересные фичи безусловно не будут лишними. Ну что же, приступим теперь к обновлению FreePBX 13 версии до 14?
Pre-work
Рекомендуем перед началом работ сделать полный бэкап/снэпшот сервера, на котором будут производиться работы;
Как и у любого пользователя FreePBX, у вас в Dashboard графической оболочки появилось следующее уведомление:
Заманчивое название модуля. Переходим в консоль (подключаемся пол SSH) вашего сервера и даем простую команду:
fwconsole ma downloadinstall versionupgrade
Модуль будет установлен:
Теперь возвращаемся в FreePBX. В правом верхнем углу нажимаем Apply Config. Далее, прыгаем по пути Admin → 13 to 14 Upgrade Tool и вот что мы увидим:
Нажимаем на кнопку Check the requirements! и смотрим: система говорит, что у нас установлен FreePBX Distro и нам необходимо воспользоваться специальным скриптом для апгрейда. Что же, приступим к обновлению вручную.
Обновление через CLI
Перед началом работ есть определенные требования, такие как:
Сервер с 64 - битной архитектурой;
Как минимум 10 Гб свободного места;
Стабильное интернет соединение;
Если вы используете 32 – битную архитектуру, то проще всего воспользоваться FreePBX Conversion tool, сделав бэкап на 32 – битной системе, а восстановить его в системе 64 – бит с FreePBX 14. При попытке установки на 32 – битной системе процесс предупредит вас об этом:
Устанавливаем нужный RPM:
yum -y install http://package1.sangoma.net/distro-upgrade-1707-16.sng7.noarch.rpm
После успешной установки RPM даем следующую команду:
distro-upgrade
И переходим в интерактивный режим:
[root@freepbx ~]# distro-upgrade
??????????????????????????????????????????????
? ?
? Sangoma 6 to 7 Upgrade Tool ?
? ?
? Distro Upgrade - Version 1707-2.sng7 ?
? Build Date: 2017-06-21 ?
? ?
??????????????????????????????????????????????
Checking prerequsites...
Checking bitsize of machine [ ? ] - x86_64
Checking available disk space [ ? ] - 13G Available
All prerequsites passed!
Are you ready to upgrade your machine to SNG7? This process requires
two reboots, and will download approximately 200mb of files before
starting. There will be no interruption to service until this machine
is rebooted.
Download files required for upgrade [Yn]?
Указываем y:
Download files required for upgrade [Yn]? y
######### Starting setup upgrade on Tue Aug 22 17:39:08 MSK 2017 #########
######### Creating upgrade repofile #########
######### Installing needed packages #########
######### Running preupgrade #########
######### Running upgrade-tool #########
######### Downloading sangoma-release rpm #########
######### Updating packages.list #########
######### Verified sangoma-release in package.list #########
######### Reboot to finish this stage of the upgrade #########
######### Finished setup upgrade on Tue Aug 22 17:44:12 MSK 2017 #########
Preparations complete!
Please reboot your machine when convenient. This machine will install all the new
and upgraded packages, and then reboot for a second time automatically. After the
second reboot, it will then continue the upgrade process automatically. When the
upgrade is complete, you will be presented with a standard login prompt.
Важно! Данный процесс можно проводить в рабочее время параллельно с обслуживанием вызовов. Даунтайм подразумевается только далее, после перезагрузки.
Перезагружаем сервер командой reboot. При загрузке, у вас будет автоматически выбрана опция System Upgrade, как показано ниже. Если нет, то выберите эту опцию вручную стрелками на клавиатуре:
После этого начнется процесс обновления. Длительность этого процесса напрямую коррелирует с производительностью вашего сервера. После обновление компоненты Core OS произойдет вторая перезагрузка, в рамках которой произойдет обновление всех модулей FreePBX, после чего апгрейд будет завершен.
По окончанию, вы увидите стандартный баннер FreePBX 14:
Выполняем проверку версии. Даем команду в консоль:
ls -l /usr/src | grep freepbx
Если все ОК, то вывод будет вот такой: