Найти в Дзене
Sovenok IT hard soft ware

Начало знакомства с Docker на примере работающего сайта (Часть 1)

Docker — это инструмент, который позволяет создавать, автоматизировать процесс развёртывания и управления контейнерами. Поскольку контейнеры изолированы от операционной системы, они могут быть запущены на любом устройстве, будь то Windows, Mac или Linux-подобная система. Контейнер представляет собой среду, в которой эмулируется операционная система с определёнными приложениями, необходимыми для выполнения конкретных задач. Мы будем изучать примеры Docker на новой операционной системе Ubuntu 24.10, известной под кодовым названием «Oracular Oriole». Вы можете скачать образ с официального сайта. После загрузки образа, установите утилиту Rufus, чтобы записать его на флешку. Затем установите операционную систему, и мы сможем приступить к работе. В качестве примера возьмём сайт, состоящий из двух страниц. После установки Ubuntu откройте терминал и выполните следующие команды: * sudo apt update * sudo apt upgrade После обновления необходимо внести некоторые изменения в систему. Поскольку в ве
Оглавление
Кит
Кит

Введение

Docker — это инструмент, который позволяет создавать, автоматизировать процесс развёртывания и управления контейнерами. Поскольку контейнеры изолированы от операционной системы, они могут быть запущены на любом устройстве, будь то Windows, Mac или Linux-подобная система.

Контейнер представляет собой среду, в которой эмулируется операционная система с определёнными приложениями, необходимыми для выполнения конкретных задач.

С чего начнем

Ubuntu 24.10 под кодовым названием «Oracular Oriole»
Ubuntu 24.10 под кодовым названием «Oracular Oriole»

Мы будем изучать примеры Docker на новой операционной системе Ubuntu 24.10, известной под кодовым названием «Oracular Oriole». Вы можете скачать образ с официального сайта. После загрузки образа, установите утилиту Rufus, чтобы записать его на флешку. Затем установите операционную систему, и мы сможем приступить к работе. В качестве примера возьмём сайт, состоящий из двух страниц.

Настройка Ubuntu

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

* sudo apt update

* sudo apt upgrade

После обновления необходимо внести некоторые изменения в систему.

Поскольку в версии Ubuntu 22 и более поздних версиях нельзя создавать файлы через меню, открывающееся правой кнопкой мыши, мы добавим эту возможность. Для этого создайте файл в папке "Шаблоны" с помощью команды touch ~/Templates/textDocument.txt (в русской версии Ubuntu просто "Шаблоны"). Теперь вы сможете создавать текстовые файлы через правую кнопку мыши. Если вам нужны и другие типы файлов, создайте их аналогичным образом.

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

* Откройте терминал и введите команду sudo nano /etc/polkit-1/rules.d/50-disable-shutdown-password.rules

* Внутри файла введите следующий код:

polkit.addRule(function(action, subject) {

if (action.id == "org.freedesktop.login1.power-off" ||

action.id == "org.freedesktop.login1.reboot") {

return polkit.Result.YES;

}

});

* Дайте права на доступ к файлу, если это необходимо: sudo chmod 644 /etc/polkit-1/rules.d/50-disable-shutdown-password.rules

Закройте файл с помощью сочетания клавиш ctrl+x и сохраните изменения. Затем перезагрузите систему.

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

gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift>Alt_L']"

gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Alt>Shift_L']"

Эти команды будут работать для окружения GNOME.

Установка docker

sudo apt update если что то найдется , то sudo apt upgrade

sudo apt install -y docker.io

sudo systemctl enable docker

sudo systemctl start docker

Добавим своего пользователя в группу , чтобы не использовать sudo

sudo usermod -aG docker $USER

newgrp docker

docker-compose устанавливается отдельно

curl -SL https://github.com/docker/compose/releases/download/v2.35.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

Начало знакомства

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

Например, иерархия может быть следующей.

/home/admin/dockersite/
├── dockersite1/ # Папка для первого сайта
│ ├── index.html # Главная страница сайта
│ ├── about.html # Дополнительная страница
│ ├── styles.css # Стили для сайта
│ └── ... # Другие файлы (изображения, скрипты и т.д.)
├── dockersite2/ # Папка для второго сайта
│ ├── index.html # Главная страница сайта
│ ├── about.html # Дополнительная страница
│ ├── styles.css # Стили для сайта
│ └── ... # Другие файлы
├── nginx/ # Конфигурация Nginx
│ ├── nginx.conf # Основной конфиг Nginx
│ └── sites-available/ # Конфигурации для сайтов (опционально)
│ └── default.conf # Конфиг для балансировки
├── Dockerfile # Dockerfile для сайтов
├── requirements.txt # Зависимости (если используются)
└── docker-compose.yml # Docker Compose файл

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

Dockerfile — это конфигурационный файл, в котором содержатся инструкции по сборке Docker-образа и запуску контейнера.

Docker-compose.yml — это ещё один важный файл, используемый Docker Compose для управления многоконтейнерными приложениями. Он описывает, какие контейнеры (сервисы) должны быть запущены и как они взаимодействуют друг с другом.

Чтобы всё это заработало, нам необходимо заполнить эти файлы необходимыми настройками.

Dockerfile

# Используем легковесный образ Nginx на основе Alpine

FROM nginx:alpine

# Открываем порт 80

EXPOSE 80

# Команда для запуска Nginx

CMD ["nginx", "-g", "daemon off;"]

Docker-compose.yml

version: '3.8'

services:
site1:
build:
context: .
dockerfile: Dockerfile
container_name: site1
restart: always
volumes:
- ./dockersite1:/usr/share/nginx/html # Монтируем файлы сайта
networks:
- mynetwork

site2:
build:
context: .
dockerfile: Dockerfile
container_name: site2
restart: always
volumes:
- ./dockersite2:/usr/share/nginx/html # Монтируем файлы сайта
networks:
- mynetwork

nginx:
image: nginx:alpine
container_name: nginx
restart: always
ports:
- "8080:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- site1
- site2
networks:
- mynetwork

networks:
mynetwork:
driver: bridge

Теперь наполним содержимое контейнеров

основа страницы
основа страницы

Файл nginx.conf

events {}

http {
upstream myapp {
server site1:80;
server site2:80;
}

server {
listen 80;

location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}

Файл about.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>About - Site 1</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>About Site 1</h1>
<p>This is the about page.</p>
<a href="index.html">Home</a>
</body>
</html>

Файл index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Site 1</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Welcome to Site 1!</h1>
<p>This is the home page.</p>
<a href="about.html">About</a>
</body>
</html>

Файл styles.css

body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
text-align: center;
padding: 50px;
}
h1 {
color: #333;
}

Эти файлы одинаковы в двух папках: dockersite1 и dockersite2. В следующей части мы объясним, зачем это нужно.

Запуск и заключение

Открываем терминал и переходим в директорию, где расположен наш проект:

cd /home/admin/dockersite

Далее запускаем процесс контейнеризации проекта:

docker-compose up --build

И проверяем, работает ли он:

http://127.0.0.1:8080/

Если всё сделано правильно, то должна открыться наша страница.

Полезные команды Docker

Запуск контейнеров:

docker-compose up -d флаг -d для запуска контейнеров в фоновом режиме

Остановка контейнеров:

docker-compose stop

Перезапуск контейнеров:

docker-compose restart

Удаление контейнеров:

docker-compose down

запускает контейнеры в фоновом режиме и пересобирает образы перед их запуском

docker-compose up --build -d

--build когда нужно запустить последнюю версию сервисов в фоновом режиме

Для просмотра запущенных контейнеров в Docker используется команда - docker ps.

Так как вставка кода не возможна , то используйте Web Formatter, или аналогичные форматоры кодов различных языков программирования , а затем вставляйте код в свой проект

Часть 2

Часть 3

Мой канал