2016-03-23 10 views
8

現在、私はドッカーを使用してアプリケーションを設定しています。私は1つのコントローラで、最小のレールアプリを持っている。Dockerでnginxを使用してRailsのプリコンパイルされたアセットを処理する

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 

そして、私は次のセットアップがあります:あなたは、これらを実行することで、私のセットアップを得ることができます

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" 
VOLUME "$APP_DIR/public"は、nginxのコンテナと共有してボリュームを作成している

Dockerfileにあります:

FROM nginx 

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

そして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 

これは動作しますが、私はそれを構築するだけでは初めて。アセットを変更してイメージを再構築すると、アセットが更新されません。おそらく、画像のビルド時にボリュームが更新されない可能性があるため、Dockerがキャッシュをどのように処理するかが原因と考えられます。

docker-compose built && docker-compose upを実行するたびに資産が更新されるようにします。どのようにこれを達成するためのアイデア?

答えて

2

Compose preserves volumes on recreate

あなたはカップルのオプションがあります。

  1. docker-compose rm app削除するupを実行する前に、代わりに、ビルド時にWebコンテナへの資産及びADDまたはCOPYそれらを構築し、資産のボリュームを使用しないでください古いコンテナとボリューム。
+1

ありがとうございます、クーベルネットなどの展開でどのように動作するか考えてみてください。 – jeroenvisser101

関連する問題