Решение задания 1: nginx с кастомной страницей
Файлы проекта
<!-- my-nginx/index.html -->
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Hello ICH!</title>
</head>
<body>
<h1>Success! The NGINX server is working!</h1>
<p>Страница обслуживается из Docker-контейнера.</p>
</body>
</html>
# my-nginx/Dockerfile
# Официальный образ NGINX на alpine — минимальный размер
FROM nginx:1.27-alpine
# Копируем нашу страницу в директорию статики nginx
COPY index.html /usr/share/nginx/html/
# Документируем порт
EXPOSE 80
# CMD уже определён в базовом образе: nginx -g "daemon off;"
Команды
# Терминал (PowerShell) — из папки my-nginx
docker build -t my-nginx:1.0 .
docker run -d -p 8080:80 --name my-running-nginx my-nginx:1.0
# Проверка
docker ps
# Открыть http://localhost:8080 — должна появиться ваша страница
Объяснение
nginx:1.27-alpine— конкретная версия вместоlatestделает сборку воспроизводимойCOPY index.html /usr/share/nginx/html/— nginx по умолчанию ищет файлы в этой директории-p 8080:80— проброс порта: 8080 на хосте → 80 в контейнере
Решение задания 2: Bash-скрипт с volume
# fetch-data-app/fetch_data.sh
#!/bin/bash
URL="https://api.coindesk.com/v1/bpi/currentprice.json"
OUTPUT_FILE="/data/price.json"
curl -o "$OUTPUT_FILE" "$URL"
echo "Data saved to $OUTPUT_FILE"
# fetch-data-app/Dockerfile
FROM debian:stable-slim
# Один RUN: обновление + установка + очистка кеша
RUN apt-get update && apt-get install -y curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY fetch_data.sh /usr/local/bin/fetch_data.sh
RUN chmod +x /usr/local/bin/fetch_data.sh
WORKDIR /usr/src/app
ENV URL=https://api.coindesk.com/v1/bpi/currentprice.json
ENV OUTPUT_FILE=/data/price.json
VOLUME ["/data"]
CMD ["/usr/local/bin/fetch_data.sh"]
# Терминал (PowerShell)
docker build -t fetch-data-image .
mkdir data
docker run --rm -v "${PWD}/data:/data" fetch-data-image
# Проверка результата
type data\price.json
Объяснение
VOLUME ["/data"]— объявляет точку монтирования; при-vданные пишутся в папку хоста--rm— контейнер удаляется после выполнения, данные сохраняются через volume${PWD}в PowerShell — текущая директория (аналог$(pwd)в bash)
Решение задания 3: Python + psutil
Это задание совпадает с ДЗ из LMS. Подробное пошаговое решение — в homework.html.
# memory-info-app/memory_info.py
import psutil
import platform
def get_cpu_usage():
return psutil.cpu_percent(interval=1)
def get_memory_usage():
memory = psutil.virtual_memory()
return {
'Всего': f'{memory.total / (1024**3):.2f} ГБ',
'Используется': f'{memory.used / (1024**3):.2f} ГБ',
'Свободно': f'{memory.available / (1024**3):.2f} ГБ',
'Процент использования': f'{memory.percent}%'
}
def main():
import os
os.makedirs('data', exist_ok=True)
with open('data/output.txt', 'a') as f:
print("OS: ", platform.platform(), file=f)
print("=== Мониторинг системы ===", file=f)
print(f"\nЗагрузка CPU: {get_cpu_usage()}%", file=f)
print("\nИспользование памяти:", file=f)
for key, value in get_memory_usage().items():
print(f"{key}: {value}", file=f)
if __name__ == '__main__':
main()
# memory-info-app/requirements.txt
psutil
# memory-info-app/Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY memory_info.py .
ENTRYPOINT ["python3", "memory_info.py"]
# Терминал (PowerShell)
docker build -t memory-info-image .
mkdir data
docker run --rm -v "${PWD}/data:/app/data" memory-info-image
type data\output.txt