
ПКАПиИ_лабораторная_2
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
__________________________________________________________________
Кафедра «Сетевых информационных технологий и сервисов (СИТиС)»
Дисциплина «Программно-конфигурируемая архитектура приложений и инфраструктуры»
Отчёт по лабораторной работе №2 на тему:
«Базовые команды Docker»
Выполнили: студенты гр. БСТ2104
Проверили:
Москва, 2025 г.
Задание
Установить Docker на виртуальную машину с Ubuntu Server 22.04.
Изучить и выполнить базовые команды Docker:
Запуск контейнера с образом "hello-world".
Загрузка и управление образами (docker pull, docker images).
Запуск контейнера с PostgreSQL и настройка переменных окружения.
Просмотр логов контейнера и подключение к работающему контейнеру.
Управление томами для сохранения данных.
Отработать команды для остановки, удаления контейнеров и очистки неиспользуемых ресурсов.
После установки оформить отчет, приложить скриншоты выполнения и ответить на контрольные вопросы.
Содержание
Цель работы 4
Ход выполнения работы 5
Заключение 17
Ответы на вопросы 18
Цель работы
Освоить базовые команды Docker, научиться устанавливать Docker, работать с образами и контейнерами, а также управлять их жизненным циклом.
Ход выполнения работы
Устанавливаем Docker в Ubuntu 22.04:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
(Устанавливает нужные пакеты для работы с репозиториями)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
(Загружает и добавляет ключ подписи Docker)
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
(Добавляет репозиторий Docker)
sudo apt update
(Обновляет список пакетов)
sudo apt install docker-ce
(Устанавливает Docker)
sudo systemctl status docker
(Проверяет статус службы Docker)
Рисунок 1 – Установка нужных пакетов для работы с репозиториями
Рисунок 2 – Загрузка и добавление ключа подписи Docker и Добавление репозитория Docker
Рисунок 3 – Установка Docker
Рисунок 4 – Проверка статуса службы Docker
Далее выполняем запуск команды hello-world.
Рисунок 5 – Запуск команды Hellow World
Чтобы пользователь мог пользоваться docker без ограничений и необходимости прав суперпользователя - вы можете добавить его в группу docker: sudo usermod -aG docker имя_пользователя
Рисунок 6 – Настройка виртуальной машины
Загрузка образа PostgreSQL (последней версии): docker pull postgres
docker pull – загружает образ из Docker Hub.
postgres – имя образа, последняя доступная версия (latest).
Рисунок 7 – Настройка виртуальной машины
Проверка скачанных образов: docker images (docker image ls) – показывает все загруженные образы на машине.
Загрузка определённой версии PostgreSQL (например, 15.10): docker pull postgres:15.10
Рисунок 8 – Установка постргреса конкретной версии и вывод списка скаченных образов
Проверяем, какие образы уже загружены: docker images (Покажет список всех загруженных образов.)
Добавляем метку (тэг) к образу PostgreSQL: docker tag postgres postgres:15.0-aboba (Теперь у образа появится дополнительный тэг 15.0-aboba, но его IMAGE ID останется тем же.). И выполняем проверку
Рисунок 9 – Проверка образов и создание метки
Удаляем конкретные образы (по тегу): docker rmi postgres:15.0-aboba (Удаляет только этот тег, сам образ останется, если есть другие ссылки.)
docker image rm postgres:15.10 (Удаляет образ postgres:15.10, если он не используется.)
Рисунок 10 – Удаление меток и образов
Очищаем неиспользуемые образы: docker image prune (Удаляет висячие образы, которые больше не используются.) Очищаем вообще все образы, на которых нет запущенных контейнеров: docker image prune –a (Удаляет все неиспользуемые образы, не только висячие.)
Рисунок 11 – Очистка образов
Запуск контейнера с именем, паролем и в фоновом режиме: docker run --name db1 -e POSTGRES_PASSWORD=1234 -d postgres
--name db1 – задаёт имя контейнера (db1).
-e POSTGRES_PASSWORD=1234 – передаёт переменную окружения (POSTGRES_PASSWORD=1234).
-d – запускает контейнер в фоновом режиме.
postgres – используемый образ (берётся из загруженных образов).
Проверяем, запустился ли контейнер: docker ps (Выведет список запущенных контейнеров, должен быть db1.)
Рисунок 12 – Запуск контейнера в фоновом режиме
Если контейнер не запустился, смотрим причину: docker logs db1 (Покажет логи контейнера db1.)
Рисунок 13 – Просмотр логов контейнеров
Если контейнер запустился, можно подключиться к PostgreSQL внутри него: docker exec -it db1 и потом psql -U postgres
docker exec -it db1 – выполнить команду внутри контейнера db1.
psql -U postgres – запустить PostgreSQL от имени пользователя postgres.
Рисунок 13 – Просмотр логов контейнеров
Просмотрим список изменений в слое на ФС с помощью команды docker diff: docker diff db1
Рисунок 14 – Просмотр списка изменений
Завершим контейнер нежно с помощью stop, сразу завершим с помощью kill и удалим остатки (из спика завершенных, включая логи контейнера) c помощью rm:
docker stop db1
docker kill db1
docker rm db1
Рисунок 15 – Завершение работы с контейнером
Просмотреть список томов: docker volume ls
Создать новый: docker volume create test
Посмотреть информацию о томе: docker volume inspect test
Удалить том: docker volume rm test
Очистить лишние тома: docker volume prune
Рисунок 16 – Жизненный цикл томов
Дополнительное задание
Создали новый образ и на нем создали том в котором будет сохраняться информация.
Рисунок 17 – Сохранение при перезапуске
Заключение
Освоили базовые команды Docker, научились устанавливать Docker, работать с образами и контейнерами, а также управлять их жизненным циклом.
Ответы на вопросы
Что такое и зачем нужен Docker? Альтернативные системы?
Docker — это платформа для разработки, доставки и запуска приложений в изолированных средах, называемых контейнерами. Контейнеры позволяют упаковать приложение со всеми его зависимостями (библиотеками, настройками и т.д.) в единый образ, который можно запускать на любой системе с Docker.
Зачем нужен Docker:
Упрощение разработки и тестирования.
Обеспечение одинаковой среды на всех этапах (разработка, тестирование, продакшн).
Изоляция приложений и их зависимостей.
Эффективное использование ресурсов (в отличие от виртуальных машин).
Как получить Docker-образ, что это такое?
Docker-образ — это шаблон, содержащий файловую систему, зависимости и настройки, необходимые для запуска контейнера. Образы можно получить несколькими способами:
Скачать из Docker Hub (публичный реестр): docker pull image_name:tag
Создать собственный образ с помощью Dockerfile: docker build -t my_image:tag .
Как запустить контейнер? Как получить доступ к его портам?
Для запуска контейнера используйте команду: docker run image_name
Чтобы получить доступ к портам контейнера, используйте флаг -p: docker run -p 8080:80 nginx
Здесь 8080 — порт на хосте, 80 — порт контейнера.
Как просмотреть логи контейнера?
Для просмотра логов контейнера используйте команду: docker logs container_id_or_name
Для просмотра логов в реальном времени добавьте флаг -f: docker logs -f my_container
Как сохранить данные внутри контейнера между его перезапусками?
Для сохранения данных между перезапусками контейнера используйте тома (volumes) или bind mounts: docker run -v my_volume:/path/in/container image_name
Bind mounts: docker run -v /host/path:/path/in/container image_name
Тома управляются Docker, а bind mounts привязывают директорию на хосте к контейнеру.
Почему контейнеры могут обращаться между собой по имени (хэшу, если его нет)?
Контейнеры могут обращаться друг к другу по имени, если они находятся в одной пользовательской сети Docker. Docker автоматически создает DNS-записи для контейнеров в одной сети, что позволяет использовать имена вместо IP-адресов.
Пример создания сети и запуска контейнеров:
docker network create my_network
docker run --name container1 --network my_network image1
docker run --name container2 --network my_network image2
Теперь container2 может обращаться к container1 по имени.
Что такое метки (docker tag)?
Метки (tags) в Docker используются для идентификации версий образов. Например, nginx:latest или my_image:v1.0. Метки позволяют управлять разными версиями одного и того же образа.
Чтобы добавить метку к образу: docker tag source_image:tag target_image:new_tag
Как удалить ненужные образы и контейнеры?
Удалить остановленные контейнеры: docker container prune
Удалить конкретный контейнер: docker rm container_id_or_name
Удаление образов:
Удалить все неиспользуемые образы: docker image prune -a
Удалить конкретный образ: docker rmi image_id_or_name
Удаление томов:
Удалить неиспользуемые тома: docker volume prune
Удаление сетей:
Удалить неиспользуемые сети: docker network prune