Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПКАПиИ_лабораторная_2

.docx
Скачиваний:
0
Добавлен:
25.04.2025
Размер:
5.5 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

__________________________________________________________________

Кафедра «Сетевых информационных технологий и сервисов (СИТиС)»

Дисциплина «Программно-конфигурируемая архитектура приложений и инфраструктуры»

Отчёт по лабораторной работе №2 на тему:

«Базовые команды Docker»

Выполнили: студенты гр. БСТ2104

Проверили:

Москва, 2025 г.

Задание

  1. Установить Docker на виртуальную машину с Ubuntu Server 22.04.

  2. Изучить и выполнить базовые команды Docker:

  • Запуск контейнера с образом "hello-world".

  • Загрузка и управление образами (docker pull, docker images).

  • Запуск контейнера с PostgreSQL и настройка переменных окружения.

  • Просмотр логов контейнера и подключение к работающему контейнеру.

  • Управление томами для сохранения данных.

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

После установки оформить отчет, приложить скриншоты выполнения и ответить на контрольные вопросы.

Содержание

Цель работы 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, работать с образами и контейнерами, а также управлять их жизненным циклом.

Ответы на вопросы

  1. Что такое и зачем нужен Docker? Альтернативные системы?

Docker — это платформа для разработки, доставки и запуска приложений в изолированных средах, называемых контейнерами. Контейнеры позволяют упаковать приложение со всеми его зависимостями (библиотеками, настройками и т.д.) в единый образ, который можно запускать на любой системе с Docker.

Зачем нужен Docker:

  • Упрощение разработки и тестирования.

  • Обеспечение одинаковой среды на всех этапах (разработка, тестирование, продакшн).

  • Изоляция приложений и их зависимостей.

  • Эффективное использование ресурсов (в отличие от виртуальных машин).

  1. Как получить Docker-образ, что это такое?

Docker-образ — это шаблон, содержащий файловую систему, зависимости и настройки, необходимые для запуска контейнера. Образы можно получить несколькими способами:

Скачать из Docker Hub (публичный реестр): docker pull image_name:tag

Создать собственный образ с помощью Dockerfile: docker build -t my_image:tag .

  1. Как запустить контейнер? Как получить доступ к его портам?

Для запуска контейнера используйте команду: docker run image_name

Чтобы получить доступ к портам контейнера, используйте флаг -p: docker run -p 8080:80 nginx

Здесь 8080 — порт на хосте, 80 — порт контейнера.

  1. Как просмотреть логи контейнера?

Для просмотра логов контейнера используйте команду: docker logs container_id_or_name

Для просмотра логов в реальном времени добавьте флаг -f: docker logs -f my_container

  1. Как сохранить данные внутри контейнера между его перезапусками?

Для сохранения данных между перезапусками контейнера используйте тома (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 привязывают директорию на хосте к контейнеру.

  1. Почему контейнеры могут обращаться между собой по имени (хэшу, если его нет)?

Контейнеры могут обращаться друг к другу по имени, если они находятся в одной пользовательской сети 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 по имени.

  1. Что такое метки (docker tag)?

Метки (tags) в Docker используются для идентификации версий образов. Например, nginx:latest или my_image:v1.0. Метки позволяют управлять разными версиями одного и того же образа.

Чтобы добавить метку к образу: docker tag source_image:tag target_image:new_tag

  1. Как удалить ненужные образы и контейнеры?

Удалить остановленные контейнеры: 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