Команда запуска в Docker
Команда запуска в образе вызывает интерпретатор и скрипт, её меняют отдельно от текста программы.
Строка CMD в Dockerfile
задаёт процесс по умолчанию
после создания контейнера.
Текст app.py при этом
остаётся прежним.
Скрипт слушает 0.0.0.0
на порту 8000 и отдаёт
hello:
from http.server import BaseHTTPRequestHandler, HTTPServer
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(b'hello')
if __name__ == '__main__':
HTTPServer(('0.0.0.0', 8000), Handler).serve_forever()
Файл зависимостей по-прежнему пустой:
Dockerfile ставит
пакеты при сборке и задаёт
новую команду старта
в exec-форме:
FROM python:3.14
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY app.py .
CMD ["python", "-u", "app.py"]
Флаг -u включает
небуферизованный вывод
интерпретатора в журнал
контейнера.
Сервис app собирается
из папки и публикует порты
8080 и 8000.
Файл compose.yaml:
services:
app:
build: .
ports:
- "8080:8000"
Подъём в фоне поднимет
процесс Python с обновлённой
командой из образа.
В браузере на localhost:8080
видно слово hello.
Выполним запуск проекта:
docker compose up -d --build
Опишите сервис note так, чтобы интерпретатор не буферизовал вывод, и отдайте слово note на порту 8000 внутри копии.
Откройте localhost:8080 и сверьте текст страницы с заданным словом.