Контейнеризация как современный способ виртуализации | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 23 ноября, печатный экземпляр отправим 27 ноября.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №49 (339) декабрь 2020 г.

Дата публикации: 04.12.2020

Статья просмотрена: 387 раз

Библиографическое описание:

Евстратов, В. В. Контейнеризация как современный способ виртуализации / В. В. Евстратов. — Текст : непосредственный // Молодой ученый. — 2020. — № 49 (339). — С. 7-9. — URL: https://moluch.ru/archive/339/76072/ (дата обращения: 15.11.2024).



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

Ключевые слова: контейнеризация, виртуализация, микросервисы, docker, dockerfile, wordpress, phpmyadmin, nginx

Введение.

Контейнеризация — это метод виртуализации, при котором ядро операционной системы поддерживает несколько изолированных экземпляров пространства пользователя вместо одного [1] (как в виртуальных машинах).

Виртуализация в общем случае решает проблему зависимости программного обеспечения от окружения, в котором оно запускается. Например, если вы написали программу под Windows, то для того, чтобы запустить её на Linux’е необходимо создать изолированное окружение. Обычно изолированное окружение представляет собой виртуальную операционную систему.

Для решения проблемы из примера виртуальная ОС подходит хорошо. Но что, если нам необходимо запустить много разных приложений, причем они зависят не только от операционной системы, но и от версий стороннего ПО, которое установлено в данных ОС. Для создания одного изолированного виртуального пространства (виртуальная операционная система) требуется довольно много ресурсов гостевой ОС. Например, для создания виртуальной машины Linux требуется в среднем не менее 10 Гб [2], и это без данных.

Сравнение контейнеров и виртуальных машин.

Контейнеры и виртуальные машины обладают схожими преимуществами изоляции и распределения ресурсов, но функционируют по-разному, поскольку контейнеры виртуализируют операционную систему, а не аппаратное обеспечение. Контейнеры более портативны и эффективны. [3]

Контейнеры

Контейнеры — это абстракция на уровне приложения, которая хранит код и зависимости окружения вместе. Несколько контейнеров могут работать на одной машине и совместно использовать ядро ОС с другими контейнерами, каждый из которых работает как изолированный процесс в пользовательском пространстве. Контейнеры занимают меньше места, чем виртуальные машины (образы контейнеров обычно имеют размер в десятки МБ), могут обрабатывать больше приложений и требуют меньшего количества виртуальных машин и операционных систем. [3]

Виртуальная машина

Виртуальные машины (ВМ) — это абстракция физического оборудования, превращающая один сервер во множество серверов. Гипервизор позволяет запускать несколько виртуальных машин на одной машине. Каждая виртуальная машина включает в себя полную копию операционной системы, приложения, необходимые двоичные файлы и библиотеки — занимая десятки Гб. Виртуальные машины также могут медленно загружаться. [3]

Графическое сравнение контейнеров и виртуальных машин представлено на рисунках 1 и 2.

Виртуальные машины управляются гипервизором

Рис. 1. Виртуальные машины управляются гипервизором

Контейнеры управляются докером, дополнительные ВМ не требуются

Рис. 2. Контейнеры управляются докером, дополнительные ВМ не требуются

Растущая популярность контейнеров.

Контейнеризация и распространение микросервисной архитектуры в последнее время набирает большую популярность. Главным лидером рынка является компания Docker. В основном Docker и контейнеризацию внедряют крупные компании со штатом более 5000 человек, и с каждым годом их становится больше [4].

Запуск собственного Docker -контейнера.

Для создания и запуска контейнера необходимо выполнить следующие шаги:

  1. Написать Dockerfile
  2. Создать образ контейнера из Dokcerfile
  3. С помощью образа запустить экземпляр контейнера

Создадим простейший контейнер, который будет содержать web‑сервер nginx, wordpress и phpmyadmin веб-сайты:

Dockerfile:

FROM debian:buster

RUN apt-get update && \

apt-get -y install nginx mariadb-server php7.3-fpm php7.3-mysql openssl

ADD srcs/wordpress.tar.gz /var/www/

COPY srcs/nginx.conf /etc/nginx/nginx.conf

COPY srcs/wp_db_create.sql /etc/

COPY srcs/container_script.sh /etc/

EXPOSE 80 443

RUN mv /var/www/phpMyAdmin-4.9.0.1-all-languages /var/www/phpmyadmin && \

chown -R www-data:www-data /var/www/* && \

rm /etc/nginx/sites-enabled/default && \

service mysql start && \

mysql -u root < /etc/wp_db_create.sql && \

openssl req \

—newkey rsa:2048 -nodes -keyout etc/ssl/certs/localhost.key \

—x509 -days 365 -out etc/ssl/certs/localhost.crt -subj \

"/C=RU/ST=Kamchatka/L=P-Kamchatskii/O=KSTU/CN=localhost» && \

chmod 777 /etc/container_script.sh

CMD /etc/container_script.sh

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

Ключевое слово RUN определяет команды, которые будут запущены внутри контейнера во время его сборки. В данном случае мы устанавливаем nginx, клиент базы данных, php, и ssl клиент для возможности защищенного подключения к wordpress и phpmyadmin.

Ключевое слово COPY определяет файлы, которые будут скопированы из основной операционной системы внутрь контейнера. В данном примере мы копируем файлы будущих сайтов и.sh скрипт, который будет запускаться при старте контейнера (ключевое слово CMD).

Ключевое слово EXPOSE определяет, какие порты будут открыты у контейнера для взаимодействия с внешней средой. В нашем примере это 80 и 443 порты для подключения к веб-сайтам по протоколам http и https соответственно.

Для создания образа (image) контейнера необходимо выполнить команду:

docker build –t ContainerName.

Точка в конце означает текущую директорию. В общем случае там прописывается путь до dokcerfile.

На экране будет показан статус выполнения команд из докерфайла. Как только образ контейнера будет собран мы можем запустить команду

docker run –p 80:80 –p 443:443 –d ContainerName

Флаги p означают проброс портов между контейнером и основной ОС. Флаг d означает что мы запускаем контейнер в фоновом режиме (detach mode). После того как контейнер запущен, мы можем убедиться, что контейнер работает, выполнив команду:

docker ps

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

Полностью исходный код и файлы проекты можно посмотреть в github репозитории автора [https://github.com/vesord/ft_server]

Литература:

  1. Контейнеризация. — Текст: электронный // Википедия свободная энциклопедия. — URL: https://ru.wikipedia.org/wiki/Контейнеризация (дата обращения 01.12.2020)
  2. Ибраев М., Месропян Н. Контейнеризация простым языком. — Текст: электронный // Интервью. — URL: https://habr.com/ru/company/southbridge/blog/530226/ (дата обращения 30.11.2020)
  3. What is a Container. — Текст: электронный // Официальный сайт Docker. — URL: https://www.docker.com/resources/what-container (дата обращения 02.12.2020)
  4. Docker adoption. — Текст: электронный // Datadog, the essential monitoring and security platform for cloud applications. — URL: https://www.datadoghq.com/docker-adoption/ (дата обращения 03.12.2020)
Основные термины (генерируются автоматически): COPY, контейнер, RUN, ключевое слово, CMD, EXPOSE, FROM, машина, операционная система, виртуальная машина.


Похожие статьи

Использование Dapper C# в программировании

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

Разбор многоступенчатой конвертации на примере форматов sb3 и exe

В данной статье рассматриваются многоступенчатая конвертация, а также «нестандартный» способ конвертации на примере проектов, написанных на языке Scratch, в exe файл.

Некоторые методы масштабирования блокчейна Ethereum

В статье представлен обзор некоторых методов масштабирования блокчейна Ethereum.

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

Исследование процессов внутри виртуальной машины Java

В статье подробно описываются процессы виртуальной машины Javа, на что выделяется память, как устроена JVM, как в нее попадает код и как он исполняется.

Применение простой стеганографии при передаче файлов в интернете

В данной статье описывается понятие стеганографии, а также показывается её применение на простейших примерах в операционной системе Windows.

Абстрактные и динамически сгенерированные контроллеры в ASP.NET

В данной статье будет рассмотрен подход автоматически сгенерированных контроллеров в одной из самых популярных технологий для написания веб-сайтов — ASP.NET Core MVC.

Разработка алгоритма валидации форм на клиентской стороне для передачи данных

В данной статье рассмотрены методы и алгоритмы функционирования систем клиент-серверной архитектуры для передачи данных с помощью технологий программных инструментов: HTML, CSS, Javascript.

Сравнительный анализ библиотек языка PHP для формирования документов веб- сервисами

Задача автоматического создания файлов часто встает перед web- разработчиками, в частности в сфере разработки платформенных решений для транспорта. Для упрощения процесса формирования документов существует несколько библиотек для языка PHP. В статье ...

Диагностика утечек памяти в Java-приложениях

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

Похожие статьи

Использование Dapper C# в программировании

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

Разбор многоступенчатой конвертации на примере форматов sb3 и exe

В данной статье рассматриваются многоступенчатая конвертация, а также «нестандартный» способ конвертации на примере проектов, написанных на языке Scratch, в exe файл.

Некоторые методы масштабирования блокчейна Ethereum

В статье представлен обзор некоторых методов масштабирования блокчейна Ethereum.

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

Исследование процессов внутри виртуальной машины Java

В статье подробно описываются процессы виртуальной машины Javа, на что выделяется память, как устроена JVM, как в нее попадает код и как он исполняется.

Применение простой стеганографии при передаче файлов в интернете

В данной статье описывается понятие стеганографии, а также показывается её применение на простейших примерах в операционной системе Windows.

Абстрактные и динамически сгенерированные контроллеры в ASP.NET

В данной статье будет рассмотрен подход автоматически сгенерированных контроллеров в одной из самых популярных технологий для написания веб-сайтов — ASP.NET Core MVC.

Разработка алгоритма валидации форм на клиентской стороне для передачи данных

В данной статье рассмотрены методы и алгоритмы функционирования систем клиент-серверной архитектуры для передачи данных с помощью технологий программных инструментов: HTML, CSS, Javascript.

Сравнительный анализ библиотек языка PHP для формирования документов веб- сервисами

Задача автоматического создания файлов часто встает перед web- разработчиками, в частности в сфере разработки платформенных решений для транспорта. Для упрощения процесса формирования документов существует несколько библиотек для языка PHP. В статье ...

Диагностика утечек памяти в Java-приложениях

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

Задать вопрос