相关疑难解决方法(0)

在为Python项目构建Docker镜像时,如何避免重新安装包?

我的Dockerfile就像

FROM my/base

ADD . /srv
RUN pip install -r requirements.txt
RUN python setup.py install

ENTRYPOINT ["run_server"]
Run Code Online (Sandbox Code Playgroud)

每次构建新映像时,都必须重新安装依赖项,这在我的区域可能非常慢.

我想到的cache已经安装的软件包的一种方法是my/base用更新的图像覆盖图像,如下所示:

docker build -t new_image_1 .
docker tag new_image_1 my/base
Run Code Online (Sandbox Code Playgroud)

所以下次我用这个Dockerfile构建时,我的/ base已经安装了一些软件包.

但是这个解决方案有两个问题:

  1. 并不总是可以覆盖基本图像
  2. 随着更新的图像在其上分层,基本图像变得越来越大

那么我可以用什么更好的解决方案来解决这个问题呢?

编辑##:

有关我机器上的泊坞窗的一些信息:

?  test  docker version
Client version: 1.1.2
Client API version: 1.13
Go version (client): go1.2.1
Git commit (client): d84a070
Server version: 1.1.2
Server API version: 1.13
Go version (server): go1.2.1
Git commit (server): d84a070
?  test  docker info
Containers: 0 …
Run Code Online (Sandbox Code Playgroud)

python docker

103
推荐指数
3
解决办法
3万
查看次数

当git checkout同一个文件时,docker添加缓存

我需要在CI服务器构建映像中使用checkout项目重用docker cache.

结帐时,Docker ADD不使用缓存相同的文件.

我在git分支A执行docker build -t somename .它正常使用docker缓存,但如果我通过分支Bgit checkout B,什么都不做,去分支A通过git checkout A并再次运行docker build -t somename .docker缓存仅在第一个ADD之前使用.

这里的例子:

Dockerfile

# DOCKER-VERSION 0.10.0
FROM myregistry:5000/ruby:2.1.2-1
MAINTAINER ME

# Gem sources
RUN gem source -r https://rubygems.org/
RUN gem source -a http://gems.mydomain

# Never install a ruby gem docs
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc

# gems install
RUN mkdir /foo
WORKDIR /foo

RUN gem install bundler
ADD Gemfile …
Run Code Online (Sandbox Code Playgroud)

git docker

10
推荐指数
1
解决办法
2588
查看次数

标签 统计

docker ×2

git ×1

python ×1