Как перезапустить docker linux

Руководство для начинающих по политике перезапуска Docker

Главное меню » Linux » Руководство для начинающих по политике перезапуска Docker

Как перезапустить docker linux. lazy placeholder. Как перезапустить docker linux фото. Как перезапустить docker linux-lazy placeholder. картинка Как перезапустить docker linux. картинка lazy placeholder.

Это чрезвычайно полезно в сценариях, когда вам необходимо перезапустить хост Docker (ваш сервер Linux) или если служба, работающая в контейнере, не работает.

Политики перезапуска Docker применяются для каждого контейнера. Есть два способа назначить контейнеру политику перезапуска. Вы можете установить его в файле YAML, если собираетесь использовать Docker Compose, Swarm или Kubernetes.

Вы также можете установить политику перезапуска прямо в командной строке при запуске контейнера:

Давайте поговорим о том, какую политику перезапуска вы можете использовать.

Политики перезапуска докеров

Существуют следующие политики перезапуска контейнеров Docker:

Как мы уже упоминали, если вы явно не добавите политику перезапуска, она будет иметь значение «no», что означает, что контейнеры не будут перезапущены автоматически.

Объяснение политик перезапуска Docker на примерах

Позвольте нам показать эти политики в действии, чтобы вы могли их реально визуализировать. Это особенно полезно для понимания разницы между политикой always и unless-stopped.

Политика перезапуска always

Начнем с политики перезапуска always. Если эта политика установлена, контейнер всегда будет перезапускаться, если он не был остановлен явно.

Мы собираемся запустить контейнер Alpine Linux с политикой перезапуска always. Мы называем это всегда политикой.

У контейнера одна задача. Он запускает команду sleep в bash в течение 10 секунд, а затем завершает работу.

Без политики перезапуска always контейнер остановился бы через 10 секунд. Но здесь он автоматически перезапустится и запустит команду сна еще 10 секунд, и так будет продолжаться.

В приведенной выше команде вы можете видеть, что, хотя контейнер был создан 25 секунд назад, он работал всего 4 секунды. Учтите, что тот же контейнер перезапускается, новый не создается.

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

Если вы остановите контейнер с помощью команды остановки, он не перезапустится автоматически после этого. В приведенном ниже примере вы можете увидеть, что контейнер теперь имеет статус «Exited», а не «Up».

Политика перезапуска unless-stopped vs always

unless-stopped похоже на политику перезагрузки always. Оба перезапускают контейнеры автоматически, и если вы остановите контейнеры явно, они не перезапустятся.

Но основное различие между ними заключается в том, что если вы остановите контейнеры с помощью команды docker stop, а затем перезапустите демон docker, контейнер с политикой перезапуска always запустит контейнер автоматически, но контейнер с политикой unless-stopped не будет перезапущен.

Покажу это на примерах. У меня уже есть остановленный контейнер с политикой постоянного перезапуска. Позвольте мне создать новый контейнер с именем except-stop-policy с политикой unless-stopped.

Теперь у нас есть два контейнера, которые явно остановлены:

Источник

Как перезапустить docker linux. dacf90. Как перезапустить docker linux фото. Как перезапустить docker linux-dacf90. картинка Как перезапустить docker linux. картинка dacf90.

Docker — это оболочка для LXC, предоставляющая удобный интерфейс для работы с контейнерами в среде Linux.

Контейнер в свою очередь это процесс, чем-то похожий на виртуальную машину, который выполняется в изолированном пространстве. При этом используется один экземпляр ядра (kernel) операционной системы, что позволяет экономить ресурсы.

Преимущество Docker состоит в том, что в случае с виртуальной машиной, приходится эмулировать работу целой операционной системы, тогда как Docker позволяет просто изолировать один процесс.

Контейнеры запускаются и останавливаются практически моментально, так как не требуется загрузка отдельной ОС. Можно запускать несколько контейнеров одновременно, а благодаря использованию файловой системы AuFS, контейнеры используют одно и то же дисковое пространство, доступное только для чтения.

Образы и контейнеры

Образ — это некий шаблон, из которого создаётся контейнер, после чего этот контейнер можно запускать.

Из одного и того же образа можно создавать сколько угодно новых контейнеров, вносить в эти контейнеры изменения и создавать из них новые образы. То есть, например, скачали базовый образ (см. ниже), создали из него контейнер, поделали в этом контейнере что-то, создали из этого контейнера образ и положили его на полку. Теперь для каких-то определённых делишек у Вас есть готовый, настроенный образ.

Образы будут сохраняться в /var/lib/docker.

Установка Docker

Устанавливаем доп. пакеты:

Установка будет производится из официального репозитория разработчика.

Добавляем ключ репозитория:

После успешной установки добавляем себя в группу docker:

Здесь нужно перелогиниться или перезагрузиться.

Как перезапустить docker linux. d9edda. Как перезапустить docker linux фото. Как перезапустить docker linux-d9edda. картинка Как перезапустить docker linux. картинка d9edda.

Работа с Docker

… можно посмотреть список всех аргументов и команд.

container
image
network
node
plugin
secret
service
stack
swarm
system
volume

attach — подключиться к запущенному контейнеру.
build — собрать образ из инструкций dockerfile.
commit — создать новый образ из существующего.
cp — копировать файлы между контейнером и физическим компом.
create — создать новый контейнер.
diff — проверить файловую систему контейнера.
events — посмотреть события контейнера.
exec — выполнить команду в контейнере.
export — экспортировать содержимое контейнера в архив.
history — посмотреть историю изменений.
images — список установленных образов.
import — создать контейнер из архива tar.
info — информация о системе.
inspect — информация о контейнере.
kill — остановить запущенный контейнер.
load — загрузить образ из архива.
login — авторизация в официальном репозитории Docker.
logout — выйти из репозитория Docker.
logs — логи контейнера.
pause — приостановить все процессы контейнера.
port — проброс портов для контейнера.
ps — список запущенных контейнеров.
pull — скачать образ контейнера из репозитория.
push — отправить образ в репозиторий.
rename — переименовать контейнер.
restart — перезапустить контейнер.
rm — удалить контейнер.
rmi — удалить образ.
run — запустить новый контейнер.
save — сохранить образ в архив tar.
search — поиск образов в репозитории Docker Hub.
start — запустить контейнер.
stats — статистика использования ресурсов контейнером.
stop — остановить контейнер.
top — посмотреть запущенные процессы в контейнере.
unpause — проложить выполнение процессов в контейнере.
update — обновить конфигурацию контейнера.
version — версия Docker.

Первый запуск

Теперь пришло время что-нибудь запустить. Для этого существует тестовый образ — hello-world

Как перезапустить docker linux. f2c649. Как перезапустить docker linux фото. Как перезапустить docker linux-f2c649. картинка Как перезапустить docker linux. картинка f2c649.

Docker сообщит что такого образа нет на локальной машине, установит его из репозитория и запустит.

Сообщение Hello from Docker! свидетельствует о правильной работе системы.

Как перезапустить docker linux. c1e7aa. Как перезапустить docker linux фото. Как перезапустить docker linux-c1e7aa. картинка Как перезапустить docker linux. картинка c1e7aa.

Как видно из списка, в наличии имеются образы с разным набором предустановленных программ. Колонка STARS показывает рейтинг.

Так же можно посмотреть какие-нибудь другие образы, например nginx:

Как перезапустить docker linux. faa4d9. Как перезапустить docker linux фото. Как перезапустить docker linux-faa4d9. картинка Как перезапустить docker linux. картинка faa4d9.

Теперь установим образ ubuntu, который в списке значится первым, это базовый вариант, то есть с минимальным набором программ.

Команда «run» скачивает образ из репозитория (либо берет из локального), создаёт из него контейнер и запускает.

Как перезапустить docker linux. 9d211a. Как перезапустить docker linux фото. Как перезапустить docker linux-9d211a. картинка Как перезапустить docker linux. картинка 9d211a.

Здесь мы видим, что контейнер запустился и работает от пользователя root. Имя хоста (5c87883a3af5) это ID контейнера.

Чтобы посмотреть CONTAINER ID, нужно открыть ещё один терминал и дать команду для просмотра запущенных контейнеров:

Как перезапустить docker linux. 0684f5. Как перезапустить docker linux фото. Как перезапустить docker linux-0684f5. картинка Как перезапустить docker linux. картинка 0684f5.

Если дать ту же команду с ключём -a, то увидим все контейнеры (запущенные и не запущенные):

Как перезапустить docker linux. faf314. Как перезапустить docker linux фото. Как перезапустить docker linux-faf314. картинка Как перезапустить docker linux. картинка faf314.

CONTAINER ID — ID контейнера, с помощью которого можно оперировать контейнером.

IMAGE — название образа.

Чтобы посмотреть список установленных образов, надо дать команду…

Как перезапустить docker linux. 2cd879. Как перезапустить docker linux фото. Как перезапустить docker linux-2cd879. картинка Как перезапустить docker linux. картинка 2cd879.

REPOSITORY — название репозитория.

TAG — обычно это версия продукта. Если тега нет, то автоматически используется слово latest.

ImageID — локально генерируемый ID образа, по которому этим образом можно оперировать.

Ну вот, контейнер работает и можно поиграться делая то же самое, что и с обычной ОС, обновляться, устанавливать программы, создавать пользователя и т.д.

Свой образ

Сейчас Docker сделал всё за нас — установил образ и запустил контейнер, а теперь научимся делать всё вручную, это в любом случае понадобится для создания своих образов.

Сначала остановим работающий контейнер. Сделать это можно по разному, прямо в контейнере дать команду exit, либо в соседнем терминале скомандовать…

… либо более жёсткая команда…

Далее нужно удалить контейнер и образ. Делать это нужно именно в таком порядке, иначе получите ошибку.

Смотрим ID контейнеров (CONTAINER ID):

Удаляем контейнер ubuntu:

Удаляем контейнер hello-world:

Как перезапустить docker linux. ae4bf7. Как перезапустить docker linux фото. Как перезапустить docker linux-ae4bf7. картинка Как перезапустить docker linux. картинка ae4bf7.

Смотрим ID образов (IMAGE ID):

Удаляем образ ubuntu:

Удаляем образ hello-world:

Как перезапустить docker linux. f65d6a. Как перезапустить docker linux фото. Как перезапустить docker linux-f65d6a. картинка Как перезапустить docker linux. картинка f65d6a.

Как перезапустить docker linux. 27939d. Как перезапустить docker linux фото. Как перезапустить docker linux-27939d. картинка Как перезапустить docker linux. картинка 27939d.

Создаём контейнер из скаченного образа и запускаем:

Как перезапустить docker linux. 71dfcb. Как перезапустить docker linux фото. Как перезапустить docker linux-71dfcb. картинка Как перезапустить docker linux. картинка 71dfcb.

Контейнер запущен, теперь остановим его командой exit. Так как контейнер у нас уже создан, то и запускать его нужно другой командой.

Сначала смотрим ID контейнера:

Как перезапустить docker linux. 77bc8c. Как перезапустить docker linux фото. Как перезапустить docker linux-77bc8c. картинка Как перезапустить docker linux. картинка 77bc8c.

Как перезапустить docker linux. a30e7a. Как перезапустить docker linux фото. Как перезапустить docker linux-a30e7a. картинка Как перезапустить docker linux. картинка a30e7a.

Контейнер запустился, но мы к нему не подсоединены. Подсоединиться к контейнеру, нужно с помощью команды…

Если всё работает, то можно что-нибудь поделать в контейнере. Давайте обновимся и установим mc и openssh-server, в дальнейшем это нам пригодится:

Теперь можно создать новый образ. В соседнем терминале даём команду…

commit — создать образ.
77d9bfa3c4b4 — ID запущеного контейнера.
myrepo — произвольное название репозитория, который будет создан на вашей машине.

Смотрим список образов:

Как перезапустить docker linux. 7e4a34. Как перезапустить docker linux фото. Как перезапустить docker linux-7e4a34. картинка Как перезапустить docker linux. картинка 7e4a34.

Чтоб отличать образы друг от друга можно менять название репы, или добавить TAG:

Как перезапустить docker linux. 26dec6. Как перезапустить docker linux фото. Как перезапустить docker linux-26dec6. картинка Как перезапустить docker linux. картинка 26dec6.

Теперь можно остановить запущенный контейнер (exit) и создать новый контейнер из нашего образа…

Смотрим список контейнеров:

Как перезапустить docker linux. 414f1d. Как перезапустить docker linux фото. Как перезапустить docker linux-414f1d. картинка Как перезапустить docker linux. картинка 414f1d.
Новый контейнер готов.

Переименовать контейнер

К контейнерам можно обращаться по имени, а для удобства переименовать:

Либо присвоить имя при создании:

Как перезапустить docker linux. b1f0f9. Как перезапустить docker linux фото. Как перезапустить docker linux-b1f0f9. картинка Как перезапустить docker linux. картинка b1f0f9.

Архивация образа

Чтобы переносить образ с компьютера на компьютер его нужно упаковать в архив.

Как перезапустить docker linux. 9b9e21. Как перезапустить docker linux фото. Как перезапустить docker linux-9b9e21. картинка Как перезапустить docker linux. картинка 9b9e21.

Архив образа будет сохранён на компьютере в домашней папке в файл myimage.tar.

После переноса на другой компьютер (с установленным Docker), архив нужно распаковать и создать из него контейнер.

Как перезапустить docker linux. 27e8f3. Как перезапустить docker linux фото. Как перезапустить docker linux-27e8f3. картинка Как перезапустить docker linux. картинка 27e8f3.
Не очень то красиво.

Зададим название репы и тег:

Как перезапустить docker linux. a9de49. Как перезапустить docker linux фото. Как перезапустить docker linux-a9de49. картинка Как перезапустить docker linux. картинка a9de49.
Так гораздо лучше.

Создаём и запускаем контейнер, заодно присваиваем ему имя mynewcontainer:

Далее из этого контейнера можно создать образ, а из него контейнер и т.д. Только сильно не увлекайтесь, а то будет очень много слоёв.

Вы наверно обратили внимание на многочисленные надписи в терминале — Loading layer и Deleted

Как перезапустить docker linux. eb192c. Как перезапустить docker linux фото. Как перезапустить docker linux-eb192c. картинка Как перезапустить docker linux. картинка eb192c.

Это создание/удаление тех самых слоёв, про которые говорится в начале статьи по ссылке Подробная инфа.

По умолчанию контейнер видит внешнюю сеть, проверить это можно командой ping ya.ru, предварительно установив пакет iputils-ping:

Однако попасть во внутрь контейнера по сети (например ssh) нельзя, нужно сначала пробросить порт.

IP-адреса у контейнеров будут — 172.17.0.0/16. Проверить можно командой…

Чтобы пробросить порты, нужно создать новый контейнер с необходимыми параметрами.

Создаём новый контейнер с именем mysshcont и параметрами -p 2222:22:

2222-ой порт основной машины пробрасываем на порт ssh контейнера.

Далее нужно установить ssh-сервер (apt install openssh-server) и либо разрешить вход по паролю, либо создать ключи.

Заходить в контейнер с основного компьютера так…

То же самое нужно сделать, если вы хотите разместить к контейнере какой-нибудь сервер и сайт. Тогда проброс портов будет выглядеть так…

Естественно на основной машине не должны быть заняты эти порты. И обратите внимание на изменение имени контейнера.

Устанавливаем Apache и стартуем:

В браузере на основной машине пишем…

После этого контейнер можно остановить и запустить обычным способом (настройки портов сохранятся в контейнере):

Однако есть одна сложность, у контейнера нет системы автозапуска приложений, это значит что после остановки и последующего запуска, ни ssh ни сайт работать не будут, нужно вручную стартовать демонов…

О том, как реализуется автозапуск, и о других вещах я планирую написать в следующей части.

В статье затронуты лишь азы использования Docker.

Источник

Список важнейших команд в Docker

Как перезапустить docker linux. 2*a769TWQ4NJdHJc7tpd tPw. Как перезапустить docker linux фото. Как перезапустить docker linux-2*a769TWQ4NJdHJc7tpd tPw. картинка Как перезапустить docker linux. картинка 2*a769TWQ4NJdHJc7tpd tPw.

Apr 7, 2020 · 9 min read

Как перезапустить docker linux. 0*90NDQr8Xjuur59S0. Как перезапустить docker linux фото. Как перезапустить docker linux-0*90NDQr8Xjuur59S0. картинка Как перезапустить docker linux. картинка 0*90NDQr8Xjuur59S0.

Содержание

Вступление

Контейнеры Docker преобразовались из нишевой технологии в обязательный атрибут наших сред разработки. Иногда нам приходится тратить невероятное количество времени на отладку или борьбу с самим инструментом, от которого изначально ожидается прирост продуктивности. С каждой же новой волной технологий приходится осваивать великое множество происходящих изменений.

Наверняка многие из вас проводили по одному-два дня, пыт а ясь настроить кластер Docker или получая часть кода, которая продолжает проваливать загрузку контейнера Docker. Большинство разработчиков много времени затрачивают именно на конфигурирование — поиск багов становится делом, которое, как начинает казаться, перевешивает временные затраты на саму разработку нового функционала. Это особенно актуально, когда вы работаете в новой среде или среде, которая ещё не достигла своей “зрелости”.

Менее удачливые из нас не имеют стабильных сред с идеальными CI/CD процессами. Эта статья как раз для тех, кто попадает в эту категорию. Содержащаяся в ней информация взята из реального опыта. Как и вы, я проводил за отладкой дни напролёт. Эта же статья является своеобразным дополнением основного сайта технической документации Docker. В то же время она заостряет внимание на самых распространённых командах, которые вы будете использовать ежедневно в процессе работы с Docker.

Как перезапустить docker linux. . Как перезапустить docker linux фото. Как перезапустить docker linux-. картинка Как перезапустить docker linux. картинка .

Надеюсь, что это руководство поможет вам ориентироваться в сложном процессе отладки и работы с Docker. Обращайте внимание на сопроводительные пояснения к командам при их прочтении.

Сборка Docker

Это создаст образ Docker с опциональными аргументами сборки. Docker будет по умолчанию кэшировать результаты для первой сборки Dockerfile или последующих сборок, основанных на слоях, добавленных к образу через команду run в Dockerfile, что позволит этим сборкам работать быстрее. Если вам это не нужно, можете добавить аргумент “no-cache”, как это сделано в примере выше.

Заметка: команды Docker могут быть выполнены по имени или по ID контейнера. допускает подстановку либо ID контейнера, либо его имени.

Запуск контейнеров Docker

Запуск существующего контейнера. Здесь мы предполагаем, что он уже был загружен и создан.

Остановка существующего контейнера Docker.

Если у вас есть несколько запущенных контейнеров Docker, и вы хотите остановить их все, наберите docker stop и список ID этих контейнеров.

Выполнение команды оболочки внутри конкретного контейнера.

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

Приостановить все запущенные процессы внутри конкретного контейнера.

Эта команда демонстрирует, как запускать образ Docker со множеством переменных среды, переданных в виде аргументов. Знак \ здесь выступает в качестве прерывателя строки.

Отладка контейнеров Docker

Отображает историю конкретного образа. Эта информация полезна, когда вы хотите узнать детали и получить подробное представление о том, как появился образ Docker. Давайте здесь немного отвлечёмся, т.к. это необходимо для полноценного понимания действий указанной команды. Сама же документация по ней весьма скудная.

В случае с Docker образы создаются на верхушках слоёв, которые являются строительными элементами этих образов. Каждый контейнер состоит из образа с читаемым/записываемым слоем, который вы можете рассматривать как постоянное состояние или файл. Помимо этого, добавляются и другие слои, доступные только для чтения. Эти слои (также называемые промежуточными образами) генерируются, когда при выполнении команды build образа Docker выполняются команды в Dockerfile.

Как перезапустить docker linux. 0*gQRF XLa78ClgkSL. Как перезапустить docker linux фото. Как перезапустить docker linux-0*gQRF XLa78ClgkSL. картинка Как перезапустить docker linux. картинка 0*gQRF XLa78ClgkSL.

Список всех образов, хранящихся в данный момент на машине.

Docker inspect отображает низкоуровневую информацию о конкретном объекте Docker. Данные, хранящиеся в этом объекте, могут оказаться весьма полезны при отладке, например при перекрёстной проверке точек монтирования Docker.

Обратите внимание, что есть два основных ответа, получаемых этой командой — детали уровня образа и детали уровня контейнера. Вот кое-что из того, что вы можете получить с помощью этой команды:

Отображение версии Docker, включая версию клиента и сервера, установленные на машине в данный момент.

Да, вы всё правильно поняли. Docker — это клиент-серверное приложение. Демон (продолжительно выполняемая фоновая служба Linux) — это сервер, а CLI — это один из многих клиентов. Демон Docker раскрывает REST API, посредством которого с ним могут взаимодействовать различные инструменты.

Как перезапустить docker linux. 0*bb68Zl9jQucEs4Yc. Как перезапустить docker linux фото. Как перезапустить docker linux-0*bb68Zl9jQucEs4Yc. картинка Как перезапустить docker linux. картинка 0*bb68Zl9jQucEs4Yc.

Docker в AWS ECS

Бывают случаи, когда вам нужно войти в запущенный контейнер Docker для отладки или перекрёстной проверки правильности конфигурации.

Честно говоря, причиной тому может быть многое, включая: 1) проблемы кода, например, было выброшено не перехваченное исключение, и контейнер Docker не запустился, 2) вам не хватает пространства на жёстком диске, если вы используете кластер ECS в экземплярах EC2 и при этом для размещения ECS не используете Fargate, 3) ваш действующий контейнер Docker исчерпал доступную EC2 память.

Если сомневаетесь, перезапустите службу Docker

Здесь пояснения не требуются.

Очистка образов Docker

Docker для очистки неиспользуемых объектов вроде образов, контейнеров, томов и сетей, применяет консервативный подход.

Эти объекты, как правило, не удаляются, пока вы явно не попросите об этом Docker. Поэтому, если эти объекты не удалить, то вскоре они начнут занимать много места. В связи с этим очень важно периодически выполнять нижеприведённую команду для очистки неиспользуемых образов.

Убить выполняющийся контейнер.

Убить все выполняющиеся контейнеры.

Удалить конкретный контейнер, не запущенный в данный момент. Если образ существует в удалённом реестре, он не будет затронут.

Удалить все контейнеры, незапущенные в данный момент.

Получить доступ к журналам контейнера (полезно при отладке).

Загрузка образов Docker из удалённого реестра

Docker Hub

Docker Hub — это служба Docker для нахождения и совместного использования образов контейнеров.

Docker сперва проверит, доступен ли этот образ на вашей локальной машине. Если нет, он приступит к его загрузке с репозитория Docker Hub. Такое поведение предусмотрено изначально.

Для входа на Docker Hub вы можете запустить вышеприведённую команду, которая предложит ввести пароль.

Пользовательский реестр Docker

Если вы извлекаете образ из обобщённого пользовательского реестра Docker, требующего авторизацию, то команда docker login позволят произвести извлечение из любого реестра Docker, как показано выше. Имейте в виду, что при использовании приведённого подхода, будет создана запись в файле

/.docker/config.json для изменения деталей авторизации.

Реестр Elastic-контейнеров Amazon

Реестр Elastic-контейнеров (ECS) — это полноценно поддерживаемый реестр контейнеров Docker, позволяющий разработчикам хранить, поддерживать и разворачивать образы контейнеров Docker. Amazon ECS отлично работает с Amazon ECR. Если вам вдруг понадобится извлечь образы из реестра ECR, следуйте следующим инструкциям.

Вам нужно настроить AWS CLI так, чтобы пользователь IAM имел доступ к AWS и секретный ключ.

Amazon ECR требует, чтобы ключи пользователя IAM имели разрешения ( ecr:GetAuthrizationToken ) через политику IAM, только тогда вы сможете авторизоваться и извлечь образы. В качестве альтернативы вы можете использовать утилиту Amazon ECR Docker Credential Helper. Ниже представлен подход, предполагающий использование вами AWS CLI и корректную настройку всех разрешений.

Команда get-login генерирует длинную команду входа Docker. Скопируйте её и выполните. Авторизация необходима, чтобы получить возможность извлекать образы из AWS ECR.

Экспорт и импорт физических образов Docker

Если вам понадобится экспортировать образ Docker на диск и загрузить обратно, вышеуказанная команда это осуществит.

Экспортирование в файл полезно для случаев, когда вам нужно переместить образы с одной машины на следующую через альтернативного посредника (не через реестр Docker). Существует несколько сред, имеющих запрет доступа в связи с их политикой безопасности. Это может помешать вам произвести миграцию между реестрами, поэтому приведённая команда весьма полезна, хотя зачастую несправедливо недооценена.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *