From f41bc70752f339f574148045e0a5b80242fc6d46 Mon Sep 17 00:00:00 2001 From: dannc Date: Wed, 4 May 2022 10:29:39 +0700 Subject: [PATCH] add homework 5.3, complete task 1 --- .../05-virtualization/5.3/nginx/Dockerfile | 4 + .../05-virtualization/5.3/nginx/index.html | 8 ++ .../05-virtualization/5.3/nginx/site.conf | 9 ++ src/homework/05-virtualization/5.3/readme.md | 128 ++++++++++++++++++ 4 files changed, 149 insertions(+) create mode 100644 src/homework/05-virtualization/5.3/nginx/Dockerfile create mode 100644 src/homework/05-virtualization/5.3/nginx/index.html create mode 100644 src/homework/05-virtualization/5.3/nginx/site.conf create mode 100644 src/homework/05-virtualization/5.3/readme.md diff --git a/src/homework/05-virtualization/5.3/nginx/Dockerfile b/src/homework/05-virtualization/5.3/nginx/Dockerfile new file mode 100644 index 0000000..219ac39 --- /dev/null +++ b/src/homework/05-virtualization/5.3/nginx/Dockerfile @@ -0,0 +1,4 @@ +FROM nginx:1.21.6-alpine + +COPY site.conf /etc/nginx/conf.d/default.conf +COPY index.html /var/www/netology/index.html diff --git a/src/homework/05-virtualization/5.3/nginx/index.html b/src/homework/05-virtualization/5.3/nginx/index.html new file mode 100644 index 0000000..dade172 --- /dev/null +++ b/src/homework/05-virtualization/5.3/nginx/index.html @@ -0,0 +1,8 @@ + + + Hey, Netology + + +

I`m DevOps Engineer!

+ + \ No newline at end of file diff --git a/src/homework/05-virtualization/5.3/nginx/site.conf b/src/homework/05-virtualization/5.3/nginx/site.conf new file mode 100644 index 0000000..1838d37 --- /dev/null +++ b/src/homework/05-virtualization/5.3/nginx/site.conf @@ -0,0 +1,9 @@ +server { + listen 80; + server_name localhost; + + location / { + root /var/www/netology; + index index.html index.htm; + } +} diff --git a/src/homework/05-virtualization/5.3/readme.md b/src/homework/05-virtualization/5.3/readme.md new file mode 100644 index 0000000..cae1c64 --- /dev/null +++ b/src/homework/05-virtualization/5.3/readme.md @@ -0,0 +1,128 @@ +Выполнение [домашнего задания](https://github.com/netology-code/virt-homeworks/blob/virt-11/05-virt-03-docker/README.md) +по теме "5.3. Введение. Экосистема. Архитектура. Жизненный цикл Docker контейнера"". + +## Q/A + +### Задача 1 + +> Сценарий выполения задачи: + +> - создайте свой репозиторий на https://hub.docker.com; +> - выберете любой образ, который содержит веб-сервер Nginx; +> - создайте свой fork образа; +> - реализуйте функциональность: +> запуск веб-сервера в фоне с индекс-страницей, содержащей HTML-код ниже: +> ```html +> +> +> Hey, Netology +> +> +>

I’m DevOps Engineer!

+> +> +> ``` +> Опубликуйте созданный форк в своем репозитории и предоставьте ответ в виде ссылки на https://hub.docker.com/username_repo. + +Репозиторий с образом: [https://hub.docker.com/r/dannecron/netology-devops-nginx](https://hub.docker.com/r/dannecron/netology-devops-nginx) + +За основу был взят [официальный образ nginx](https://hub.docker.com/_/nginx). Для решения задачи был сформирован [Dockerfile](./nginx/Dockerfile), +а также конфигурация [site.conf](./nginx/site.conf) и [index.html](./nginx/index.html). + +Для сборки образа используем команду из директории [nginx](./nginx): + +```shell +docker build -t dannecron/netology-devops-nginx:latest . +[+] Building 6.6s (9/9) FINISHED +``` + +Проверим, что всё работает. Для этого запустим контейнер из только что созданного образа и сделаем curl-запрос: + +```shell +docker run --rm -it -p 18800:80 dannecron/netology-devops-nginx:latest + +curl http://localhost:18800 + + + Hey, Netology + + +

I`m DevOps Engineer!

+ + +``` + +После этого опубликуем образ: + +```shell +docker push dannecron/netology-devops-nginx:latest +``` + +### Задача 2 + +> Посмотрите на сценарий ниже и ответьте на вопрос: +> "Подходит ли в этом сценарии использование Docker контейнеров или лучше подойдет виртуальная машина, физическая машина? Может быть возможны разные варианты?" +> +> Детально опишите и обоснуйте свой выбор. +> -- +> +> Сценарий: +> +> - Высоконагруженное монолитное java веб-приложение; +> - Nodejs веб-приложение; +> - Мобильное приложение c версиями для Android и iOS; +> - Шина данных на базе Apache Kafka; +> - Elasticsearch кластер для реализации логирования продуктивного веб-приложения - три ноды elasticsearch, два logstash и две ноды kibana; +> - Мониторинг-стек на базе Prometheus и Grafana; +> - MongoDB, как основное хранилище данных для java-приложения; +> - Gitlab сервер для реализации CI/CD процессов и приватный (закрытый) Docker Registry. + +* Высоконагруженное монолитное java веб-приложение + +В данном случае `docker` будет оптимальным решением, так как не будет требовать каких-то дополнительных настроек JVM, а для запуска достаточно будет установленного docker. +В процессе упаковки приложения в образ можно произвести оптимизацию, которая уменьшит размер финального образа, +что минимизирует растраты на трафик при деплое и растраты на хранение в registry. +Ещё одним плюсом является возможность горизонтального масштабирования приложения без дополнительных настроек самого приложения. + +* Nodejs веб-приложение + +Аналогично, как и для java веб-приложения, docker будет оптимальным решением. Плюсы подхода сохраняются. + +* Мобильное приложение c версиями для Android и iOS + +Само мобильное приложение необходимо запускать только на физическом устройстве, так как мобильные устройства не поддерживают +использование `docker` или виртуализацию. + +* Шина данных на базе Apache Kafka + +Шина данных на базе Apache Kafka - это кластерное решение, состоящее как минимум из двух сервисов +и очень сильно зависящее от доступности сети. +В таком случае будет наиболее оптимально запускать сервисы в виртуальных машинах, чтобы была возможность +более гибко конфигурировать локальную сеть для данного кластера, при этом увеличив стабильность работы. + +* Elasticsearch кластер для реализации логирования продуктивного веб-приложения - три ноды elasticsearch, два logstash и две ноды kibana + +todo ??? + +* Мониторинг-стек на базе Prometheus и Grafana + +Так как Prometheus - это база данных, то оптимально будет выбрать решение на базе физической машины, +чтобы увеличить отказоустойчивость. + +* MongoDB, как основное хранилище данных для java-приложения + +todo ??? + +* Gitlab сервер для реализации CI/CD процессов и приватный (закрытый) Docker Registry + +todo ??? + +### Задача 3 + +> - Запустите первый контейнер из образа ***centos*** c любым тэгом в фоновом режиме, подключив папку ```/data``` из текущей рабочей директории на хостовой машине в ```/data``` контейнера; +> - Запустите второй контейнер из образа ***debian*** в фоновом режиме, подключив папку ```/data``` из текущей рабочей директории на хостовой машине в ```/data``` контейнера; +> - Подключитесь к первому контейнеру с помощью ```docker exec``` и создайте текстовый файл любого содержания в ```/data```; +> - Добавьте еще один файл в папку ```/data``` на хостовой машине; +> - Подключитесь во второй контейнер и отобразите листинг и содержание файлов в ```/data``` контейнера. + +todo ??? \ No newline at end of file