
- •Лабораторная работа №1 Создание и настройка виртуальной машины
- •Дополнительное задание
- •Контрольные вопросы
- •Лабораторная работа №2 Базовые команды Docker
- •Установка Docker в Ubuntu 22.04:
- •Запустим hello-world:
- •Метки и удаление образа - docker tag
- •Дополнительное задание
- •Контроольные вопросы
- •Лабораторная работа №3 Контейнер Adminer
- •Подключимся в браузере на хосте к http://127.0.0.1:8080/:
- •Сети - docker network
- •Теперь создадим новую сеть:
- •Теперь пересоздадим контейнеры субд и Adminer в этой сети:
- •Теперь грохнем все контейнеры:
- •Контрольные вопросы
- •Лабораторная работа №4 Знакомство с Kubernetes
- •Создание кластера Kubernetes с PostgreSql и Adminer
- •Контрольные вопросы
- •Лабораторная работа №5 Создание и настройка кластера Kubernetes с распределенной системой из трех взаимосвязанных компонентов
Дополнительное задание
Сделать так чтобы данные не удалялись при завершении контейнера.
Контроольные вопросы
Что такое и зачем нужен Docker? Альтернативные системы?
Как получить Docker-образ, что это такое?
Как запустить контейнер? Как получить доступ к его портам?
Как просмотреть логи контейнера?
Как сохранить данные внутри контейнера между его перезапусками?
Почему контейнеры могут обращаться между собой по имени (хэшу, если его нет)?
Что такое метки (docker tag)?
Как удалить ненужные образа и контейнеры?
Лабораторная работа №3 Контейнер Adminer
Цель работы:
Научиться работать с контейнерами, взаимодействующими между собой, а также освоить настройку сетей в Docker для организации взаимодействия между контейнерами.
Задание:
Запустить контейнер с Adminer (веб-интерфейс для управления базами данных).
Настроить взаимодействие между контейнерами Adminer и PostgreSQL с использованием Docker-сетей.
Изучить и применить команды для создания и управления Docker-сетями.
Проверить работоспособность связки контейнеров, подключившись к базе данных через Adminer.
После установки оформить отчет, приложить скриншоты выполнения и ответить на контрольные вопросы.
Настроим дополнительный проброс портов (если кто-то настрил bridge - то просто идем на IP виртуальной машины):
Запустим образ Adminer (скачается автоматически). Для того, чтобы попасть из виртуальки внутрь контейнера на порт 8080 укажем ключик -p HostPort:ContainerPort:
docker run -d -p 8080:8080 --name adminer adminer
Подключимся в браузере на хосте к http://127.0.0.1:8080/:
Adminer (бывший phpMinAdmin) — это легковесный инструмент администрирования MySQL, PostgreSQL, SQLite, MS SQL и Oracle. Проект родился как «облегчённый» вариант phpMyAdmin. Распространяется в форме одиночного PHP-файла размером около 380 KB, который является результатом компиляции исходных php- и js-файлов с помощью специального PHP-скрипта. Т.о. контейнер с ним содержит php-сервер и один php-скрипт.
Однако как бы мы не пытались подключиться к базе - ничего не выйдет. Контейнеры не связаны по сети.
Сети - docker network
Для начала попробуем связать контейнеры простым способом, завершим предыдущий контейнер Adminer и запустим новый, с параметром --link Container:AliasName.
docker rm -f adminer
docker run -d -p 8080:8080 --link db1:postgres --name adminer adminer
Теперь подключимся к базе по ее Alias из контейнера adminer
Неплохо, но такой способ считается устаревшим. К тому же, это может быть не всегда удобно.
Теперь создадим новую сеть:
docker network create cluster
Кстати, в man-странице по этой команде есть много интересного про параметры:
man docker-network-create
Проверим как создалась сеть с параметрами по умолчанию:
Проверим в какой сети работают сейчас Adminer и Postgres:
docker inspect db1
docker inspect adminer | egrep "IPAddress|Gateway|IPPrefixLen"
Теперь пересоздадим контейнеры субд и Adminer в этой сети:
docker rm -f db1
docker rm -f adminer
# Добавим к предыдущей команде запуска: --net NetName
docker run --rm -d \
--name db1 \
-e POSTGRES_PASSWORD=1234 \
--net cluster \
postgres
# А теперь аналогично для Adminer
docker run -d -p 8080:8080 --net cluster --name adminer adminer
Проверим их IP-адреса:
docker inspect db1 | egrep "IPAddress|Gateway|IPPrefixLen"
docker inspect adminer | egrep "IPAddress|Gateway|IPPrefixLen"
Пробуем подключиться к базе по IP-адресу.
Кроме того, docker предоставляет dns-записи внутри своих сетей, поэтому мы можем обратиться по имени.