В нашем справочнике есть статья, с помощью которой можно установить веб-сервер Nginx на Ubuntu. Здесь же рассмотрим процесс установки Nginx на Ubuntu при помощи Docker.
Docker представляет собой открытую платформу для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение и все его зависимости в единую исполняемую среду, обеспечивая изолированное и повторяемое окружение для запуска приложений на различных системах.
Для установки веб-сервера и запуска сайта мы будем использовать виртуальный выделенный сервер, на которым проведена предварительная настройка системы. В частности, все действия мы будем совершать с использованием административного пользователя, который не является учётной записью root.
Установка Docker
Перед установкой требуемого программного обеспечения необходимо обновить списки пакетов в системе. Делается это при помощи команды apt:
sudo apt updateДалее, поскольку Docker доступен для установки в том числе и из стандартного репозитория Ubuntu, запустите его инсталляцию с использованием той же утилиты apt:
sudo apt install docker.ioКорректность установки можно подтвердить при помощи вывода версии Docker:
docker --versionВ нашем случае мы имеем дело с версией 24.0.5:

Также можно проверить текущее состояние службы docker:
sudo systemctl status dockerВывод команды должен выглядеть примерно следующим образом:

Пока ещё наш экземпляр Docker не содержит ни одного образа. Это можно увидеть выведя список установленных образов:
sudo docker imagesВывод данной команды в настоящее время пуст:

Запуск контейнера Nginx
На сайте Docker Hub размещено огромное количество образов самых разнообразных приложений. В том числе есть и раздел, посвящённый Nginx. Данный раздел содержит достаточное количество различных образов Nginx, и в нашем примере мы рассмотрим работу с актуальной на момент написания статьи стабильной версией образа веб-сервера. На Docker Hub такая версия называется stable. Данная версия образа является выбором именно для нашего конкретного примера. Вы же можете использовать любой из представленных в списке образов. Например, latest – образ последней актуальной на текущий момент версии образа Nginx. В данном случае это – 1.25.4.

Таким образом, команда для загрузки образа и запуска контейнера из него в нашем примере будет выглядеть следующим образом:
sudo docker run -d --restart always --name your-nginx-container -p 80:80 -v /var/www/html:/usr/share/nginx/html nginx:stableВ данном случае:
- команда runзапускает контейнер из образа, при этом, если образ отсутствует в системе, будет произведена его загрузка;
- ключ -dозначает, что контейнер будет запущен в фоновом режиме;
- опция --restart alwaysуказывает на то, что контейнер должен автоматически перезапускаться в случае его остановки, если только он не был остановлен пользователем;
- --name your-nginx-containerозначает, что создаваемый контейнер будет называться- your-nginx-container;
- опция -p 80:80используется для проброса портов между контейнером и хост-системой, то есть порт 80 внутри контейнера будет привязан к порту 80 на хостовой системе;
- -v /var/www/html:/usr/share/nginx/htmlозначает, что каталог- /var/www/htmlна хост-системе будет смонтирован к каталогу внутри контейнера- /usr/share/nginx/html;
- nginx:stable– название образа актуальной стабильной версии Nginx.
Резюмируя, мы загрузили образ nginx:stable, создали из него контейнер your-nginx-container и запустили его. При этом запросы, поступающие на порт 80 хостовой системы, будут направляться на порт 80 внутри контейнера для обработки веб-сервером. Файлы сайта будут располагаться в директории /var/www/html/ хост-системы, а веб-сервер будет обслуживать их обращаясь к каталогу /usr/share/nginx/html/ внутри контейнера.
Для отображения списка запущенных контейнеров Docker на текущем хосте можно использовать команду:
sudo docker psПоскольку в нашей системе запущен всего один контейнер, её вывод у нас выглядит так:

Чтобы подключиться к системе контейнера, используйте команду:
sudo docker exec -it your-nginx-container bashЗдесь,
- your-nginx-container– название контейнера;
- ключ -iпозволяет вводить данные в стандартный STDIN-ввод для взаимодействия пользователя с контейнером;
- -tвыделяет псевдотерминал (TTY), который обычно используется для взаимодействия с командной оболочкой контейнера;
- bashозначает, что мы запускаем оболочку командной строки Bash внутри контейнера.
Для отключения от контейнера используйте команду exit или комбинацию клавиш Ctrl D.
Создание тестовой страницы сайта на Nginx
Теперь создадим тестовую страничку сайта, которая будет работать на веб-сервере Nginx. Для этого перейдите в каталог хостовой системы /var/www/html/ и создайте там файл index.html:
cd /var/www/html/
sudo nano index.htmlв нашем примере мы наполним данный файл следующим содержимым:
<html>
   <head>
      <title>
         Domain on Nginx
      </title>
   </head>
   <body>
      <h1>
         Connection to your domain is created successfully!!!
      </h1>
   </body>
</html>Далее, закройте файл index.html с сохранением внесённых изменений, после чего проверьте доступность созданной страницы. Не покидая командную строку это можно сделать при помощи команды curl:
curl localhostЕсли наша тестовая страница доступна, то вывод команды должен отобразить содержимое файла index.html:

Также увидеть нашу тестовую страницу можно набрав в браузере IP-адрес виртуального сервера, либо доменное имя сайта, привязанное к VPS при помощи A-записи:

