2016-03-23 15 views
8

Attualmente sto configurando la mia app tramite la finestra mobile. Ho un'app minima per i binari, con 1 controller. È possibile ottenere la mia configurazione eseguendo questi:Assegnare le risorse precompilate delle guide utilizzando nginx nella finestra mobile

rails new app --database=sqlite --skip-bundle 
cd app 
rails generate controller --skip-routes Home index 
echo "Rails.application.routes.draw { root 'home#index' }" > config/routes.rb 
echo "gem 'foreman'" >> Gemfile 
echo "web: rails server -b 0.0.0.0" > Procfile 
echo "port: 3000" > .foreman 

E ho la seguente configurazione:

Dockerfile:

FROM ruby:2.3 

# Install dependencies 
RUN apt-get update && apt-get install -y \ 
     nodejs \ 
     sqlite3 \ 
     --no-install-recommends \ 
     && rm -rf /var/lib/apt/lists/* 

# Configure bundle 
RUN bundle config --global frozen 1 
RUN bundle config --global jobs 7 

# Expose ports and set entrypoint and command 
EXPOSE 3000 
CMD ["foreman", "start"] 

# Install Gemfile in different folder to allow caching 
WORKDIR /tmp 
COPY ["Gemfile", "Gemfile.lock", "/tmp/"] 
RUN bundle install --deployment 

# Set environment 
ENV RAILS_ENV production 
ENV RACK_ENV production 

# Add files 
ENV APP_DIR /app 
RUN mkdir -p $APP_DIR 
COPY . $APP_DIR 
WORKDIR $APP_DIR 

# Compile assets 
RUN rails assets:precompile 
VOLUME "$APP_DIR/public" 

Dove VOLUME "$APP_DIR/public" è la creazione di un volume che è condiviso con il contenitore di Nginx, che ha questo nel Dockerfile:

FROM nginx 

ADD nginx.conf /etc/nginx/nginx.conf 

E poi docker-compose.yml:

version: '2' 

services: 
    web: 
    build: config/docker/web 
    volumes_from: 
     - app 
    links: 
     - app:app 
    ports: 
     - 80:80 
     - 443:443 
    app: 
    build: . 
    environment: 
     SECRET_KEY_BASE: 'af3...ef0' 
    ports: 
     - 3000:3000 

Questo funziona, ma solo la prima volta che costruirlo. Se cambio le risorse e ricostruisco le immagini, esse non vengono aggiornate. Forse perché i volumi non vengono aggiornati sulla creazione dell'immagine, penso perché Docker gestisce la memorizzazione nella cache.

Desidero che le risorse vengano aggiornate ogni volta che corro docker-compose built && docker-compose up. Qualche idea su come realizzare questo?

risposta

2

Compose preserves volumes on recreate.

Hai un paio di opzioni:

  1. non utilizzare volumi per le attività, invece costruire le attività e le ADD o COPY nel contenitore web durante la generazione
  2. docker-compose rm app prima di eseguire up per rimuovere il vecchio contenitore e volumi.
+1

Grazie, qualche idea di come questo potrebbe funzionare sulla distribuzione con, diciamo, Kubernetes? – jeroenvisser101

Problemi correlati