Docker化Rails应用程序需要很长时间才能重建容器. 我到目前为止试图添加ADD,但我想不到更多. 有关如何提高我的docker容器重建速度的任何建议? 或者关于如何改进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您可以通过以下方式提高构建速度:
>尽早安装所有要求.
>将所有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镜像缓存无效.
>避免在ADD / COPY文件或经常更改的目录之后放置长时间运行的任务(例如:apt-get,下载大文件等).
Docker为您的每个命令创建一个“快照”.因此,当您从相同的状态(没有Dockerfile /文件/目录更改)构建新映像时,它应该很快.
注释/取消注释Dockerfile以减少apt-get安装时间可能对您没有帮助,因为它会使您的Docker缓存无效.