I am learning about Docker and I am inviting you to come along.
WHAT IS DOCKER?
Docker is a way to containerize applications so that they can run in an isolated, protected environment. The containers are portable. They can run on Windows, Mac or Linux*. You can test out a container on your laptop and then you can deploy it on your big iron server or a desktop or in the cloud for example at Amazon or Rackspace. or even Azure. You can set up a container to run one test and when you are done with it, you just delete it.
WHAT IS IT FOR?
I can put a docker containing nginx on my laptop, experiment with Web apps, then move the whole thing to the cloud.
I put services into dockers. Then I can upgrade or change the system running the dockers and it has no effect on them. Likewise I can upgrade a docker without touching the host system.
I can run a CentOS based docker on an Ubuntu server or I can run an Ubuntu server on Azure.
Each docker container runs one service. So in the case of ArcGIS, there will be one container for Portal, another for ArcGIS Server, another for Web Adaptor, and so on. If I want to configure one ArcGIS Server as an Image server I will put it in a separate container. If I want to test HA deployments I can run multiple containers on one physical machine, or I can spread them out over several machines.
Docker is for testing.
Docker is for deployment.
DOCKER IS NOT VIRTUAL MACHINES
Docker is lightweight and FAST. The first time I started a docker on Ubuntu, I was amazed.
When you start a VM, even on a fast machine, first you wait for it to boot, then you connect to it and launch your application(s) and wait for them to start. With Docker, your app just STARTS. You are directly launching your app in its own environment, not in a virtual machine*, so it starts up fast, and it is lighter on resources than a virtual machine; after starting a Docker, look at your process table; the app will be there. You get (most of) the benefits of isolation that come with VMS but without so much overhead. If your app can run on a laptop, then it can run in a Docker container on a laptop.
BUT I NEED MORE RAM
For the first time in years, I find myself opening the System Monitor and watching the bars for RAM and SWAP climbing up. 16 GB is no longer enough for what I am doing here. Fortunately there is a fix for this. Get more RAM!
MY FIRST STEPS
First I played around with Docker itself a bit, pulling containers and launching them; for many applications, this is all you need to do. But then I found to use ArcGIS I needed to build my own containers.
ARCGIS IN DOCKER
I want to be able test the ArcGIS Enterprise suite in a consistent and repeatable way, so I can learn everything there is to know about it. For me, this means I need to be able to install and reconfigure it 20 times a day if I need to. Docker gives me this ability.
I dove into the deep end and started "dockerizing" ArcGIS Enterprise, one component at a time.
I created this github project to capture my work and share it with you.
I have it MOSTLY working with the "minor" exception that I have to rebuild the nest of containers each time I restart; data is not being persisted correctly yet.
Maybe ArcGIS in Docker will arrive through official channels one day but for now, I have to do this on my own.
BACK ONE STEP
I decided I had learned enough at this point to prove to myself that it's completely possible to run the suite of ESRI ArcGIS Enterprise products in Docker containers. But I am not comfortable enough with Docker itself yet to push forward, so right now I am putting other infrastructure that I rely on into Dockers to climb higher up on the learning curve hockey stick.
I put up a Timemachine docker to back up my Macs, a Logitech Media Server docker to handle my media, and today I am moving my ownCloud storage system into a container. As soon as I have ownCloud under control I will be back on ArcGIS.
I SAID "FIRST STEPS"
Maybe half of what I've said here is wrong! But it's my beginner idea of how Docker works.
Please send lots of encouraging positive feedback if you want me to continue blogging about Docker and ArcGIS!
* I suggest you run Docker on Linux or Mac, if it's an option. On a Windows system, Docker runs inside a Linux virtual machine so you lose some of the advantages. EMBRACE LINUX! You probably already use it on a phone or a TV and don't even know it.
You can still run any docker container on any computer but the experience will be best on Linux!