A Docker image that contains the latest versions of RubyGems, Bundler, etc that are compatible with Ruby 1.9.3. So instead of having to create Dockerfiles that looked like:
FROM ruby:1.9.3
# The Debian Jessie APT packages have been archived. Update where to
# find the packages. If you don't do this you will get an error message
# like:
#
# W: Failed to fetch http://http.debian.net/debian/dists/jessie-updates/InRelease
#
RUN sed -i '/jessie-updates/d' /etc/apt/sources.list
# Install stuff. Currently just the build essentials.
RUN apt-get update -qq && apt-get install -y build-essential
# Working folder.
RUN mkdir /app
WORKDIR /app
COPY . .
# Install Gems. Use Bundler 1.17.3 as 2+ does not work with
# Ruby 1.9.3. Also update the rubygems to prevent frozen string
# errors. Rubygems 2.7.8 is the latest version to support Ruby 1.9.3.
RUN gem install rubygems-update -v 2.7.8
RUN update_rubygems
RUN gem install bundler -v 1.17.3
RUN bundle install
The files now look like:
FROM corgibytes/ruby-1.9.3:1.0.1
# Working folder.
RUN mkdir /app
WORKDIR /app
COPY . .
# Install Gems.
RUN bundle install
You can find the image on DockerHub here. To get the latest version, which is not guaranteed to be stable:
docker pull corgibytes/ruby-1.9.3
To get a specific version, which is stable:
docker pull corgibytes/ruby-1.9.3:<version>
For example:
docker pull corgibytes/ruby-1.9.3:1.0.0
Example Dockerfile and Compose to run a Rails app that uses Ruby 1.9.3:
# Dockerfile
FROM corgibytes/ruby-1.9.3:1.0.0`
# Working folder.
RUN mkdir /app
WORKDIR /app
COPY . .
# Install Gems.
RUN bundle install
# docker-compose.yml
version: '3.7'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
entrypoint: ./docker-entrypoint.sh
volumes:
- .:/app
- bundler-data:/usr/local/bundle
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:9.6
ports:
- "5432:5432"
environment:
POSTGRES_PASSWORD: password1234
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
bundler-data:
# docker-entrypoint.sh
#!/bin/sh
rm -f tmp/pids/server.pid
exec "$@"
This image is setup using DockerHub's automate builds. It will build on every commit to master and tag it as latest
. It will build also build on every tag that has the format v.#.#.#
and tag the build as #.#.#
. For example if a release is tagged as v.1.0.0
a DockerHub image will be created with the tag 1.0.0
.
The tagged versions are stable where as the latest version is not guaranteed to be stable.
You can find a full list of the built tags on DockerHub.
When making changes to the image you can test you changes by running the following command in the root of the repository:
docker build .
If you have any questions, notice a bug, or have a suggestion/enhancment please let me know by opening issue or pull request.
Thanks to the Ruby team for creating orginial Ruby Docker images.