Я экспериментирую с более экономичными способами развертывания своих приложений Rails и прошел через Ruby Starter Projects, чтобы получить представление об Google Cloud Platform.
Это почти идеально и, безусловно, конкурентоспособно по цене, но развертывание происходит невероятно медленно.
Когда я запускаю команду развертывания из образца приложения Bookshelf:
$ gcloud preview app deploy app.yaml worker.yaml --promote
Я вижу новый экземпляр gae-builder-vm
на странице экземпляров Compute Engine/VM и получаю знакомый вывод сборки Docker — это занимает около десяти минут, чтобы закончить.
Однако, если я немедленно повторно развертываю, я получаю новый gae-builder-vm
, который проходит через такой же десятиминутный процесс сборки без видимого кэширования с момента первой сборки образа.
В обоих случаях второй модуль (worker.yaml) кэшируется и работает очень быстро:
Building and pushing image for module [worker]
---------------------------------------- DOCKER BUILD OUTPUT ----------------------------------------
Step 0 : FROM gcr.io/google_appengine/ruby
---> 3e8b286df835
Step 1 : RUN rbenv install -s 2.2.3 && rbenv global 2.2.3 && gem install -q --no-rdoc --no-ri bundler --version 1.10.6 && gem install -q --no-rdoc --no-ri foreman --version 0.78.0
---> Using cache
---> efdafde40bf8
Step 2 : ENV RBENV_VERSION 2.2.3
---> Using cache
---> 49534db5b7eb
Step 3 : COPY Gemfile Gemfile.lock /app/
---> Using cache
---> d8c2f1c5a44b
Step 4 : RUN bundle install && rbenv rehash
---> Using cache
---> d9f9b57ccbad
Step 5 : COPY . /app/
---> Using cache
---> 503904327f13
Step 6 : ENTRYPOINT bundle exec foreman start --formation "$FORMATION"
---> Using cache
---> af547f521411
Successfully built af547f521411
но для меня не имеет смысла, что эти версии нельзя кэшировать между развертываниями, если ничего не изменилось.
В идеале я думаю, что это будет происходить быстрее, если я инициирую перестройку на выделенном сервере сборки (который может запоминать образы Docker между сборками), который затем обновляет общедоступный файл образа и просит Google переразвернуть с готовым образом, что будет быстрее. .
Вот файл Docker, созданный gcloud
:
# This Dockerfile for a Ruby application was generated by gcloud with:
# gcloud preview app gen-config --custom
# The base Dockerfile installs:
# * A number of packages needed by the Ruby runtime and by gems
# commonly used in Ruby web apps (such as libsqlite3)
# * A recent version of NodeJS
# * A recent version of the standard Ruby runtime to use by default
# * The bundler and foreman gems
FROM gcr.io/google_appengine/ruby
# Install ruby 2.2.3 if not already preinstalled by the base image
# base image: https://github.com/GoogleCloudPlatform/ruby-docker/blob/master/appengine/Dockerfile
# preinstalled ruby versions: 2.0.0-p647 2.1.7 2.2.3
RUN rbenv install -s 2.2.3 && \
rbenv global 2.2.3 && \
gem install -q --no-rdoc --no-ri bundler --version 1.10.6 && \
gem install -q --no-rdoc --no-ri foreman --version 0.78.0
ENV RBENV_VERSION 2.2.3
# To install additional packages needed by your gems, uncomment
# the "RUN apt-get update" and "RUN apt-get install" lines below
# and specify your packages.
# RUN apt-get update
# RUN apt-get install -y -q (your packages here)
# Install required gems.
COPY Gemfile Gemfile.lock /app/
RUN bundle install && rbenv rehash
# Start application on port 8080.
COPY . /app/
ENTRYPOINT bundle exec foreman start --formation "$FORMATION"
Как я могу ускорить этот процесс?
git push
, и виртуальная машина запоминает свои установленные драгоценные камни). - person cgenco   schedule 18.04.2016