Sharing Docker Containers across DevOps Environments

Docker provides a powerful tool for creating lightweight images and
containerized processes, but did you know it can make your development
environment part of the DevOps pipeline too? Whether you’re managing
tens of thousands of servers in the cloud or are a software engineer looking
to incorporate Docker containers into the software development life
cycle, this article has a little something for everyone with a passion
for Linux and Docker.

In this article, I describe how Docker containers flow
through the DevOps pipeline. I also cover some advanced DevOps
concepts (borrowed from object-oriented programming) on how to use
dependency injection and encapsulation to improve the DevOps process.
And finally, I show how containerization can be useful for the
development and testing process itself, rather than just as a
place to serve up an application after it’s written.

Introduction

Containers are hot in DevOps shops, and their benefits from an
operations and service delivery point of view have been covered well
elsewhere. If you want to build a Docker container or deploy a Docker
host, container or swarm, a lot of information is available.
However, very few articles talk about how to develop inside the Docker
containers that will be reused later in the DevOps pipeline, so that’s what
I focus on here.

**12282f1.png

Figure 1.
Stages a Docker Container Moves Through in a Typical DevOps
Pipeline

Container-Based Development Workflows

Two common workflows exist for developing software for use inside Docker
containers:

  1. Injecting development tools into an existing Docker container:
    this is the best option for sharing a consistent development environment
    with the same toolchain among multiple developers, and it can be used in
    conjunction with web-based development environments, such as Red Hat’s
    codenvy.com or dockerized IDEs like Eclipse Che.
  2. Bind-mounting a host directory onto the Docker container and using your
    existing development tools on the host:
    this is the simplest option, and it offers flexibility for developers
    to work with their own set of locally installed development tools.

Both workflows have advantages, but local mounting is inherently simpler. For
that reason, I focus on the mounting solution as “the simplest
thing that could possibly work” here.

How Docker Containers Move between Environments

A core tenet of DevOps is that the source code and runtimes that will be used
in production are the same as those used in development. In other words, the
most effective pipeline is one where the identical Docker image can be reused
for each stage of the pipeline.

**12282f2.png

Figure 2. Idealized Docker-Based DevOps Pipeline

Powered by WPeMatico