Файл: Отчет по практической работе 9 Межконтейнерное взаимодействие dockerконтейнеров через localhost.docx
Добавлен: 07.11.2023
Просмотров: 29
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
| | |
МИНОБРНАУКИ РОССИИ | ||
Федеральное государственное бюджетное образовательное учреждение высшего образования «МИРЭА – Российский технологический университет» РТУ МИРЭА |
Институт Информационных технологий
Кафедра Инструментального и прикладного программного обеспечения (ИиППО)
ОТЧЕТ ПО ПРАКТИЧЕСКОЙ РАБОТЕ № 9 «Межконтейнерное взаимодействие docker-контейнеров через localhost» | |
по дисциплине | |
«Настройка и администрирование сервисного программного обеспечения» | |
| |
Выполнил студент группы ИКБО-30-21 | Смирнов А.Е. |
Принял преподаватель | Благирев М.М |
Практическая работа выполнена | «__»_______2023 г. | (подпись студента) |
| | |
«Зачтено» | «__»_______2023 г. | (подпись руководителя) |
Москва 2023
Цель работы: получить навыки создания сетевого соединения и передачи данных между docker-контейнерами посредством localhost.
Теоретическое введение.
Docker создает сеть по умолчанию, в которой запущены все контейнеры, и задает имя сети для каждого контейнера, используя имя контейнера.
Для межконтейнерного взаимодействия можно использовать брокер сообщений Apache ActiveMQ. Если есть mq для ActiveMQ, то можно использовать так: tcp://mq:61616 (или любой другой настроенный протокол/порт) из других контейнеров, чтобы подключиться к нему.
При этом не нужно устанавливать параметр --net если не нужно создавать определенную сеть для использования определенных контейнеров.
По умолчанию в Docker включено межконтейнерное взаимодействие, это означает, что все контейнеры могут взаимодействовать между собой (используя сеть docker0). Эта возможность может быть отключена путём запуска Docker сервиса с флагом --icc=false.
Для сетевого взаимодействия контейнеров можно сделать следующее:
1) создать новую сеть
$ docker network create
2) Подключить контейнеры к сети
$ docker run --net=
или
$ docker network connect
3) пинг контейнер по имени
docker exec -ti
Задание на практическую работу
Создать два докер-контейнера, которые будут одновременно "слушать" localhost на разных портах. Пользователь делает запрос к контейнеру №1. Далее контейнер №1 делает запрос к контейнеру №2. Контейнер №2 обработает запрос, передаст результат контейнеру №1. Контейнер №1 передаст результат пользователю. API может быть реализовано на любой технологии. В итоге необходимо настроить систему из нескольких контейнеров, связанных друг с другом.
Листинг 1 - Файл docker-compose.yml
version: '3' services: container1: build: ./container1 ports: - "8000:8000" container2: build: ./container2 ports: - "5000:5000" |
Листинг 2 - Файл app.py директории container1
from flask import Flask import requests app = Flask(__name__) @app.route('/') def index(): response = requests.get('http://container2:5000') return response.text if __name__ == '__main__': app.run(host='0.0.0.0', port=8000) |
Листинг 3 - Файл Dockerfile директории container1
FROM python:3.9 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["python", "app.py"] |
Листинг 4 - Файл requirements.txt директории container1
flask==2.0.1 requests==2.26.0 |
Листинг 5 - Файл app.js директории container2
const express = require('express'); const app = express(); app.get('/', (req,res) => { res.end('Hello from Container 2!') }); app.listen(5000, () => { console.log('Server running on port 5000'); }); |
Листинг 6- Файл Dockerfile директории container2
FROM node:14 WORKDIR /app RUN npm install COPY . . EXPOSE 5000 CMD ["node", "app.js"] |
Листинг 7- Файл package.json директории container2
{ "dependencies": { "express": "^4.17.1", "axios": "^0.21.1" } } |
Рисунок 1 – Результат выполнения команды docker-compose up
Рисунок 2 – Подтверждение выполненного GET-запроса
Вывод:
В ходе выполнения данной практической работы были получены навыки создания сетевого соединения и передачи данных между docker-контейнерами посредством locallhost.
Список литературы
1. Соединение контейнеров опцией --link. – URL: https://docs.docker.com/network/links/ (дата обращения: 03.05.2023).
2. Обзор сетевых возможностей Docker. – URL: https://docs.docker.com/network/ (дата обращения: 03.05.2023).
3. Сейерс, Э. Х. Docker на практике / Э. Х. Сейерс, А. Милл ; перевод с английского Д. А. Беликов. — Москва: ДМК Пресс, 2020. — 516 с. — ISBN 978-5-97060-772-5. — Текст : электронный // Лань : электроннобиблиотечная система. — URL: https://e.lanbook.com/book/131719 (дата обращения: 03.05.2023). — Режим доступа: для авториз. пользователей.