В этой статье мы подробно рассмотрим процесс размещения скрипта Python в контейнере Docker.
Что такое контейнер?
Контейнер представляет собой пакет всех требований к системе и программному обеспечению, которые необходимы для запуска приложения. Он состоит из исполняемых файлов времени выполнения, системных настроек, кода и библиотек.
Таким образом, с контейнерами мы можем изменять спецификации, поскольку контейнеры доступны для записи, а затем легко размещать в них приложения.
Размещение скрипта Python в Docker
Разобравшись с контейнерами, пора реализовать сценарий через контейнеры. Тем самым мы гарантируем, что контейнер позаботится обо всех требованиях и хостинге.
Перед развертыванием скрипта давайте разберемся, как размещается приложение в Docker контейнере.
- Сначала нам нужно создать Dockerfile. Dockerfile является конфигом, который необходим для создания Docker images. Он содержит все необходимые команды, которые мы обычно выполняем через командную строку для создания образа контейнера.
- Создав Dockerfile, нам теперь нужно создать образ поверх Dockerfile. Docker images можно рассматривать как шаблон, который помогает создать контейнер в докер. Он упаковывает приложения и устанавливает серверную среду, что упрощает нам использование среды для размещения приложений в контейнерах удобным способом.
- Теперь мы можем запустить изображение, чтобы увидеть вывод скрипта python. Как только образ запускается, создается контейнер со случайным именем.
Теперь приступим к реализации!! Мы будем использовать приведенный ниже сценарий Python для размещения его в контейнере докера.
УСТАНОВКА DOCKER НА UBUNTU 2022 | ЗА ПЯТЬ МИНУТ | БЕЗ ВОДЫ
lst = list() lst = [‘Python’, ‘Machine Learning’, ‘R Language’, ‘Bootstrap’] for x in lst: print(x)
В приведенном выше сценарии мы создали список, а затем выполнили итерацию цикла for для печати элементов списка.
1. Создайте Dockerfile.
FROM python:3 ADD sample.py / CMD [ «python», «./sample.py» ]
Dockerfile предлагает определенные директивы, как показано ниже —
- FROM — Эта директива устанавливает базовый образ для последующих инструкций по работе. В этом примере мы установили Python версии 3 в качестве базового изображения. Теперь Dockerfile получит этот базовый образ из Docker Hub, который на самом деле является репозиторием образов с открытым исходным кодом.
- ADD — инструкция ADD копирует новые файлы, каталоги или URL-адреса удаленных файлов из и добавляет их в файловую систему изображения по пути . В нашем случае src = sample.py , и пункт назначения /
- CMD — эта директива запускает службы вместе с базовым настраиваемым образом.
2. Создание образа из Dockerfile
После создания Dockerfile нам нужно создать образ поверх файла Docker, используя следующую команду:
docker build -t image-name:tag .
Учебник. Контейнеризация приложения .NET
Из этого руководства вы узнаете, как контейнеризировать приложение .NET с помощью Docker. Контейнеры имеют множество функций и преимуществ, таких как неизменяемая инфраструктура, предоставление переносимой архитектуры и обеспечение масштабируемости. Этот образ можно использовать для создания контейнеров в вашей локальной среде разработки, частном или общедоступном облаке.
Установка Docker на операционную систему Windows 10.
В этом учебнике рассмотрены следующие задачи.
- Создание и публикация простого приложения .NET.
- Создание и настройка Dockerfile для .NET.
- Создание образа Docker
- создать и запустить контейнер Docker.
Вы также узнаете о задачах сборки и развертывания контейнера Docker для приложения .NET. Платформа Docker использует модуль Docker для быстрой сборки и упаковки приложений в качестве образов Docker. Эти образы имеют формат Dockerfile и предназначены для развертывания и запуска в многоуровневом контейнере.
Это руководство не относится к приложениям ASP.NET Core. Если вы используете ASP.NET Core, см. руководство по контейнеризации приложений ASP.NET Core.
Предварительные требования
Установите следующие необходимые компоненты:
- Пакет SDK для .NET
Если у вас установлена платформа .NET, воспользуйтесь командой dotnet —info , чтобы определить используемую версию пакета SDK. - Docker Community Edition.
- Временная рабочая папка для Dockerfile и примера приложения .NET. В этом руководстве в качестве рабочей папки используется имя docker-working.
Создание приложения .NET
Вам нужно создать приложение .NET для выполнения в контейнере Docker. Откройте терминал, создайте рабочую папку, если вы еще этого не сделали, и войдите в нее. В рабочей папке выполните следующую команду, чтобы создать проект в подкаталоге App:
dotnet new console -o App -n DotNet.Docker
Дерево папок будет выглядеть следующим образом:
docker-working └── App ├──DotNet.Docker.csproj ├──Program.cs └── obj ├── DotNet.Docker.csproj.nuget.dgspec.json ├── DotNet.Docker.csproj.nuget.g.props ├── DotNet.Docker.csproj.nuget.g.targets ├── project.assets.json └── project.nuget.cache
Команда dotnet new создает папку с именем App и консольное приложение Hello World. Измените каталоги и перейдите в папку App из сеанса терминала. Используйте команду dotnet run , чтобы запустить приложение. Приложение запустится и выведет Hello World! под командой:
cd App dotnet run Hello World!
Шаблон по умолчанию создает приложение, которое выводит текст в терминал и затем завершает работу. В этом руководстве описано, как использовать приложение с бесконечным циклом выполнения. Откройте файл Program.cs в текстовом редакторе.
Если вы используете Visual Studio Code, в предыдущем сеансе терминала введите следующую команду:
code .
Откроется папка App, которая содержит проект в Visual Studio Code.
Файл Program.cs должен выглядеть как следующий фрагмент кода C#:
Console.WriteLine(«Hello World!»);
Замените его кодом, который считает числа каждую секунду:
var counter = 0; var max = args.Length is not 0 ? Convert.ToInt32(args[0]) : -1; while (max is -1 || counter < max) < Console.WriteLine($»Counter: <++counter>»); await Task.Delay(TimeSpan.FromMilliseconds(1_000)); >
Сохраните файл и протестируйте программу еще раз с помощью команды dotnet run . Помните, что это приложение выполняется бесконечно. Остановите его с помощью команды отмены, нажав клавиши CTRL+C . Ниже представлен пример таких выходных данных:
dotnet run Counter: 1 Counter: 2 Counter: 3 Counter: 4 ^C
Если приложению передать число в командной строке, оно досчитает до такого числа и завершит работу. Введите команду dotnet run — 5 , чтобы приложение досчитало до пяти.
Все параметры после — не передаются команде dotnet run , а передаются в приложение.
Публикация приложения .NET
Прежде чем добавлять приложение .NET в образ Docker, его необходимо опубликовать. Рекомендуется, чтобы в контейнере была запущена опубликованная версия приложения. Чтобы опубликовать приложение, выполните следующую команду:
dotnet publish -c Release
Эта команда компилирует приложение и помещает результат в папку publish. Путь к папке publish из рабочей папки должен быть таким: .AppbinReleasenet7.0publish
Получите список файлов для папки publish из папки App, чтобы проверить, был ли создан файл DotNet.Docker.dll.
dir .binReleasenet7.0publish Directory: C:UsersdapineAppbinReleasenet7.0publish Mode LastWriteTime Length Name —- ————- —— —- -a— 2/13/2023 1:52 PM 431 DotNet.Docker.deps.json -a— 2/13/2023 1:52 PM 6144 DotNet.Docker.dll -a— 2/13/2023 1:52 PM 153600 DotNet.Docker.exe -a— 2/13/2023 1:52 PM 11052 DotNet.Docker.pdb -a— 2/13/2023 1:52 PM 253 DotNet.Docker.runtimeconfig.json
Воспользуйтесь командой ls , чтобы получить список каталога и проверить, был ли создан файл DotNet.Docker.dll.
Создание файла Dockerfile
Файл Dockerfile используется командой docker build для создания образа контейнера. Это текстовый файл с именем Dockerfile, не имеющий расширения.
Создайте файл с именем Dockerfile в каталоге, содержав csproj , и откройте его в текстовом редакторе. В этом учебнике будет использоваться образ среды выполнения ASP.NET Core (который содержит образ среды выполнения .NET). Он подходит для консольного приложения .NET.
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-env WORKDIR /App # Copy everything COPY . ./ # Restore as distinct layers RUN dotnet restore # Build and publish a release RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:7.0 WORKDIR /App COPY —from=build-env /App/out . ENTRYPOINT [«dotnet», «DotNet.Docker.dll»]
Образ среды выполнения ASP.NET Core используется намеренно, хотя может использоваться образ mcr.microsoft.com/dotnet/runtime:7.0 .
В этом dockerfile используются многоэтапные сборки, которые оптимизируют окончательный размер образа, накладывая сборку на слои и оставляя только необходимые артефакты. Дополнительные сведения см. в статье Документация По Docker: многоэтапные сборки.
Ключевое слово FROM требует полного имени образа контейнера Docker. Реестр контейнеров Майкрософт (MCR, mcr.microsoft.com) — это синдикат Docker Hub, в котором размещаются общедоступные контейнеры. Сегмент dotnet — это репозиторий контейнера, а sdk сегмент или aspnet — имя образа контейнера. Образ помечается 7.0 для управления версиями. Таким образом, mcr.microsoft.com/dotnet/aspnet:7.0 является средой выполнения .NET 7.0.
Убедитесь, что вызываете версию среды выполнения, которая соответствует версии среды выполнения, с которой работает пакет SDK. Например, приложение, созданное в предыдущем разделе, использовало пакет SDK для .NET 7.0, а базовый образ, указанный в Dockerfile , помечен как 7.0.
Сохраните файл Dockerfile. Структура каталогов рабочей папки должна выглядеть следующим образом. Некоторые файлы и папки на более глубоком уровне были опущены для экономии места в статье:
docker-working └── App ├── Dockerfile ├── DotNet.Docker.csproj ├── Program.cs ├── bin │ └── Release │ └── net7.0 │ └── publish │ ├── DotNet.Docker.deps.json │ ├── DotNet.Docker.exe │ ├── DotNet.Docker.dll │ ├── DotNet.Docker.pdb │ └── DotNet.Docker.runtimeconfig.json └──obj └──.
В терминале выполните следующую команду:
docker build -t counter-image -f Dockerfile .
Docker обработает все строки файла Dockerfile. в . команде docker build задает контекст сборки образа. Параметр -f — это путь к Dockerfile. Эта команда создает образ и локальный репозиторий с именем counter-image, который указывает на такой образ. После завершения работы этой команды выполните команду docker images , чтобы просмотреть список установленных образов:
docker images REPOSITORY TAG IMAGE ID CREATED SIZE counter-image latest 2f15637dc1f6 10 minutes ago 208MB
Репозиторий counter-image — это имя образа. Тег latest — это тег, который используется для идентификации изображения. — 2f15637dc1f6 это идентификатор изображения. — 10 minutes ago это время создания образа. — 208MB это размер изображения. Последние шаги Dockerfile — создание контейнера из образа и запуск приложения, копирование опубликованного приложения в контейнер и определение точки входа.
FROM mcr.microsoft.com/dotnet/aspnet:7.0 WORKDIR /App COPY —from=build-env /build/out . ENTRYPOINT [«dotnet», «DotNet.Docker.dll»]
Команда COPY предписывает Docker скопировать указанную папку на вашем компьютере в папку в контейнере. В этом примере папка публикации копируется в папку build в контейнере.
Команда WORKDIR изменяет текущий каталог в контейнере на App.
Следующая команда ENTRYPOINT используется, чтобы настроить с помощью Docker контейнер для запуска в качестве исполняемого файла. При запуске контейнера выполняется команда ENTRYPOINT . После выполнения команды контейнер автоматически остановится.
Для обеспечения дополнительной безопасности можно отказаться от использования конвейера диагностики. Если вы откажетесь, контейнер будет работать только для чтения. Для этого укажите переменную DOTNET_EnableDiagnostics среды как 0 (непосредственно перед ENTRYPOINT шагом):
ENV DOTNET_EnableDiagnostics=0
Дополнительные сведения о различных переменных среды .NET см. здесь.
.NET 6 стандартизует префикс DOTNET_ вместо COMPlus_ для переменных среды, которые настраивают поведение .NET во время выполнения. Но префикс COMPlus_ будет и дальше работать. Если вы используете предыдущую версию среды выполнения .NET, следует и дальше использовать префикс COMPlus_ для переменных среды.
В окне терминала выполните команду docker build -t counter-image -f Dockerfile . , а после ее выполнения — команду docker images .
Каждая команда в файле Dockerfile создает уровень и экземпляр IMAGE ID. Окончательный идентификатор ОБРАЗА (ваш будет отличаться) — 2f15637dc1f6 . Далее вы создадите контейнер на основе этого образа.
Создание контейнера
Теперь, когда у вас есть образ, содержащий приложение, вы можете создать контейнер. Контейнер можно создать двумя способами. Сначала создайте остановленный контейнер.
docker create —name core-counter counter-image
Команда docker create выше создает контейнер на основе образа counter-image. В выходных данных этой команды отображается идентификатор контейнера (ваш будет отличаться) созданного контейнера:
d0be06126f7db6dd1cee369d911262a353c9b7fb4829a0c11b4b2eb7b2d429cf
Чтобы просмотреть список всех контейнеров, воспользуйтесь командой docker ps -a :
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d0be06126f7d counter-image «dotnet DotNet.Docke…» 12 seconds ago Created core-counter
Управление контейнером
Контейнер был создан с определенным именем core-counter . Для управления контейнером используется это имя. В следующем примере используется команда docker start для запуска контейнера, а затем — команда docker ps для отображения только запущенных контейнеров:
docker start core-counter core-counter docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf01364df453 counter-image «dotnet DotNet.Docke…» 53 seconds ago Up 10 seconds core-counter
Аналогично, команда docker stop останавливает контейнер. В следующем примере используется команда docker stop для остановки контейнера, а затем — команда docker ps для подтверждения того, что контейнеры не запущены:
docker stop core-counter core-counter docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Подключение к контейнеру
После запуска контейнера вы можете подключиться к нему, чтобы просмотреть выходные данные. С помощью команд docker start и docker attach запустите контейнер и просмотрите поток вывода.
В этом примере команда, вызываемая нажатием клавиш CTRL+C , используется для отключения от запущенного контейнера. Нажатие клавиш завершает процесс в контейнере, если не указано иное, что приведет к остановке контейнера. Параметр —sig-proxy=false гарантирует, что команда, вызываемая нажатием клавиш CTRL+C , не остановит процесс в контейнере.
После отключения от контейнера снова подключитесь к нему, чтобы убедиться в том, что он продолжает работать и считать числа.
docker start core-counter core-counter docker attach —sig-proxy=false core-counter Counter: 7 Counter: 8 Counter: 9 ^C docker attach —sig-proxy=false core-counter Counter: 17 Counter: 18 Counter: 19 ^C
Удаление контейнера
В этой статье вы не хотите, чтобы контейнеры висели вокруг, которые ничего не делают. Удалите созданный ранее контейнер. Если контейнер запущен, остановите его.
docker stop core-counter
В примере ниже выводится список всех контейнеров, Затем он использует docker rm команду для удаления контейнера, а затем второй раз проверяет наличие запущенных контейнеров.
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f6424a7ddce counter-image «dotnet DotNet.Dock…» 7 minutes ago Exited (143) 20 seconds ago core-counter docker rm core-counter core-counter docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Однократный запуск
Docker предоставляет единую команду docker run для создания и запуска контейнера. Она исключает необходимость в поочередном выполнении команд docker create и docker start . Вы также можете настроить ее для автоматического удаления контейнера при его остановке. Например, команда docker run -it —rm выполняет две операции. Сначала она автоматически подключается к контейнеру с помощью текущего терминала, а потом, после завершения работы контейнера, удаляет его:
docker run -it —rm counter-image Counter: 1 Counter: 2 Counter: 3 Counter: 4 Counter: 5 ^C
Контейнер также передает параметры для выполнения приложения .NET. Чтобы дать приложению .NET команду считать только до 3, передайте 3.
docker run -it —rm counter-image 3 Counter: 1 Counter: 2 Counter: 3
Во время выполнения docker run -it команда, вызываемая нажатием клавиш CTRL+C , остановит процесс, запущенный в контейнере. А это, в свою очередь, приведет к остановке контейнера. Так как в команде указан параметр —rm , контейнер автоматически удалится после остановки процесса. Убедитесь, что он больше не существует:
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Изменение команды ENTRYPOINT
Команда docker run также позволяет изменить команду ENTRYPOINT из файла Dockerfile для запуска другой программы, но только для соответствующего контейнера. Например, воспользуйтесь указанной ниже командой, чтобы запустить bash или cmd.exe . При необходимости измените команду.
В этом примере команда ENTRYPOINT изменена на cmd.exe . Нажав клавиши CTRL+C , вы можете завершить процесс и остановить контейнер.
docker run -it —rm —entrypoint «cmd.exe» counter-image Microsoft Windows [Version 10.0.17763.379] (c) 2018 Microsoft Corporation. All rights reserved. C:>dir Volume in drive C has no label. Volume Serial Number is 3005-1E84 Directory of C: 04/09/2019 08:46 AM app 03/07/2019 10:25 AM 5,510 License.txt 04/02/2019 01:35 PM Program Files 04/09/2019 01:06 PM Users 04/02/2019 01:35 PM Windows 1 File(s) 5,510 bytes 4 Dir(s) 21,246,517,248 bytes free C:>^C
В этом примере команда ENTRYPOINT изменена на bash . Команда exit позволяет завершить процесс и остановить контейнер.
Основные команды
В Docker есть множество различных команд, которые создают контейнеры и образы, управляют ими, а также взаимодействуют с ними. Для управления контейнерами в основном используются такие команды Docker:
Очистка ресурсов
В этом учебнике описано, как создать контейнеры и образы. При желании эти ресурсы можно удалить. Ниже представлены команды, которые позволяют сделать следующее:
-
Вывести список всех контейнеров.
docker ps -a
docker stop core-counter
docker rm core-counter
Затем удалите все ненужные образы на компьютере. Удалите образ, созданный с помощью файла Dockerfile, а затем удалите образ .NET, на основе которого был создан файл Dockerfile.
Вы можете использовать значение IMAGE ID или строку в формате РЕПОЗИТОРИЙ:МЕТКА.
docker rmi counter-image:latest docker rmi mcr.microsoft.com/dotnet/aspnet:7.0
С помощью команды docker images просмотрите список установленных образов.
Файлы образов могут иметь большой размер. Как правило, удаляются временные контейнеры, созданные в ходе тестирования и разработки приложения. При этом рекомендуется оставить базовые образы с установленной средой выполнения, если на ее основе вы планируете создавать другие образы.
Следующие шаги
- Узнайте, как упаковать в контейнер приложение ASP.NET Core.
- Изучите руководство по микрослужбам ASP.NET Core.
- Узнайте больше о службах Azure, которые поддерживают контейнеры.
- Ознакомьтесь с командами Dockerfile.
- Изучите инструменты Visual Studio для контейнеров
Источник: learn.microsoft.com
Докеризация веб-приложения Node.js
Цель этого примера — показать, как поместить приложение Node.js в Docker-контейнер. Это руководство предназначено для разработки, но не для прямого использования в продакшене. Мы также предполагаем, что вы успешно установили Docker на свой ПК и имеете базовое представление о структуре Node.js приложения.
В первой части руководства мы создадим простое Node.js приложение, затем мы сделаем для него docker-образ, и, наконец, инициализируем экземпляр контейнера из этого образа.
Docker позволяет вам упаковать приложение вместе с его окружением и всеми зависимостями в «коробку», называемую контейнером. Обычно контейнер состоит из приложения, работающего в упрощенной версии ОС Linux. Образ — это шаблон для контейнера, контейнер — это работающий экземпляр образа.
Создание приложения Node.js
Для начала создадим новую директорию, в которой будут находиться все файлы приложения. В этой директории создайте файл package.json , в котором описано приложение и его зависимости:
< «name»: «docker_web_app», «version»: «1.0.0», «description»: «node.js on docker», «author»: «first last [email protected]>», «main»: «server.js», «scripts»: < «start»: «node server.js» >, «dependencies»: < «express»: «^4.16.1» >>
После создания файла package.json , выполните команду npm install . Если вы используете npm версии 5 или выше, это также создаст файл package-lock.json , который будет скопирован в ваш docker-образ.
Далее создайте файл server.js , который определяет веб-приложение на основе фреймворка Express.js:
‘use strict’; const express = require(‘express’); // константы const port = 8080; const host = ‘0.0.0.0’; // приложение const app = express(); app.get(‘/’, (req, res) => < res.send(‘Hello World’); >); app.listen(PORT, HOST, () => < console.log(`Running on http://$:$`); >);
Далее мы рассмотрим, как можно запускать это приложение внутри Docker-контейнера, используя официальный образ Docker’а. Сначала давайте создадим Docker-образ с нашим приложением.
Создание файла Dockerfile
Создайте пустой файл с именем Dockerfile :
touch Dockerfile
Откройте этот файл в вашем любимом текстовом редакторе.
Первое, что нам надо сделать — определить базовый образ, который будет взят за основу. Мы будем использовать образ node последней версии LTS* (версии с долгосрочной поддержкой) — 12 , доступный на Docker Hub.
* Прим. переводчика: на момент написания статьи.
FROM node:12
Затем создадим директорию для кода приложения внутри образа. Это будет рабочая папка для вашего приложения.
# создание директории приложения WORKDIR /usr/src/app
Образ, который мы используем, поставляется с уже предустановленным Node.js и NPM. Поэтому мы можем просто установить зависимости приложения с помощью команд npm . Обратите внимание, если вы используете npm 4 или ниже, файл package-lock.json не будет сгенерирован.
# установка зависимостей # символ астериск («*») используется для того чтобы по возможности # скопировать оба файла: package.json и package-lock.json COPY package*.json ./ RUN npm install # Если вы создаете сборку для продакшн # RUN npm ci —omit=dev
Обратите внимание, что вместо того, чтобы копировать весь рабочий каталог, мы копируем только файл package.json . Это позволяет воспользоваться кэшированием слоев в Docker. Здесь bitJudo дал хорошее объяснение того, как это работает. Более того, команда npm ci , указанная в комментарии, позволяет создавать более быстрые, надежные, воспроизводимые сборки для продакшена. вы можете прочесть больше об этой команде здесь.
Чтобы отправить исходный код вашего приложения внутрь Docker-образа, используйте директиву COPY .
# копируем исходный код COPY . .
Сервер привязан к 8080 порту, поэтому мы будем использовать инструкцию EXPOSE , чтобы проинформировать Docker о том, что в контейнере имеется приложение, прослушивающее этот порт.
EXPOSE 8080
Последняя, но не менее важная команда CMD содержит все необходимые переменные среды и инструкции для запуска приложения. Здесь мы просто используем node server.js для запуска.
CMD [ «node», «server.js» ]
Ваш Dockerfile теперь должен выглядеть примерно так:
FROM node:12 # создание директории приложения WORKDIR /usr/src/app # установка зависимостей # символ астериск («*») используется для того чтобы по возможности # скопировать оба файла: package.json и package-lock.json COPY package*.json ./ RUN npm install # Если вы создаете сборку для продакшн # RUN npm ci —omit=dev # копируем исходный код COPY . . EXPOSE 8080 CMD [ «node», «server.js» ]
node_modules npm-debug.log
Это предотвратит копирование локально установленных модулей и дебаг-логов в Docker-образ и возможную перезапись модулей установленных внутри образа.
Сборка образа
Перейдите в директорию, в которой находится ваш Dockerfile и запустите следующую команду, чтобы собрать Docker-образ. Флаг -t позволяет поставить тэг к вашему образу, чтобы его позже было проще найти при помощи команды docker images :
docker build . -t /node-web-app
Созданный образ теперь будет отображаться в списке всех образов:
$ docker images # пример вывода repository tag id created node 12 1934b0b038d1 5 days ago /node-web-app latest d64d3505b0d2 1 minute ago
Запуск образа
Запуск образа с флагом -d позволяет контейнеру работать в фоновом режиме. Флаг -p перенаправляет публичный порт на приватный порт внутри контейнера. Запустите образ, который вы ранее создали:
docker run -p 49160:8080 -d /node-web-app
Отобразите логи вашего приложения:
# отобразить все контейнеры, чтобы получить id нужного нам $ docker ps # отобразить логи $ docker logs # пример логов running on http://localhost:8080
Если вам нужно попасть внутрь контейнера, используйте команду exec :
# войти в контейнер в интерактивном режиме $ docker exec -it /bin/bash
Проверка
Чтобы проверить ваше приложение, используйте публичный порт, к которому привязан контейнер:
$ docker ps # пример вывода id image command . ports ecce33b30ebf /node-web-app:latest npm start . 49160->8080
В примере выше docker связал порт 8080 внутри контейнера с портом 49160 на вашем компьютере.
Вы можете сделать запрос к вашему приложению с помощью утилиты curl (установите ее, если требуется с помощью команды: sudo apt-get install curl ):
$ curl -i localhost:49160 http/1.1 200 ok x-powered-by: express content-type: text/html; charset=utf-8 content-length: 12 etag: w/»c-m6twob/y57lesdjquheb1p/qtv0″ date: mon, 13 nov 2017 20:53:59 gmt connection: keep-alive hello world
Надеемся, что эта инструкция помогла вам настроить и запустить простое приложение Node.js с помощью Docker.
Вы можете найти больше информации о Docker и Node.js в docker по следующим ссылкам:
- Официальный docker-образ Node.js
- Руководство по лучшим практикам Node.js в Docker
- Официальная документация Docker
- Тэг Docker на stack overflow
- Канал Docker на reddit
Copyright OpenJS Foundation and Node.js contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation, please see our Trademark Policy and Trademark List. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders.
Use of them does not imply any affiliation with or endorsement by them.
Источник: nodejs.org