Контейнеризация простого приложения JavaScript с помощью Docker — часть 1


Введение

В этом руководстве мы возьмем простое приложение Javascript (исходный код взят из Docker) и запустим его в контейнере с помощью Docker.

Это первая из серии статей о контейнерах. Вот краткое описание того, что нас ждет.

  1. В первой части мы рассмотрим размещение простого приложения в контейнере Docker.

2: В части 2 мы рассмотрим создание постоянного хранилища для нашего приложения с помощью Dockeer.

3: В части 3 мы возьмем наше приложение, которое мы контейнеризировали с помощью Docker, и поместим его в локальное развертывание Kubernetes с помощью minikube.

4: В части 4 мы рассмотрим развертывание нашего приложения в кластере Azure Kubernetes и его публичное раскрытие.

5: В части 5 мы рассмотрим добавление контроллера входа и WAF перед нашим приложением с помощью Azure Application Gateway.

С момента своего первого появления в 2013 году Docker получил широкое распространение. Движок Docker — далеко не единственная технология контейнеризации, представленная на рынке. Вы можете использовать инструменты с открытым исходным кодом, такие как Buildah или Podman, для достижения тех же результатов. На самом деле Docker состоит из нескольких продуктов, но наиболее известна она благодаря движку Docker.

Образы, которые мы будем создавать, имеют тип файла .Dockerfile, однако на самом деле это образы OCI. OCI или open container initiative — это структура управления с открытым исходным кодом для создания открытых отраслевых стандартов для форматов контейнеров и средств исполнения. Это означает, что любой образ в формате OCI может быть перенесен в любую среду исполнения контейнеров, поддерживающую OCI, а не только Docker, поэтому вы можете запустить свой образ с помощью среды исполнения containerd или среды исполнения, поддерживающей OCI.

Контейнеры против виртуализации

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

Необходимые условия

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

  • Рабочий стол Docker

  • WSL2, если вы используете windows. Это позволит вам запустить подсистему Linux, если вы используете машину windows. Если вы используете Mac OS x, то это не требуется.

  • Git

Помещение нашего приложения в контейнер

Приложение, которое мы собираемся поместить в контейнер, представляет собой простой список дел, построенный с использованием Javascript. Я взял пример кода из документации Docker и не имею никакой заслуги в его создании.

1: Начните с создания форка моего репозитория, расположенного на Github.

2: Клонируйте репозиторий на свою локальную машину, запустив Git clone.

3: Перейдите в каталог docker/app, где вы увидите Dockerfile для приложения и исходный код, который мы будем компилировать при сборке образа.

Перед сборкой образа давайте разберем инструкции в Dockerfile. Dockerfile — это текстовый документ, содержащий все команды, которые пользователь может вызвать в командной строке для сборки образа. Именно эти команды используются для сборки нашего образа.

FROM node:12-alpine
RUN apk add --no-cache python2 g++ make
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Вход в полноэкранный режим Выйти из полноэкранного режима

From — Здесь мы указываем существующий образ из публичного репозитория Docker для использования в качестве основы.
Run — инструкция RUN используется для выполнения любых команд поверх текущего образа, что приведет к созданию нового слоя.
WORKDIR —
COPY — команда COPY используется для копирования файлов, каталогов и удаленных URL-файлов в место назначения в файловой системе образа Docker.
CMD — Инструкция CMD используется для задания команды, которая будет выполняться при запуске контейнера. В Dockerfile должен быть только один CMD.
EXPOSE — инструкция EXPOSE используется для информирования о сетевых портах, которые контейнер прослушивает во время выполнения.

Давайте соберем образ

4: Запустите Docker Build -t todo-list.

Сборка образа займет пару минут. После завершения сборки мы можем проверить, существует ли образ, просмотрев список наших образов docker:

Docker image ls
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы видим, что наш образ был успешно собран и помечен как «latest». По желанию мы можем использовать семантическую версионность.

5: Давайте запустим приложение локально:

docker run -dp 3000:3000 todo-list
Войти в полноэкранный режим Выход из полноэкранного режима

Теперь вы должны иметь доступ к приложению списка дел на http://localhost:3000/ в вашем браузере.

Флаг -dp указывает Docker на отсоединение контейнера и сопоставление порта приложения 3000 с локальным портом на нашей машине, в данном случае это 3000. Вы можете сопоставить порт, который прослушивает приложение, с любым портом, доступным на вашей машине.

Следующие шаги

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

Оцените статью
devanswers.ru
Добавить комментарий