【发布时间】:2019-08-30 13:29:15
【问题描述】:
我有一个简单的 Docker 文件:
FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip install -r requirements
问题是 - 它会在每个构建中安装要求。我有很多要求,但它们很少改变。
我搜索了解决方案并最终得到了这个:
FROM python:3.6
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install -r requirements.txt
COPY . /app
效果很好,直到它停止更新代码。例如,在 /app 和 build 的某些文件中注释几行 - 行在图像中保持未注释。
我再次搜索,发现这可能是缓存引起的。我尝试了 --no-cache 构建标志,但现在我又开始安装需求了。
在我的情况下是否有一些解决方法或正确的方法?
【问题讨论】:
-
你使用什么命令来构建和运行镜像?您如何看待您的更改没有产生效果?
-
我不确定 pip 在这个意义上是如何工作的,但是如果它只能以某种方式下载特定版本的依赖项,那么您可以手动预先准备它们,在 docker 文件中只需将内容复制到请求的位置- 如果它是独立的 - 此外,您仍然可以安装一些额外的 dep。由于某种原因,每个版本仍然需要下载它。可能是?例如。与maven相比,它会“只下载一些jar”,所以你可以手动下载然后复制。所以你可以只改变一小层图像。
-
@DavidMaze 场景查看文件未更改:1) docker build -t
。 2) docker run --rm -ti bash 3) cat /app/filename -
@xxxvodnikxxx 猜测考虑到 SiHa 的回答,这可能是解决方法
-
@Mikekekeke 我不这么认为,在需求文件中我发现您还需要以静态方式指定版本,所以基本上,它是一个静态内容(就版本而言),那么,您可以交付手动复制它们。在 docker 的这个意义上,它可以与缓存一起工作,所以你不需要每次都重建所有层,而只需要重建被改变的层。如果您不使用副本更改图层,那么我认为应该更快地构建它:) 至少在理论上..
标签: docker docker-build