Файл: Отчет по практической работе 3 по дисциплине Технологии разработки программных приложений.docx
Добавлен: 09.11.2023
Просмотров: 86
Скачиваний: 14
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
| | |
МИНОБРНАУКИ РОССИИ | ||
Федеральное государственное бюджетное образовательное учреждение высшего образования «МИРЭА – Российский технологический университет» РТУ МИРЭА |
Институт Информационных технологий
Кафедра Математического обеспечения и стандартизации информационных технологий
Отчет по практической работе №3
по дисциплине «Технологии разработки программных приложений»
Тема практической работы: «Системы контроля версий»
Выполнил: Студент группы ИНБО-10-21 | Дубровский В.Ф. |
Проверил: | кандидат технических наук, доцент Жматов Д.В. |
Москва 2023
Вариант 5
1 Образы
Посмотрите на имеющиеся образы: docker images.
Загрузите образ: docker pull ubuntu — будет загружен образ ubuntu:latest — последняя доступная
версия. Длязагрузкиконкретнойверсии,нужноуказатьтег,например,12.04:docker pull ubuntu:12.04. Посмотрите на имеющиеся образы ещё раз: docker images — должны появиться новые загруженные
образы. Посмотрите список контейнеров, выполнив команду: docker ps -a
2 Изоляция
Посмотрим информацию о хостовой системе, выполнив команду hostname. Выполните её ещё один раз. Вопрос: одинаковый ли результат получился при разных запусках?
Попробуемвыполнитьтожесамоевконтейнерах.Выполнитедваразакомандуdocker run ubuntu hostname. Вопрос: Одинаковый ли результат получился при разных запусках?
В случае запуска команды в контейнерах, ответ будет немного отличаться
, будет разный hostname. Так происходит, потому что из одного образа ubuntu были запущены два изолированных контейнера, поэтому у них и был разный hostname.
Заново выполните docker ps -a — там должны появиться запущенные ранее контейнеры.
Запуск контейнеров производится командой:
docker run --флаги --докера имя_контейнера команда для запуска -и --флаги --запуска --программы.
Запустите bash в контейнере: docker run ubuntu bash. Ничего не произошло. Это не баг. Интерак- тивные оболочки выйдут после выполнения любых скриптовых команд, если только они не будут
запущены в интерактивном терминале — поэтому для того, чтобы этот пример не завершился, вам нужно добавить флаги -i -t или сгруппированно -it: docker run -it ubuntu bash.
Выполняя запуск контейнера, указывая образ ubuntu, неявно указывался образ ubuntu:latest. Сле- довательно, следующие команды равнозначны:
• docker run ubuntu hostname
• docker run ubuntu:latest hostname
Если бы мы хотели запустить ubuntu:12.04, то нужно было бы выполнить команду docker run ubuntu:12.04 hostname
3 Работа с портами
Для начала, загрузите образ python командой docker pull python.
В качестве примера, запустите встроенный в Python модуль веб-сервера из корня контейнера, чтобы
отобразить содержание контейнера. docker run -it python python -m http.server
При запуске пишется, что сервер доступен по адресу http://0.0.0.0:8000/. Однако, если открыть этот адрес, то ничего не будет видно, потому что порты не проброшены. Завершите работу веб-сервера, нажав комбинацию клавиш Ctrl+C.
Для проброса портов используется флаг -p hostPort:containerPort
Добавьте его, чтобы пробросить порт 8000:
docker run -it -p8000:8000 python python -m http.server — теперь по адресу http://0.0.0.0: 8000/ (если не открывается на Windows, то вместо 0.0.0.0 нужно указать localhost) открывается содержимое корневой директории в контейнере.
Для того, чтобы доступный в контейнере на порту 8000 веб-сайт в хостовой системе открывался на порту 8888, необходимо указать флаг -p 8888:8000:
docker run -it -p8888:8000 python python -m http.server.
Завершите работу веб-сервера, нажав комбинацию клавиш Ctrl+C.
2
4 Именованные контейнеры, остановка и удаление
Запуститеконтейнер:docker run -it -p8000:8000 python python -m http.server.НажмитеCtrl+C
— выполнение завершится. Для того, чтобы запустить контейнер в фоне, нужно добавить флаг -d/--detach. Также определим имя контейнеру, добавив флаг --name.
docker run -p8000:8000 --name pyserver -d python python -m http.server
Убедитесь, что контейнер всё ещё запущен: docker ps | grep pyserver — вывод команды не должен
быть пустым. Для просмотра логов контейнера, воспользуйтесь командой docker logs pyserver.
Для того, чтобы остановить выполнение контейнера, существует команда docker stop pyserver. Од- нако, если снова попробовать запустить командой
docker run -it -p8000:8000 --name pyserver -d python python -m http.server,товозникнетошиб- ка: контейнер с таким именем существует. Его нужно удалить docker rm pyserver.
Для остановки и удаления контейнера можно воспользоваться командой docker rm -f pyserver вме- сто выполнения двух отдельных команд stop и rm. После удаления контейнер с таким именем можно будет создать заново.
Для того, чтобы контейнер удалялся после завершения работы, нужно указать флаг --rm при его запуске — далее в работе мы будем использовать данный флаг:
docker run --rm -p8000:8000 --name pyserver -d python python -m http.server
5 Постоянное хранение данных
Запустите контейнер, в котором веб-сервер будет отдавать содержимое директории /mnt:
docker run -p8000:8000 --name pyserver --rm -d python python -m http.server -d /mnt,
где -d /mnt указывает модулю http.server какая директория будет корневой для отображения. Вопрос: Что значат остальные флаги запуска? Где здесь команда, которая выполнится в контейне- ре?
Длятого,чтобыпопастьвужезапущенныйконтейнер,существуеткомандаdocker exec -it pyserver bash — вы попадёте в оболочку bash в контейнере. Попав в контейнер, выполните команду
cd mnt && echo "hello world" > hi.txt, а затем выйдите из контейнера, введя команду exit или нажав комбинацию клавиш Ctrl+D.
Если открыть http://0.0.0.0:8000/, там будет доступен файл hi.txt. Остановим контейнер: docker stop pyserver, а затем снова запустим:
docker run -p8000:8000 --name pyserver --rm -d python python -m http.server -d /mnt.
Как мы видим, файл hi.txt пропал — это неудивительно, ведь мы запустили другой контейнер, а ста-
рый был удалён после завершения работы (флаг --rm). Остановим контейнер: docker stop pyserver. Для того, чтобы не терялись какие-то данные (например, если запущен контейнер с СУБД, то чтобы
не терялись данные из неё) существует механизм монтирования.
3
5.1 Тома
Первый способ — это создать отдельный том с помощью ключа -v myvolume:/mnt, где myvolume — название тома, /mnt — директория в контейнере, где будут доступны данные.
Попробуйте снова создать контейнер, но уже с примонтированным томом:
docker run -p8000:8000 --rm --name pyserver -d \
-v $(pwd)/myfiles:/mnt python python -m http.server -d /mnt
Затем, если создать файл (выполнить docker exec -it pyserver bash и внутри контейнера выпол- нить cd mnt && echo "hello world" > hi.txt), то даже после удаления контейнера данные в этом томе будут сохранены.
Чтобы узнать где хранятся данные, выполните команду
docker inspect -f "{{json .Mounts }}" pyserver, в поле Source будет храниться путь до тома на хостовой машине.
Для управления томами существует команда docker volume, ознакомиться с которой предлагается самостоятельно.
5.2 Монтирование директорий и файлов
Сперва, остановите контейнер, созданный на предыдущем шаге: docker stop pyserver.
Иногда требуется пробросить в контейнер конфигурационный файл или отдельную директорию. Для
этого используется монтирование директорий и файлов.
Создадим директорию и файлы, которые будем монтировать. Часть из них нам понадобится дальше:
создайте директорию: mkdir myfiles, в ней создайте файл host.txt: touch myfiles/host.txt
Запустте контейнер:
docker run -p8000:8000 --rm --name pyserver -d -v $(pwd)/myfiles:/mnt python \
python -m http.server -d /mnt
Команда pwd — выведет текущую директорию, например: /home/user/dome-directory, в итоге полу- чился абсолютный путь до файла: /home/user/dome-directory/myfiles.
Обратный слеш (\) перед переводом строки экранирует символ перевода строки и позволяет написать одну команду в несколько строк.
Затем, зайдите в контейнер: docker exec -it pyserver bash, перейдите в директорию /mnt командой cd /mnt. Если вывести список файлов командой ls, то там будет файл host.txt, примонтированный вместе с директорией myfiles
Создайте файл echo "hello world" > hi.txt, а затем выйдите из контейнера: exit. Теперь на хосто- вой машине в директории myfiles/ появится файл hi.txt. Проверить можно командой ls myfiles.
Остановите контейнер: docker stop pyserver.
Для того, чтобы примонтировать один файл, нужно указать ключ -v, например:
4
-v $(pwd)/myfiles/host.txt:/mnt/new-name-of-host.txt – файлу в контейнере присвоится другое имя: new-name-of-host.txt.
Если на Windows возникают ошибки при монтировании, убедитесь, что вы используете bash , а не cmd.exe.
6 Переменные окружения
Для передачи переменных окружения внутрь контейнера используется ключ -e. Например, чтобы передать в контейнер переменную окружения MIREA во значением «ONE LOVE», нужно добавить ключ -e MIREA="ONE LOVE".
Проверьте, выведя все переменные окружения, определённые в контейнере с помощью утилиты env: docker run -it --rm -e MIREA="ONE LOVE" ubuntu env. Среди списка переменных будет и MIREA
7 Dockerfile
Соберите образ, в который будут установлены дополнительные пакеты, примонтируйте директорию и установите команду запуска. Для этого создаётся файл Dockerfile (без расширения).
-
1 FROM -
2 RUN
3 4
ubuntu :20.04
apt update \
&& apt install -y python3 fortune \
&& cd /usr/bin \
&& ln -s python3 python
/usr/games/fortune > /mnt/greeting-while-building.txt ./data /mnt/data
5
-
6 RUN -
7 ADD -
8 EXPOSE 80 -
9 CMD ["python", "-m", "http.server", "-d", "/mnt/", "80"]
Будьте внимательны при копировании, могут скопироваться неправильные минусы и лишние про- белы.
В строке (1) указывается базовый образ, на основе которого будет строиться новый образ.
В строках (2-5) указана команда, которая выполнится в процессе сборки. На самом деле, там выпол- няются несколько команд, соединённых && для того, чтобы создавать меньше слоёв в образе.
В строках (6) тоже указана команда, которая сгенерирует случайную цитату и перенаправит вывод в файл /mnt/greeting-while-building.txt. Файл будет сгенерирован во время сборки образа.
В строке (7) копируется всё содержимое директории ./data хостовой машины в директорию /mnt, которая будет доступна в контейнере.
В строке (8) указывается, какой порт у контейнера будет открыт.
В строке (9) указывается команда, которая будет выполнена при запуске, где 80 — порт, который будет слушать веб-сервер.
Соберите образ с тегом mycoolimage с помощью команды docker build -t mycoolimage . Точка в конце указывает на текущую директорию, где лежит Dockerfile.
Запуск производится командой docker run --rm -it -p8099:80 mycoolimage, где порт 8099 — порт на хостовой машине.
Рисунок 1 – задание 1
Рисунок 2 – задание 2
Рисунок 3 – задание 3
Рисунок 4 – задание 4