防止每次重建整个docker容器?提高速度

时间:2015-07-26 01:18:26

标签: performance optimization build docker

对Rails应用程序进行Docker化需要很长时间才能重建容器。 我到目前为止试图添加ADD,但我想不到更多。 有关如何提高我的docker容器重建速度的任何建议? 或者关于如何改进docker文件的一般建议,每次重建都需要很长时间。 还有智能的方法来检查例如一个目录是否已经存在而不会抛出错误而无法完成构建?

FROM ruby:2.2.0
EXPOSE 80
EXPOSE 22
ENV RAILS_ENV production

RUN apt-get update -qq && apt-get install -y build-essential

# --------------------------------------
# GEM PRE-REQ
# --------------------------------------
#RUN apt-get install -y libpq-dev
#RUN apt-get install -y libxml2-dev libxslt1-dev #nokigiri
#RUN apt-get install -y libqt4-webkit libqt4-dev xvfb
RUN cd /tmp && git clone https://github.com/maxmind/geoipupdate && cd geoipupdate && ./bootstrap

# --------------------------------------
# HOME FOLDER
# --------------------------------------
WORKDIR                             /srv/my

ADD . /srv/my
ADD ./Gemfile                       /srv/my/Gemfile
ADD ./Gemfile.lock                  /srv/my/Gemfile.lock

#RUN mkdir                           /srv/my
RUN bundle install --without development test
#RUN bundle install foreman


RUN bundle exec rake assets:precompile --trace


# --------------------------------------
# UNICORN AND NGINX
# --------------------------------------

ADD ./config/_server/unicorn_my /etc/init.d/unicorn_my
RUN chmod 755 /etc/init.d/unicorn_my
RUN update-rc.d unicorn_my defaults
ADD ./config/_server/nginx.conf /etc/nginx/sites-available/default

RUN apt-get install -y nginx
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
#RUN chown -R www-data:www-data /var/lib/nginx ??
ADD ./config/_server/nginx.conf /etc/nginx/my.conf
ADD ./config/_server/my.conf /etc/nginx/sites-enabled/my.conf
ADD ./config/_server/unicorn.rb /srv/my/config/unicorn.rb
ADD ./config/_server/Procfile /srv/my/Procfile

#RUN service unicorn_my start
#RUN foreman start -f ./Procfile

1 个答案:

答案 0 :(得分:7)

您可以通过以下方式提高构建速度:

  • 尽早安装所有要求。
  • 将所有apt-get / yum合并为一个命令,然后清理apt / yum缓存。它可以减小你的图像尺寸。

样品:

RUN \
  apt-get -y update && \
  apt-get -y install curl build-essential nginx && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/*
  • 尽可能晚地放置ADD / COPY,因为它会使Docker图像缓存失效。
  • 避免在经常更改的apt-get / ADD文件或目录之后放置长时间运行的任务(例如:COPY,下载大文件等)。

Docker为您的每个命令创建一个“快照”。因此,当您从相同的状态构建新映像(没有Dockerfile /文件/目录更改)时,它应该很快。

注释/取消注释Dockerfile以减少apt-get install时间可能对您没有帮助,因为它会使您的Docker缓存失效。