Skip to content
forked from rails/docked

Running Rails from Docker for easy start to development

License

Notifications You must be signed in to change notification settings

nicksieger/docked

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Docked Rails

Setting up Rails for the first time with all the dependencies necessary can be daunting for beginners. Docked Rails attempts to flatten the onboarding curve by only requiring a working Docker installation in order to get started making a new Rails application, working with that application during development, and running a basic server. All based on pre-configured commands and dependencies living in a Docker image.

Getting started

To use Docked Rails, follow these steps on macOS:

  1. Install Docker
  2. Copy'n'paste to run in terminal:
    docker volume create ruby-bundle-cache
    alias rails='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle ghcr.io/rails/cli:latest'
    alias rails-server='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cli:latest server -b 0.0.0.0'

Or on Linux 64-bit:

  1. Install Docker
  2. Copy'n'paste to run in terminal:
    docker volume create ruby-bundle-cache
    alias rails='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle ghcr.io/rails/cli-amd64:latest'
    alias rails-server='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cli-amd64:latest server -b 0.0.0.0'

Or on Windows (with PowerShell):

  1. Install WSL
  2. Install Docker
  3. Copy'n'paste to run in terminal:
    docker volume create ruby-bundle-cache
    alias rails='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle ghcr.io/rails/cli-amd64:latest'
    alias rails-server='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 ghcr.io/rails/cli-amd64:latest server -b 0.0.0.0'

Then you're ready to create your first Rails app:

  1. rails new my-first-rails-app
  2. cd my-first-rails-app
  3. rails generate scaffold post title:string body:text
  4. rails db:migrate
  5. rails-server

That's it! You're running Rails on http://localhost:3000.

Working with JavaScript-bundled Rails apps

The default for Rails 7 is to rely on importmaps for JavaScript, so you don't need to use any JavaScript build process. But if you know you need to work with React, or other heavy JavaScript front-end tooling, you should use Rails together with JS bundling. To setup, follow the same steps as above, then add the following alias:

On macOS:

alias rails-dev='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 --entrypoint bin/dev ghcr.io/rails/cli:latest'

Or on Linux 64-bit:

alias rails-dev='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 --entrypoint bin/dev ghcr.io/rails/cli-amd64:latest'

Or on Windows (with PowerShell):

alias rails-dev='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle -p 3000:3000 --entrypoint bin/dev ghcr.io/rails/cli-amd64:latest'

Then create your app:

  1. rails new my-first-rails-app -j esbuild
  2. cd my-first-rails-app
  3. rails generate scaffold post title:string body:text
  4. rails db:migrate
  5. Edit the Procfile.dev in the root of your project and change the first line to: web: bin/rails server -p 3000 -b 0.0.0.0
  6. rails-dev

Now your development server will automatically compile any changes you make to the JavaScript in the project. Like with first setup, your server is running on http://localhost:3000.

Mapping additional commands

In addition to the alias for rails and rails-server (or rails-dev), it can be helpful also to map bundle, rake, or even yarn to run via Docker.

Follow these steps on macOS:

alias bundle='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint bundle ghcr.io/rails/cli:latest'
alias rake='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint rake ghcr.io/rails/cli:latest'
alias yarn='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint yarn ghcr.io/rails/cli:latest'

Or on Linux 64-bit:

alias bundle='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint bundle ghcr.io/rails/cli-amd64:latest'
alias rake='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint rake ghcr.io/rails/cli-amd64:latest'
alias yarn='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint yarn ghcr.io/rails/cli-amd64:latest'

Or on Windows:

alias bundle='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint bundle ghcr.io/rails/cli-amd64:latest'
alias rake='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint rake ghcr.io/rails/cli-amd64:latest'
alias yarn='docker run --rm -it -v ${PWD}:/rails -v ruby-bundle-cache:/bundle --entrypoint yarn ghcr.io/rails/cli-amd64:latest'

Work to be done

  1. Setup pipeline to compile single multi-platform image (so darwin and amd64 can live together)
  2. Change the Procfile.dev in rails to bind to 0.0.0.0 by default?

About

Running Rails from Docker for easy start to development

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 68.8%
  • Dockerfile 31.2%