Docker: What is it? How can it be used in Testing?
Everyone's talking about Docker now a days! There are plenty of
use cases it has in various different areas of technology domain.
First let's get to
know what Docker is!
Docker is a
container virtualization technology, which does not require any hypervisor to
run it. Strange, isn't it? Well, not really… here is how it works!
Docker relies on
Linux Containers (a.k.a. LXC), which is a pretty old implementation of
container technology. LXC uses two of the Linux Kernel capabilities:
i) Cgroups
ii) Namespaces
Cgroups enables the
system resource allocation, isolation; such as Memory and CPU etc. while
Namespaces let each of the container to run in an isolated space with its
process isolation capability, without interfering with other containers on the
same system. The result - You can run
large number of containers on your system. The only limiting factor will be
your host system's resources!
Now what makes
Container Virtualization differ from Virtual Machines or Desktop/Server
Virtualization?
There is a big
difference… virtual machines are *thicker* in a sense they run an entire
Operating System of some type (Windows/Linux etc.) and have a large disk foot
print on your storage. The licensing and other factors will further add to the
TCO. In comparison, container images are *thinner* as they are minimalist
version of Operating System (only Linux as of today) and does not have a large
footprint on your disk storage. Another advantage with container is; you can
spin-up one in less than 10 mins (if the image is to be downloaded from Docker
Hub) and if the image is already cached locally, it will take hardly few
seconds to start one.
Isn't it amazing!
So how can we use
Docker containers in testing?
I could think of
following usecases; however am sure there will lot more…
Usecase #1: To create dedicated test
environment for everyone in your team
Use
Dockerfile to define base image, environment and applications you want to run
in a container and repeat the same for all your application dependencies such
as Database server, Web server et al. Now build containers out of those
Dockerfiles and run them all. You can build and run as many containers as your
team needs. Happy testing to everyone!
Usecase #2: Test your application in different
environments, but on a single host
Production
deployments for your application may significantly be different than test
environments. Use Docker to spin-up containers each having a different set of
configuration parameters, environment variables etc and test your application
in that *special kind of* environment. Best part is, you can spin-up, tear-down
and change & spin-up this environment as many times as you want.
Usecase #3: Build a scalability test framework
Docker
as you now know, has its own resources including filesystem, TCP/IP stack etc.
Assume you are testing a Storage array, a NAS box may be. The goal of your
testing is to scale-up number of SMB or NFS connections and test your Storage
array's performance and stability. Docker's your buddy here! Build some
automation to spin-up containers, do mount operations and some IO on remote
shares and you are up for the protocol connection scale test.
What other use cases
you can think of for Docker in Software Testing?
Happy Testing!
Hi Shirish,
ReplyDeleteQuestion - Can Docker be used for service virtulization? like Dev Test from CA implements it.
Hi Murali, I think Docker can be used *with* the Service Virtualization applications. Like any other virtualization that you will have in your test environment; Docker containers should be customizable to consume the backend applications provided by the Service Virtualization application. However, one thing to note here; containers can be only Linux as of today; while Windows support will be there in 2016.
ReplyDeletegot it - thanks Shrish - so what I understand is that rather than creating a stub like CA Dev Test does, we can create an service application so to say.
ReplyDeleteNice article Shrish !!
ReplyDelete