This tutorial will start with Docker installed and with a Rails app
First of all, we will need to create our
Dockerfile. A good example can be found on this blog by Nick Janetakis.
This code contains the script that will be executed on our docker machine at the moment of start.For this reason, we are installing all the required libraries and ends with the start of Puma (RoR dev server)
# Use the barebones version of Ruby 2.3. FROM ruby:2.3.0-slim # Optionally set a maintainer name to let people know who made this image. MAINTAINER Nick Janetakis <[email protected]> # Install dependencies: # - build-essential: To ensure certain gems can be compiled # - nodejs: Compile assets # - libpq-dev: Communicate with postgres through the postgres gem RUN apt-get update && apt-get install -qq -y --no-install-recommends \ build-essential nodejs libpq-dev git # Set an environment variable to store where the app is installed to inside # of the Docker image. The name matches the project name out of convention only. ENV INSTALL_PATH /mh-backend RUN mkdir -p $INSTALL_PATH # This sets the context of where commands will be running in and is documented # on Docker's website extensively. WORKDIR $INSTALL_PATH # We want binstubs to be available so we can directly call sidekiq and # potentially other binaries as command overrides without depending on # bundle exec. COPY Gemfile* $INSTALL_PATH/ ENV BUNDLE_GEMFILE $INSTALL_PATH/Gemfile ENV BUNDLE_JOBS 2 ENV BUNDLE_PATH /gembox RUN bundle install # Copy in the application code from your work station at the current directory # over to the working directory. COPY . . # Ensure the static assets are exposed to a volume so that nginx can read # in these values later. VOLUME ["$INSTALL_PATH/public"] ENV RAILS_LOG_TO_STDOUT true # The default command that gets run will be to start the Puma server. CMD bundle exec puma -C config/puma.rb
Also, we will use docker-compose, for that, we will create
The explanation of this file will be more a docker-compose tutorial than an integration with Rails and I will not cover here.
version: '2' services: backend: links: - #whatever you need to link like db build: . command: ./scripts/start.sh ports: - '3000:3000' volumes: - .:/backend volumes_from: - gembox env_file: - .dev-docker.env stdin_open: true tty: true
Just with these two files you will have enough to run
docker-compose up and wake up your docker