{"id":9523,"date":"2015-12-16T12:11:33","date_gmt":"2015-12-16T10:11:33","guid":{"rendered":"http:\/\/www.webcodegeeks.com\/?p=9523"},"modified":"2015-12-16T12:18:38","modified_gmt":"2015-12-16T10:18:38","slug":"using-docker-rails-development","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/","title":{"rendered":"Using Docker for Rails Development"},"content":{"rendered":"<p>Over the first weekend in October, more than two hundred developers gathered in Ghent for <a href=\"http:\/\/arrrrcamp.be\/\">ArrrrCamp<\/a>, a serious-yet-pirate-themed Ruby conference. I was happy to deliver a talk on using Docker for Rails development.<\/p>\n<p>Below is a condensed version of the talk, which covers an introduction to containerization and the Docker ecosystem, as well as some examples of running Rails applications in Docker containers.<\/p>\n<p>If you want to follow along with the code examples, you can find the source on <a href=\"https:\/\/github.com\/rheinwein\/rails-demo-apps\">GitHub<\/a>, <a href=\"http:\/\/www.slideshare.net\/rheinwein\/arrrrcamp\">the slides from my talk<\/a> are also available, and the video of the talk itself is right here:<\/p>\n<p><iframe title=\"ArrrrCamp 2015 - Developing Ruby Applications with Docker by  Laura Frank\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/hiiPMgZbzcA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<h2>Containerization<\/h2>\n<p>Chances are that if you\u2019ve just started working with containers, you\u2019ve worked with them via <a href=\"https:\/\/www.docker.com\/\">Docker<\/a>. Containerization has become more widely used over the last two years because Docker has removed barriers and made it much easier to integrate containerization into your development workflow.<\/p>\n<p>One important thing to remember is that Docker != containers, and in fact there are other ways to use containers than with Docker. But since Docker makes it so easy, it\u2019s almost a no-brainer to use their tools.<\/p>\n<p>One of the main benefits of using a container is that they are pretty nimble. It doesn\u2019t take long to boot them up, and there\u2019s relatively low overhead in terms of time and space. Another benefit is their limited scope.<\/p>\n<p>A container is a self-contained execution environment, meaning that all of a container\u2019s dependencies are contained within the container itself. This gives each of your services the autonomy to use the appropriate toolset for its role in your application without worry of conflicting with another component. You\u2019re saved from dependency spaghetti since the dependencies only exist within the container.<\/p>\n<p>Very simply put, containers are just a layer of virtualization. They don\u2019t take the place of virtual machines, and you can even use VMs and containers together.<\/p>\n<p>The point is not to stop using virtual machines altogether, but rather to increase service density by adding containers to the mix. Instead of running three services on three virtual machines, you can run the same three services \u2014 in containers \u2014 on one virtual machine. This means less money and less time to maintain your infrastructure since there are fewer VMs.<\/p>\n<p>Getting started with containers may initially seem more complex, but they greatly reduce the amount of time and space needed to run your application. Spend less time provisioning, rebooting, and fighting with dependencies, and more time building what you want.<\/p>\n<h2>Installing Docker<\/h2>\n<p>If you run Linux, install via <a href=\"http:\/\/docs.docker.com\/linux\/started\/\">the official packages<\/a>.<\/p>\n<p>If you\u2019re on <a href=\"http:\/\/docs.docker.com\/mac\/started\/\">OS X<\/a> or <a href=\"http:\/\/docs.docker.com\/windows\/started\/\">Windows<\/a>, you can install Docker via Docker Toolbox. It might help to get acquainted with the Docker tools by reading about <a href=\"http:\/\/blog.codeship.com\/docker-machine-compose-and-swarm-how-they-work-together\/\">how the tools in Docker Toolbox work together<\/a>.<\/p>\n<p>Note that if you are using Docker Toolbox, you\u2019ll need to run <code>eval $(docker-machine env machine_name)<\/code> in order to run commands from your terminal.<\/p>\n<h2>The Docker Ecosystem<\/h2>\n<p>What started as a small project has grown to be a very powerful ecosystem of many different types of tools.<\/p>\n<p>Docker focuses on three main functions: Build, Ship, and Run. The \u2018Build\u2019 part is what we\u2019ll focus on for now, as it\u2019s likely to be of the most immediate concern for you as a developer.<\/p>\n<p>The first thing you\u2019ll need to get acquainted with as you start to run Dockerized services is <a href=\"https:\/\/docs.docker.com\/userguide\/dockerimages\/\">the Docker image<\/a>. An image and a container are two different things; an image is run inside of a container. You can think of an image being like a class, and a container being like an instance of that class.<\/p>\n<p>You can find public images on <a href=\"https:\/\/hub.docker.com\/\">the Docker Hub<\/a>, which houses Docker\u2019s public registry. There are over 15,000 images that you can pull down and use in your own projects. You can have private repos on the hub as well. If you\u2019re concerned about proprietary code, you can run your own registry (and you can find the registry image on the Docker Hub).<\/p>\n<p>There are a few different styles of images available on the Docker Hub. The first is what I\u2019ve called a \u201cservice image,\u201d which is an image that you can pull down, run in a container, and have a working service to consume. A good example of this type of image is a database. You can run the database in a container and start working with it.<\/p>\n<p>Another type of image is a \u201cproject base image.\u201d These are meant to set up an environment in a container that can then run your own code. Language images (like the <a href=\"https:\/\/hub.docker.com\/_\/ruby\/\">Ruby<\/a> or <a href=\"https:\/\/hub.docker.com\/_\/golang\/\">Golang<\/a> images) fall into this category. Just running the image won\u2019t get you very far without adding your own code to it. It\u2019s just meant to be a base for your own project.<\/p>\n<p>You can also find <a href=\"https:\/\/github.com\/docker-library\/official-images\">official images<\/a> on the Hub. These are images that are maintained by either companies or open-source communities, and they\u2019re a good starting point for your project.<\/p>\n<p>To pull down an image from the Docker Hub, you can say <code>docker pull image_name<\/code>.<\/p>\n<h2>Building Your Own Docker Images<\/h2>\n<p>Of course, you can build your own Docker images. To do this, you need a Dockerfile. You can find <a href=\"https:\/\/docs.docker.com\/reference\/builder\/\">the Dockerfile reference<\/a> within Docker\u2019s documentation.<\/p>\n<p>Here\u2019s a simple Rails Dockerfile:<\/p>\n<pre class=\" brush:php\">FROM rails:4.2.4\r\nMAINTAINER Laura Frank &lt;laura@codeship.com&gt;\r\nRUN mkdir -p \/var\/app\r\nCOPY . \/var\/app\r\nWORKDIR \/var\/app\r\nRUN bundle install\r\nCMD rails s -b 0.0.0.0<\/pre>\n<p>Once I\u2019ve written my Dockerfile, I can build it by saying:<\/p>\n<pre class=\" brush:php\">docker build -t image_name . # don\u2019t forget the dot!<\/pre>\n<p>Each of the uppercase words in the Dockerfile is an instruction. In this Dockerfile, we\u2019re using a Rails base image, and then copying an existing Rails application (in our current directory) to the newly-created <code>\/var\/app<\/code> directory in the container. This is a static copy, and once the copy is completed, the only way to update code within the container is to rebuild my image. When I run a container with this image, it will start with the CMD or command of <code>rails s -b 0.0.0.0<\/code>.<\/p>\n<p>To see the images you have available on your Docker host \u2014 either from <code>docker pull<\/code> or from <code>docker build<\/code> \u2014 run <code>docker images<\/code>.<\/p>\n<h2>Building a Rails Application with Docker<\/h2>\n<p>There are a few goals we have as we start a Rails application with Docker.<\/p>\n<ul>\n<li>view the app running in the browser<\/li>\n<li>edit files in a local environment and see the changes<\/li>\n<li>run rake tasks like migrations<\/li>\n<li>see log output<\/li>\n<\/ul>\n<p>Basically, we want to take advantage of the speed and isolation that Docker provides, but still have a development environment that feels natural to us.<\/p>\n<p>In the previous Dockerfile example, we would have to rebuild the image every time we changed the code in order to see the changes running in a container. This is a huge pain, and you can get around it using a volume mount.<\/p>\n<p>Instead of statically copying all of the code inside the container, you\u2019ll mount your working directory as a volume inside the container (think of it like syncing folders), and then you can edit code and see the changes running inside the container without having to rebuild the image.<\/p>\n<p>Here\u2019s what a Dockerfile and <code>docker run<\/code> string would look like when using a mounted volume for your application directory.<\/p>\n<pre class=\" brush:php\">FROM rails:4.2.4\r\nMAINTAINER Laura Frank &lt;laura@codeship.com&gt;\r\nRUN mkdir -p \/var\/app\r\nCOPY Gemfile \/var\/app\/Gemfile\r\nWORKDIR \/var\/app\r\nRUN bundle install\r\nCMD rails s -b 0.0.0.0<\/pre>\n<p>Instead of copying everything, we\u2019ll just copy the Gemfile and Gemfile.lock, then bundle install.<\/p>\n<p>We still have to get the rest of the code inside the container, though. This is done at runtime with a <code>-v<\/code> flag.<\/p>\n<pre class=\" brush:php\">docker run -v local\/project\/path:\/var\/app -p 3000:3000 my_image_name<\/pre>\n<p>Full <a href=\"https:\/\/docs.docker.com\/reference\/run\/\"><code>docker run<\/code> reference<\/a> is available in the Docker docs.<\/p>\n<p>A couple important flags that you\u2019ll use pretty frequently:<\/p>\n<ul>\n<li><code>-p 3000:3000<\/code> create a port binding rule; -ip:hostPort:containerPort<\/li>\n<li><code>-v local\/path:\/path\/in\/container<\/code> mount a volume; -v hostPath:containerPath<\/li>\n<\/ul>\n<p>That <code>docker run<\/code> string is a little long, and you may not want to type it each time you run your application.<\/p>\n<p>Docker Compose is an application templating tool that allows you to specify all of your applications configurations in a yaml file. Then, instead of running your application directly with Docker, you can simply run it with <code>docker-compose up<\/code>.<\/p>\n<p>A Rails container identical to the one we ran above with <code>docker run<\/code> will look like this with Docker Compose.<\/p>\n<pre class=\" brush:php\">web:\r\n  build: .\r\n  ports:\r\n3000:3000\r\n  volumes:\r\n\u2018local\/project\/path:\/var\/app\u2019<\/pre>\n<p>This instructs Docker to build the image from the Dockerfile in the directory, and it also specifies the port mapping and volume mounting rules just as in the previous <code>docker run<\/code> string. This application template is stored in a file called <code>docker-compose.yml<\/code>. Docker Compose is especially helpful when your application has more than one container.<\/p>\n<p>Let\u2019s create a Rails application with an external Postgres database container.<\/p>\n<pre class=\" brush:php\">db:\r\n  image: postgres\r\n\r\nweb:\r\n  build: .\r\n  ports: \r\n    - 3000:3000'\r\n  volumes:\r\n    - 'local\/project\/path:\/var\/app'\r\n  command: rails s -b '0.0.0.0'\r\n  links:\r\n    - db<\/pre>\n<p>Running <code>docker-compose up<\/code> will pull down the Postgres image and run it in a container, as well as run the Rails application (which we\u2019ve named \u2018web\u2019) in the same way as the previous examples.<\/p>\n<p>We\u2019ve also declared a dependency on the db container by the web container by specifying a link. This means that the web container will wait to run until the db container is running, and it also adds some special environment variables (like the IP address of the container running the database) and lines in the <code>\/etc\/hosts<\/code> file for the web container.<\/p>\n<blockquote><p>In this example, you\u2019ll still need to monkey with the database.yml file in the same way you would if you were running this outside of Docker container. You can see an example of this in the <a href=\"https:\/\/github.com\/rheinwein\/rails-demo-apps\/blob\/master\/app-with-postgres\/config\/database.yml\">GitHub repo<\/a>.<\/p><\/blockquote>\n<h2>Running One-off Tasks with Docker Compose<\/h2>\n<p>What happens when you\u2019re developing and need to run a task against one of your services running in a container? In the Rails world, a common example of this would be running a database migration.<\/p>\n<p>Luckily, you can use <code>docker-compose run<\/code> to execute one-off commands within a container. To run <code>rake db:migrate<\/code> in the Rails container, say <code>docker-compose run web rake db:migrate<\/code>. You\u2019ll see the migration running, and then you can continue on your merry way.<\/p>\n<p>Note that you can only run <code>docker-compose<\/code> commands in the directory with the corresponding docker-compose.yml file. To run the above command, you\u2019ll probably have to jump into a new terminal tab (and run <code>eval $(docker-machine env default)<\/code> if you\u2019re using Docker Toolbox).<\/p>\n<h2>Ship It!<\/h2>\n<p>If your application is running in a container, deploying it to production will involve building a new image and then distributing the new image to your hosts.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/2015\/06\/continuous-integration-and-delivery-with-docker.html\">Codeship supports Docker<\/a>, and you can learn more about it on our blog. Happy shipping!<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/blog.codeship.com\/using-docker-for-rails-development\/\">Using Docker for Rails Development<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a> Florian Motlik at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was happy to deliver a talk on using Docker for Rails development. Below is a condensed version of the talk, which covers an introduction to containerization and the Docker ecosystem, as well as some &hellip;<\/p>\n","protected":false},"author":128,"featured_media":4128,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[217,95],"class_list":["post-9523","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ruby","tag-docker","tag-rails"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using Docker for Rails Development - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Docker for Rails Development - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T10:11:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2015-12-16T10:18:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Laura Frank\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rhein_wein\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Laura Frank\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\"},\"author\":{\"name\":\"Laura Frank\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ab4262792c3d292207d7eb7091bfd904\"},\"headline\":\"Using Docker for Rails Development\",\"datePublished\":\"2015-12-16T10:11:33+00:00\",\"dateModified\":\"2015-12-16T10:18:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\"},\"wordCount\":1699,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg\",\"keywords\":[\"Docker\",\"Rails\"],\"articleSection\":[\"Ruby\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\",\"name\":\"Using Docker for Rails Development - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg\",\"datePublished\":\"2015-12-16T10:11:33+00:00\",\"dateModified\":\"2015-12-16T10:18:38+00:00\",\"description\":\"Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/ruby\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Using Docker for Rails Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ab4262792c3d292207d7eb7091bfd904\",\"name\":\"Laura Frank\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7fc126db94055d006ae1b1826d06b17c8e42125e8bb759b16316322dbeee5ec5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7fc126db94055d006ae1b1826d06b17c8e42125e8bb759b16316322dbeee5ec5?s=96&d=mm&r=g\",\"caption\":\"Laura Frank\"},\"description\":\"Laura Frank is an engineer at Codeship. She loves containers, Docker, Golang, Ruby, and beer, not necessarily in that order.\",\"sameAs\":[\"http:\/\/blog.codeship.com\/\",\"https:\/\/x.com\/rhein_wein\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/laura-frank\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Docker for Rails Development - Web Code Geeks - 2026","description":"Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/","og_locale":"en_US","og_type":"article","og_title":"Using Docker for Rails Development - Web Code Geeks - 2026","og_description":"Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was","og_url":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2015-12-16T10:11:33+00:00","article_modified_time":"2015-12-16T10:18:38+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg","type":"image\/jpeg"}],"author":"Laura Frank","twitter_card":"summary_large_image","twitter_creator":"@rhein_wein","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Laura Frank","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/"},"author":{"name":"Laura Frank","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ab4262792c3d292207d7eb7091bfd904"},"headline":"Using Docker for Rails Development","datePublished":"2015-12-16T10:11:33+00:00","dateModified":"2015-12-16T10:18:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/"},"wordCount":1699,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg","keywords":["Docker","Rails"],"articleSection":["Ruby"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/","url":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/","name":"Using Docker for Rails Development - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg","datePublished":"2015-12-16T10:11:33+00:00","dateModified":"2015-12-16T10:18:38+00:00","description":"Over the first weekend in October, more than two hundred developers gathered in Ghent for ArrrrCamp, a serious-yet-pirate-themed Ruby conference. I was","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2015\/04\/ruby-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/ruby\/using-docker-rails-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Ruby","item":"https:\/\/www.webcodegeeks.com\/category\/ruby\/"},{"@type":"ListItem","position":3,"name":"Using Docker for Rails Development"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/ab4262792c3d292207d7eb7091bfd904","name":"Laura Frank","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/7fc126db94055d006ae1b1826d06b17c8e42125e8bb759b16316322dbeee5ec5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7fc126db94055d006ae1b1826d06b17c8e42125e8bb759b16316322dbeee5ec5?s=96&d=mm&r=g","caption":"Laura Frank"},"description":"Laura Frank is an engineer at Codeship. She loves containers, Docker, Golang, Ruby, and beer, not necessarily in that order.","sameAs":["http:\/\/blog.codeship.com\/","https:\/\/x.com\/rhein_wein"],"url":"https:\/\/www.webcodegeeks.com\/author\/laura-frank\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/9523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/128"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=9523"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/9523\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/4128"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=9523"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=9523"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=9523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}