Update 20/01-16: Updated installation instructions for the latest versions of Docker, Fig and Ruby.
Docker is a platform for building, shipping and running all sorts of applications (source). It’s a very powerful and extensible alternative to other forms of virtualization and platforms like Heroku. This post described the steps I’ve taken to get an existing Rails app onto Docker using Fig.
Installing Docker
There are many guides on installing Docker. I recommend starting here. The rest of this guide assumes you have Docker setup and running locally.
Ruby 2.2.0 Dockerfile
Copy the following into a Dockerfile
and run docker build .
to start
building the container. Once successful, try running the same command to see
that Docker properly caches the build so it is done in seconds.
This file specifies how Docker builds the container. It is based on the latest Ruby base image and installs everything needed for the application to run, including Ruby 2.2.0 and the required RubyGems.
Installing Fig
Fig is a tool that allows you to specify, build and run services needed for your application. Go here for installation instructions.
When you have Fig installed, copy the following into a fig.yml
file.
With this in place you can now run fig build
and let it build the containers
for the application and the database.
If you get a No Rakefile found
error, make sure you are using Docker >1.3.0
(Thanks Wilker Lúcio).
Making your app container friendly
Add the following to your config/database.yml
file. This is needed as the web
container will need to communicate with the PostgreSQL container.
Booting the application on Docker
You’re now ready to start setting up your app inside the container. Start by
bootstrapping the database with fig run web rake db:setup
. Once this is done,
you can start the app via fig up
.
You should now be able to access the app on http://localhost:3000.
Running tests from Docker via Fig
You can now run your tests on the Docker container via fig run web bundle exec
rspec
or whichever testing framework you use.
Conclusion
I hope you found this useful and feel confident in trying out Docker for your Rails applications. If you have any questions or feedback, please let me know in the comments below.