
ПКАПиИ_лабораторная_3
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
__________________________________________________________________
Кафедра «Сетевых информационных технологий и сервисов (СИТиС)»
Дисциплина «Программно-конфигурируемая архитектура приложений и инфраструктуры»
Отчёт по лабораторной работе №3 на тему:
«Контейнер Adminer»
Выполнили: студенты гр. БСТ2104
Проверили:
Москва, 2025 г.
Цель работы
Целью работы является освоение навыков по работе с контейнерами, взаимодействующими между собой, а также навыков по настройке сетей в Docker для организации взаимодействия между контейнерами.
Задание
Запустить контейнер с Adminer (веб-интерфейс для управления базами данных).
Настроить взаимодействие между контейнерами Adminer и PostgreSQL с использованием Docker-сетей.
Изучить и применить команды для создания и управления Docker-сетей.
Проверить работоспособность связки контейнеров, подключившись к базе данных через Adminer.
Оформить отчёт, приложить скриншоты выполнения и ответить на контрольные вопросы.
Содержание
Ход выполнения работы 5
Ответы на контрольные вопросы 15
Заключение 17
Ход выполнения работы
Запустим контейнер с Adminer с помощью команды docker run -d -p 8080:8080 --name adminer adminer (см. рис. 1-2):
docker run — запускает новый контейнер.
-d — флаг "detached", запускает контейнер в фоновом режиме.
-p 8080:8080 — пробрасывает порт 8080 контейнера на порт 8080 хоста.
--name adminer — задаёт имя контейнера adminer.
adminer — указывает использовать образ adminer из Docker Hub.
Рисунок 1 – Запуск контейнера с Adminer
После запуска образа Adminer Подключимся в браузере на хосте к http://127.0.0.1:8080/
Рисунок 2 – Веб-интерфейс для подключения к Adminer
Настроим взаимодействие между контейнерами Adminer и PostgreSQL с использованием Docker-сетей (см. рис. 3-5). Сначала завершим предыдущий контейнер Adminer и запустим новый, с параметром --link Container:AliasName.
docker run — создаёт и запускает контейнер.
-d — запускает в фоновом режиме.
-p 8080:8080 — пробрасывает порт 8080 хоста на порт 8080 контейнера.
--link db1:postgres — создаёт устаревшую (deprecated) связь контейнера с db1, давая ему alias postgres внутри сети.
--name adminer — задаёт имя adminer.
adminer — образ, который используется для запуска контейнера.
Рисунок 3 – Запуск нового контейнера Adminer с указанием связи
Рисунок 4 – Попытка входа в Adminer
Рисунок 5 – Успешный вход в Adminer
Изучим и применим команды для создания и управления Docker-сетей (см. рис. 6-10):
Рисунок 6 – Создание и просмотр информации Docker-сети
Рисунок 7 – Создание и просмотр информации Docker-сети
Выполним команду docker inspect db1
Рисунок 8 – просмотр информации о контейнере db1
Рисунок 9 – Сетевые настройки контейнера PostgreSQL
Посмотрим настройки adminer:
docker inspect adminer — выдаёт полную информацию о контейнере adminer.
| — передаёт вывод команды на следующую команду (egrep).
egrep "IPAddress|Gateway|IPPrefixLen" — фильтрует и показывает только строки, содержащие IPAddress, Gateway или IPPrefixLen, то есть IP-адрес, шлюз и длину префикса сети контейнера.
Рисунок 10 – Сетевые настройки контейнера Adminer
Выполним пересоздание docker rm -f db1
docker rm -f adminer
Рисунок 11 – Удаление контейнеров PostgreSQL и Adminer
Пересоздаем контейнеры СУБД и Adminer:
docker run — запускает контейнер.
--rm — автоматически удаляет контейнер после остановки.
-d — запускает контейнер в фоновом режиме.
--name db1 — имя контейнера db1.
-e POSTGRES_PASSWORD=1234 — устанавливает переменную окружения для PostgreSQL (POSTGRES_PASSWORD).
--net cluster — подключает контейнер к сети с именем cluster.
Рисунок 12 – Создание новых контейнеров PostgreSQL и Adminer с указанием сети и просмотр их сетевых настроек
Проверим работоспособность связки контейнеров, подключившись к базе данных через Adminer (см. рис. 12-15):
Рисунок 12 – Попытка входа в Adminer по IP-адресу
Рисунок 13 – Успешный вход в Adminer
Также возможно подключение по доменному имени.
Рисунок 14 – Попытка входа в Adminer по домену
Рисунок 15 – Успешный вход в Adminer
Выполним удаление:
docker ps -a — показывает все контейнеры (запущенные и остановленные).
-q — выводит только их ID, без дополнительной информации.
$(...) — заменяет команду на её результат (список ID контейнеров).
docker stop — останавливает контейнеры по их ID.
Рисунок 16 – Удаление контейнеров
Ответы на контрольные вопросы
Как запустить что-то внутри работающего контейнера?
Например, для запуска оболочки Bash внутри контейнера:
docker exec -it имя_контейнера /bin/bash
Как узнать, какие файлы изменяет программа внутри контейнера?
docker diff имя_контейнера
Команда покажет список файлов, которые были изменены, удалены или добавлены в контейнере после его запуска.
Когда происходит завершение контейнера? Как сделать?
Контейнер завершает свою работу:
После завершения основного процесса внутри контейнера.
Вручную с помощью команды docker stop имя_контейнера
Принудительно завершить контейнер можно командой docker kill имя_контейнера
Перезапустите сборку собранного образа, оцените время пересборки, объясните причины.
При повторной сборке образа Docker использует кэш для слоев, которые не изменились. Если слои кэшированы, повторная сборка будет быстрой. Изменение слоев в верхней части Dockerfile приведет к тому, что последующие команды будут пересобираться, что увеличит время сборки.
К какому числу слоев стремиться в образе, правила оптимизации?
Рекомендуется минимизировать количество слоев, чтобы ускорить сборку и уменьшить размер образа.
Правила оптимизации:
Объединяйте команды в Dockerfile.
Очищайте ненужные пакеты сразу после установки.
Используйте .dockerignore, чтобы исключить лишние файлы из контекста сборки.
Что такое Dockerfile?
Dockerfile — это текстовый файл, содержащий инструкции для создания Docker-образа. Каждая команда в Dockerfile создает новый слой образа.
Опишите базовые команды Dockerfile, что они делают, где смотреть документацию?
FROM: Базовый образ.
RUN: Выполняет команду в процессе сборки образа.
CMD: Задает команду по умолчанию для выполнения при запуске контейнера.
COPY: Копирует файлы из контекста сборки в контейнер.
EXPOSE: Открывает порты.
WORKDIR: Устанавливает рабочую директорию внутри контейнера.
Документация доступна на официальном сайте Docker.
Что такое контекст сборки, как его оптимизировать?
Контекст сборки — это набор файлов и директорий, доступных для копирования в образ во время сборки.
Оптимизация:
Используйте файл .dockerignore, чтобы исключить ненужные файлы.
Минимизируйте размер контекста, чтобы ускорить передачу файлов на Docker-демон.
Заключение
В результате выполнения лабораторной работы были освоены навыки по работе с контейнерами, взаимодействующими между собой, а также навыки по настройке сетей в Docker для организации взаимодействия между контейнерами.