我的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已经安装了一些软件包.
但是这个解决方案有两个问题:
那么我可以用什么更好的解决方案来解决这个问题呢?
有关我机器上的泊坞窗的一些信息:
? 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) 我需要在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)