Поиск по сайту:

Как запустить Nginx в контейнере Docker в Ubuntu 22.04


Введение

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

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

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

В этом руководстве вы узнаете, как обслуживать небольшую веб-страницу, настроив Nginx с контейнером Docker.

Предпосылки

Чтобы следовать этому руководству, вам понадобится следующее:

  • Один сервер Ubuntu 22.04, настроенный в соответствии с руководством по первоначальной настройке сервера Ubuntu 22.04, включая пользователя без полномочий root и брандмауэр.
  • Docker установлен на вашем сервере. Выполните шаги 1 и 2 нашего руководства по установке и использованию Docker в Ubuntu 22.04.

Установив Docker на вашем сервере, вы можете перейти к первому шагу.

Шаг 1 — Загрузка Nginx из Docker Hub

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

Вы можете загрузить Nginx из предварительно созданного образа Docker с конфигурацией Nginx по умолчанию, выполнив следующую команду:

  1. docker pull nginx

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

Теперь, когда у вас установлен Nginx, вы можете настроить контейнер так, чтобы он был общедоступным в качестве веб-сервера. Чтобы запустить контейнер Nginx Docker, выполните следующую команду:

  1. docker run --name docker-nginx -p 80:80 nginx

Вот краткое изложение того, что происходит с этой командой:

  • run – это команда для создания нового контейнера.
  • Флаг --name указывает имя контейнера. Если оставить пустым, будет присвоено сгенерированное имя, например nostalgic_hopper.
  • -p указывает порт, который вы предоставляете, в формате -p локальный-машинный-порт:внутренний-контейнерный-порт. В этом случае вы сопоставляете порт :80 в контейнере с портом :80 на сервере.
  • nginx – это имя образа в Docker Hub.

В веб-браузере введите IP-адрес вашего сервера, чтобы открыть целевую страницу Nginx по умолчанию:

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

В терминале введите CTRL+C, чтобы остановить запуск контейнера.

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

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 05012ab02ca1 nginx "nginx -g 'daemon off" 57 seconds ago Exited (0) 47 seconds ago docker-nginx

Вывод показывает, что контейнер Docker вышел.

Удалите существующий контейнер docker-nginx с помощью этой команды:

  1. docker rm docker-nginx

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

Шаг 2 — Запуск в автономном режиме

Создайте новый отдельный контейнер Nginx с помощью этой команды:

  1. docker run --name docker-nginx -p 80:80 -d nginx

Прикрепив флаг -d, вы запускаете этот контейнер в фоновом режиме.

Результатом является идентификатор контейнера:

Output
b91f3ce26553f3ffc8115d2a8a3ad2706142e73d56dc279095f673580986257

Выполнив команду docker ps, вы увидите новую информацию о вашем контейнере:

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b91f3ce26553 nginx "/docker-entrypoint.…" 56 seconds ago Up 54 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp docker-nginx

Вместо Вышел (0) X минут назад теперь в столбце СТАТУС указано В работе около минуты. Также обратите внимание, что сопоставление портов также является частью вывода.

Введите IP-адрес вашего сервера в браузере, чтобы снова перейти на целевую страницу Nginx по умолчанию. На этот раз он работает в фоновом режиме, потому что вы указали флаг -d, который указывает Docker запускать этот контейнер в автономном режиме.

Теперь у вас есть работающий экземпляр Nginx в отдельном контейнере. В настоящее время контейнер не имеет доступа ни к одному из файлов вашего веб-сайта.

Остановите контейнер, выполнив следующую команду:

  1. docker stop docker-nginx

Теперь, когда контейнер остановлен, вы можете удалить его, выполнив следующую команду:

  1. docker rm docker-nginx

Теперь, когда вы понимаете, как запускать Nginx независимо от вашего контейнера, на следующем шаге вы создадите и настроите Nginx для создания целевой страницы.

Шаг 3 — Создание веб-страницы для обслуживания на Nginx

На этом этапе вы создадите пользовательскую страницу для своего веб-сайта. Эта настройка позволяет вам иметь постоянное содержимое веб-сайта, размещенное вне контейнера.

Создайте новый каталог для содержимого вашего веб-сайта в домашнем каталоге:

  1. mkdir -p ~/docker-nginx/html

Перейдите к нему, выполнив эту команду:

  1. cd ~/docker-nginx/html

Создайте HTML-файл для использования на вашем сервере. В следующем примере используется nano, но вы можете использовать предпочитаемый вами текстовый редактор:

  1. nano index.html

Вставьте следующий HTML-контент:

<html>
  <head>
    <title>Docker nginx Tutorial</title>
  </head>

  <body>
    <div class="container">
      <h1>Hello DigitalOcean</h1>
      <p>This Nginx page is brought to you by Docker and DigitalOcean</p>
    </div>
  </body>
</html>

Если вы используете текстовый редактор nano, выйдите и сохраните этот файл, нажав CTRL+X, затем Y, затем ENTER. .

Теперь у вас есть индексная страница, которая заменяет целевую страницу Nginx по умолчанию.

Шаг 4 — Связывание контейнера с локальной файловой системой

На этом шаге вы свяжете Nginx со своим контейнером, чтобы он был общедоступным через порт: 80, и подключите его к содержимому вашего веб-сайта на сервере.

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

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

Контейнер Nginx по умолчанию настроен на поиск индексной страницы в /usr/share/nginx/html. В вашем новом контейнере Docker вам нужно будет предоставить ему доступ к вашим файлам в этом месте.

Для этого используйте флаг -v, чтобы сопоставить папку ~/docker-nginx/html с вашего сервера относительному пути в контейнере/usr/. share/nginx/html с помощью этой команды:

  1. docker run --name docker-nginx -p 80:80 -d -v ~/docker-nginx/html:/usr/share/nginx/html nginx

Вот краткое объяснение команды:

    Флаг
  • -v указывает, что вы связываете том.
  • Слева от : находится ваш каталог на вашем сервере, ~/docker-nginx/html.
  • Справа от : находится место, которое вы символически связываете со своим контейнером /usr/share/nginx/html.

После выполнения этой команды введите IP-адрес вашего сервера в браузер, чтобы просмотреть новую целевую страницу:

Если вас устраивают настройки Nginx по умолчанию, настраивать больше нечего.

Вы можете загрузить дополнительный контент в каталог ~/docker-nginx/html/, и он будет добавлен на ваш работающий веб-сайт.

Например, если вы измените свой файл HTML и обновите свой браузер, он будет обновлен соответствующим образом. Таким же образом можно создать целый сайт из файлов HTML. Например, если вы добавили страницу about.html, вы можете получить к ней доступ по адресу http://ваш_сервер_ip/about.html без необходимости взаимодействие с контейнером.

Шаг 5 — Использование собственного файла конфигурации Nginx (необязательно)

Если вы хотите лучше контролировать работу Nginx, вы можете использовать собственный файл конфигурации Nginx с контейнером Docker.

Во-первых, убедитесь, что вы вернулись в каталог проекта верхнего уровня:

  1. cd ~/docker-nginx

Скопируйте каталог конфигурации Nginx в папку вашего проекта с помощью команды копирования Docker:

  1. docker cp docker-nginx:/etc/nginx/conf.d/default.conf default.conf

Поскольку вы будете использовать собственный файл .conf для Nginx, вам потребуется пересобрать контейнер.

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

  1. docker stop docker-nginx

Затем удалите его:

  1. docker rm docker-nginx

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

После того, как вы сохранили файл конфигурации, пришло время создать контейнер Nginx. Добавьте флаг -v с соответствующими путями, чтобы дать новому контейнеру Nginx соответствующие ссылки для запуска из вашего собственного файла конфигурации. Например:

  1. docker run --name docker-nginx -p 80:80 -v ~/docker-nginx/html:/usr/share/nginx/html -v ~/docker-nginx/default.conf:/etc/nginx/conf.d/default.conf -d nginx

Эта команда связывает пользовательские страницы веб-сайта с контейнером.

Обратите внимание, что вам нужно будет перезапустить контейнер с помощью команды docker restart, когда вы будете вносить какие-либо изменения в файл конфигурации после запуска контейнера. Это связано с тем, что Nginx не выполняет горячую перезагрузку, если его файл конфигурации изменен:

  1. docker restart docker-nginx

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

Заключение

Теперь у вас есть работающий контейнер Nginx, обслуживающий пользовательскую веб-страницу, и вы научились настраивать Nginx из своего контейнера.

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

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