Введение
Docker — это инструмент, который позволяет создавать, автоматизировать процесс развёртывания и управления контейнерами. Поскольку контейнеры изолированы от операционной системы, они могут быть запущены на любом устройстве, будь то Windows, Mac или Linux-подобная система.
Контейнер представляет собой среду, в которой эмулируется операционная система с определёнными приложениями, необходимыми для выполнения конкретных задач.
С чего начнем
Мы будем изучать примеры 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, или аналогичные форматоры кодов различных языков программирования , а затем вставляйте код в свой проект