現在、既存のrailsアプリケーションの開発をdocker上で動かそうと思っています。
これまではローカル環境で行なっていたのでbundle install
のインストール先をvendor/bundleに指定していました。
しかし、Docker上でvendor/bundleにインストールする必要はなく、rubyイメージで指定されているように、コンテナ内の/usr/local/bundleにインストールされることを想定に開発を進めたいと思っています。
そのため、ローカル環境で開発していたが故に存在していたvendor/bundle内に存在するgemたちをコンテナ内にコピーされることを回避したいと思っています。
また、vendor/bundleにインストールされるように指定している.bundle/configファイルもコンテナ内にコピーされることを回避したいです。
現在、ディレクトリ構造は以下の通りです。
myapp ├── backend │ ├── .bundle │ │ ├── config │ ├── vendor │ │ ├──bundle │ │ │ ├──Dockerfile │ │ │ ├──.dockerignore └── docker-compose.yml
myappディレクトリ内にdocker-compose.ymlファイルとbackendディレクトリがあり、
backendディレクトリにrailsに必要なディレクトリ、ファイルが存在すると行った形になっています。
.dockerignoreファイルを以下のように記載しました。
/vendor/bundle/ /.bundle/
しかし、この状態でdocker-compose build
を実行し、コンテナを立ち上げてみたところ.dockerignoreで指定したはずのvendor/bundleディレクトリがまだ存在している状態になっていました。
これはどういったことが原因で.dockerignoreの設定が反映されていないのでしょうか?
docker-compose.yml
version: "3" services: backend: build: context: ./backend command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" volumes: - ./backend:/myapp - bundle:/usr/local/bundle ports: - "3000:3000" links: - db db: image: postgres:12 ports: - "5432:5433" volumes: - postgresql-data:/var/lib/postgresql/data frontend: build: context: ./frontend volumes: - ./frontend:/myapp - /myapp/node_modules ports: - "8080:8080" volumes: postgresql-data: driver: local bundle: driver: local
Dockerfile
FROM ruby:2.5.0 RUN apt-get update -qq && apt-get install -y nodejs postgresql-client RUN mkdir /myapp WORKDIR /myapp COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock RUN bundle install COPY . /myapp EXPOSE 3000 CMD ["rails", "server", "-b", "0.0.0.0"]
回答1件
あなたの回答
tips
プレビュー