我正在使用 Docker 开发微服务,但遇到了构建时间和大图像大小的问题。目前,我的 Dockerfile 看起来像这样:
FROM python:3.9
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
虽然这有效,但图像相当大,并且构建过程花费的时间比我想要的要长,尤其是当我对代码进行小更改时。我可以使用哪些最佳实践或策略来优化 Docker 映像构建过程并减小最终映像大小?
据我所知,我认为 docker compose 应该提高性能,而不是降低性能。我总是等待 10-15 秒来运行我的应用程序。
我有几个解决方案给你:
类似这样的:
# Stage 1: Build stage
FROM python:3.9 AS builder
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt --target ./dependencies
# Stage 2: Final stage
FROM python:3.9-slim
WORKDIR /app
# Copy only the necessary files
COPY --from=builder /app/dependencies /usr/local/lib/python3.9/site-packages
COPY . .
CMD ["python", "app.py"]
FROM python:3.9
WORKDIR /app
# Install dependencies first, this layer changes less often
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the application files
COPY . .
CMD ["python", "app.py"]
通过在复制应用程序的其余部分之前复制requirements.txt并运行pip install,如果您仅更改应用程序代码,则可以最大限度地提高具有依赖项的缓存层仍然有效的机会。
FROM python:3.9-slim