Диаграмма компонентов QuickDelivery
app.py — основной файл приложения.PYTHON
# файл app.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Welcome to the Order Service"} requirements.txt — файл с зависимостями.fastapi
uvicorn BASH
mkdir order_service
cd order_service
nano Dockerfile FROM всегда идёт первой в файле. Она говорит, какой образ мы берём за основу.DOCKER
FROM python:3.8-slim DOCKER
WORKDIR /app DOCKER
COPY . /app requirements.txt:DOCKER
RUN pip install --no-cache-dir -r requirements.txt DOCKER
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] DOCKER
# Используем базовый образ Python
FROM python:3.8-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем файлы приложения в контейнер
COPY . /app
# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt
# Определяем команду для запуска приложения
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] BASH
docker --version docker buildBASH
docker build -t quickdelivery/order-service . quickdelivery/order-service, используя Dockerfile в текущей директории. На текущую директорию указывает точка (.).docker imagesBASH
docker images docker runBASH
docker run -d --name order-service -p 8000:8000 quickdelivery/order-service d — запускает контейнер в фоновом режиме.p 8000:8000 — перенаправляет порт 8000 на хосте на порт 8000 в контейнере.-name order-service — задаёт имя контейнеру.quickdelivery/order-service — указывает образ, который нужно использовать для создания контейнера.http://localhost:8000.docker psBASH
docker ps BASH
docker ps -a docker stopBASH
docker stop order-service docker rmBASH
docker rm order-service docker rmiBASH
docker rmi quickdelivery/order-service docker logsBASH
docker logs order-service docker execbash внутри контейнера для микросервиса обработки заказов:BASH
docker exec -it order-service /bin/bash bash внутри контейнера с именем order-service.alpine.DOCKER
FROM python:3.8-alpine DOCKER
RUN pip install --no-cache-dir -r requirements.txt && \
apk del gcc musl-dev linux-headers RUN в один слой, чтобы уменьшить количество слоёв в итоговом образе.DOCKER
# Устанавливаем зависимости и очищаем кэш в одном слое
RUN pip install -r requirements.txt && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* DOCKER
FROM python:3.8-alpine as builder
WORKDIR /app
COPY . /app
RUN apk add --no-cache gcc musl-dev linux-headers && \
pip install --no-cache-dir -r requirements.txt
___________________________________________________________
FROM python:3.8-alpine
WORKDIR /app
COPY --from=builder /app /app
CMD ["python", "app.py"] DOCKER
# Используем базовый образ Python на базе Alpine
FROM python:3.8-alpine
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем файлы приложения в контейнер
COPY . /app
# Устанавливаем зависимости и очищаем кэши
RUN apk add --no-cache gcc musl-dev linux-headers && \
pip install --no-cache-dir -r requirements.txt && \
apk del gcc musl-dev linux-headers
# Определяем команду для запуска приложения
CMD ["python", "app.py"]