Docker compose 很慢,如何优化 Docker 镜像以实现更快的构建和更小的尺寸?

问题描述 投票:0回答:1

我正在使用 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 秒来运行我的应用程序。

docker optimization devops
1个回答
0
投票

我有几个解决方案给你:

  1. 利用多阶段构建 多阶段构建允许您在单个 Dockerfile 中使用多个 FROM 语句。这样,您可以在一个映像中编译依赖项,并仅将必要的文件复制到最终映像,从而减小大小。

类似这样的:

# 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"]
  1. 或者,利用 Docker 缓存 Docker 缓存层,您可以优化 Dockerfile 以充分利用此缓存。重新排列指令,以便最后添加最频繁更改的文件。 这是一个例子:
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,如果您仅更改应用程序代码,则可以最大限度地提高具有依赖项的缓存层仍然有效的机会。

  1. 我觉得最简单的,用小一点的图片就行了XD
FROM python:3.9-slim
© www.soinside.com 2019 - 2024. All rights reserved.