Skip to main content

Getting started with Docker

Docker, in the beginning, can be overwhelming. Tutorials often focus on creating a complex interaction between Dockerfiles, docker-compose, entrypoint scripts and networking.

It can take hours to bring up a simple Rails application in Docker and I found that put me off the first few times I tried to play with it.

I think a rapid feedback loop is essential for playing with a piece of technology.

If you've never used Docker before, then this is the perfect post for you. I'll start you off on your docker journey and with a few simple commands, you'll be in a Docker container, running ruby interactively.

You'll need to install Docker. On a Mac, I prefer to install Docker Desktop through homebrew:
brew cask install docker
If you're running Linux or Windows, read the official docs for install instructions.

On your Mac, you should now have a Docker icon in your menu bar. Click on it and make sure it says "Docker desktop is running".


Now open a terminal and type the following:
$ docker run -it --rm ruby:2.7.1-buster
You should be dropped into an irb session:
> docker run -it --rm ruby:2.7.1-buster
irb(main):001:0> puts "Hello from inside a Docker container"
Hello from inside a Docker container
=> nil
irb(main):002:0>
That should return you to your normal command prompt.

It doesn't look like you've done much - bringing up an irb session isn't groundbreaking. You can do the same by typing irb at your usual prompt.

Breaking down the command used:

docker run
Runs a command in a new container
-it
These two options that tell docker to run in interactive mode and to allocate a pseudo-TTY
--rm
Instructs docker to automatically delete the container when we exit
ruby:2.7.1-buster
 The image that we want to run.

You'll notice that none of those commands actually tried to execute irb to run the Ruby REPL. So how did we end up in an irb session?

The answer is that the Docker image we used defined a default step for us to start irb.

Comments

Popular posts from this blog

Getting started with Ruby on Rails 3.2 and MiniTest - a Tutorial

For fun, I thought I would start a new Ruby on Rails project and use MiniTest instead of Test::Unit. Why? Well MiniTest is Ruby 1.9s testing framework dejour, and I suspect we will see more and more new projects adopt it. It has a built in mocking framework and RSpec like contextual syntax. You can probably get away with fewer gems in your Gemfile because of that. Getting started is always the hardest part - let's jump in with a new rails project rails new tddforme --skip-test-unit Standard stuff. MiniTest sits nicely next to Test::Unit, so you can leave it in if you prefer. I've left it out just to keep things neat and tidy for now. Now we update the old Gemfile: group :development, :test do gem "minitest" end and of course, bundle it all up.....from the command line: $ bundle Note that if you start experiencing strange errors when we get in to the generators later on, make sure you read about rails not finding a JavaScript runtime . Fire up...

Rails 3.2, MiniTest Spec and Capybara

What do you do when you love your spec testing with Capybara but you want to veer off the beaten path of Rspec and forge ahead into MiniTest waters? Follow along, and you'll have not one, but two working solutions. The setup Quickly now, let's throw together an app to test this out. I'm on rails 3.2.9. $ rails new minicap Edit the Gemfile to include a test and development block group :development, :test do gem 'capybara' gem 'database_cleaner' end Note the inclusion of database_cleaner as per the capybara documentation And bundle: $ bundle We will, of course, need something to test against, so for the sake of it, lets throw together a scaffold, migrate our database and prepare our test database all in one big lump. If you are unclear on any of this, go read the guides . $ rails g scaffold Book name:string author:string $ rake db:migrate $ rake db:test:prepare Make it minitest To make rails use minitest , we simply add a require ...