docker-compose build app
docker-compose up
docker-compose run --rm app bundle # Gemfile change
docker compose exec app rake db:create
Thanks to @jfahrer for the Railsconf talk that taught me this
version: '3.7' | |
services: | |
app: | |
image: your_user_name_here/appname:v1 | |
build: | |
context: . | |
command: ["spring", "server"] | |
environment: | |
- POSTGRES_HOST=pg | |
- POSTGRES_USER=postgres | |
- POSTGRES_PASSWORD=secret | |
- RAILS_ENV | |
volumes: | |
- ./:/usr/src/app | |
- gems:/usr/local/bundle | |
- node-modules:/usr/src/app/node_modules | |
- ${HOME}/.irbrc:/root/.irbrc | |
- ${HOME}/.irb-history:/root/.irb-history | |
web: | |
image: your_user_name_here/appname:v1 | |
command: ["rails", "server", "-b", "0.0.0.0"] | |
environment: | |
- POSTGRES_HOST=pg | |
- POSTGRES_USER=postgres | |
- POSTGRES_PASSWORD=secret | |
- RAILS_ENV | |
volumes: | |
- ./:/usr/src/app | |
- gems:/usr/local/bundle | |
- node-modules:/usr/src/app/node_modules | |
ports: | |
- 3000:3000 | |
pg: | |
image: postgres:11.2-alpine | |
volumes: | |
- pg-data:/var/lib/postgresql/data | |
environment: | |
- POSTGRES_USER=postgres | |
- POSTGRES_PASSWORD=secret | |
webpacker: | |
image: your_user_name_here/appname:v1 | |
command: ./bin/webpack-dev-server | |
volumes: | |
- ./:/usr/src/app | |
- gems:/usr/local/bundle | |
- node-modules:/usr/src/app/node_modules | |
ports: | |
- 3035:3035 | |
volumes: | |
gems: | |
pg-data: | |
node-modules: |
FROM ruby:2.6.5-alpine | |
RUN apk add --update --no-cache bash build-base nodejs sqlite-dev tzdata postgresql-dev yarn | |
RUN gem install bundler:2.1.4 | |
WORKDIR /usr/src/app | |
COPY package.json yarn.lock ./ | |
RUN yarn install --check-files | |
COPY Gemfile* ./ | |
RUN bundle install | |
COPY . . | |
ENV PATH=./bin:$PATH | |
CMD ["rails", "console"] | |
# config/webpacker.yml | |
# Note: You must restart bin/webpack-dev-server for changes to take effect | |
default: &default | |
source_path: app/javascript | |
source_entry_path: packs | |
public_root_path: public | |
public_output_path: packs | |
cache_path: tmp/cache/webpacker | |
check_yarn_integrity: false | |
webpack_compile_output: false | |
# Additional paths webpack should lookup modules | |
# ['app/assets', 'engine/foo/app/assets'] | |
resolved_paths: [] | |
# Reload manifest.json on all requests so we reload latest compiled packs | |
cache_manifest: false | |
# Extract and emit a css file | |
extract_css: false | |
static_assets_extensions: | |
- .jpg | |
- .jpeg | |
- .png | |
- .gif | |
- .tiff | |
- .ico | |
- .svg | |
- .eot | |
- .otf | |
- .ttf | |
- .woff | |
- .woff2 | |
extensions: | |
- .mjs | |
- .js | |
- .sass | |
- .scss | |
- .css | |
- .module.sass | |
- .module.scss | |
- .module.css | |
- .png | |
- .svg | |
- .gif | |
- .jpeg | |
- .jpg | |
development: | |
<<: *default | |
compile: true | |
# Verifies that versions and hashed value of the package contents in the project's package.json | |
# check_yarn_integrity: true | |
# Reference: https://webpack.js.org/configuration/dev-server/ | |
dev_server: | |
https: false | |
host: webpacker | |
port: 3035 | |
public: localhost:3035 | |
hmr: true | |
# Inline should be set to true if using HMR | |
inline: true | |
overlay: true | |
compress: true | |
disable_host_check: true | |
use_local_ip: false | |
quiet: false | |
headers: | |
'Access-Control-Allow-Origin': '*' | |
watch_options: | |
ignored: '**/node_modules/**' | |
test: | |
<<: *default | |
compile: true | |
# Compile test packs to a separate directory | |
public_output_path: packs-test | |
production: | |
<<: *default | |
# Production depends on precompilation of packs prior to booting for performance. | |
compile: false | |
# Extract and emit a css file | |
extract_css: true | |
# Cache manifest.json for performance | |
cache_manifest: true |