Bit of a powershell themed post this week as I haven’t had that much time to research so this one falls firmly into the “what I’ve been doing this week” category.
My company moved to using containers a while ago now, it’s been really fun setting up and I’ve written about the architecture and process (here)
But, so that you don’t have to click the above link, I’ll quickly recap what we’re doing now.
We use containers but aren’t on Windows Server 2016 or SQL Server 2016 so we’re using a product called Windocks that allows earlier versions of SQL Server to run in containers on earlier versions of Windows Server.
We have a physical host running the Windocks daemon and all our app VMs contact the host to build and reference SQL instances within containers. Each container is built from a custom image that contains stripped down versions of our production databases that we call baselines.
Each month (it’ll be more frequent soon) we update the custom image by: –
- Creating new baselines of our production databases from backups
- Committing those backups to TFS
- Deleting the old image from docker repository
- Building a new image from a dockerfile referencing those backups
- Committing the new image
What I’ve been working on is the automation of the new image once new baselines are checked into source control.
One of the requirements that’s come out of this is the ability to parse the docker images & docker ps commands.
These commands give you an overview of what’s on your docker host, the images you have in your repository and what containers you have (and what state they’re in).
What I needed to do was parse those commands so I could work out things like: –
- What images do we have available?
- What version are those images (when were they built)?
- What size are the images?
- How many containers have been built?
- When were the containers built?
- What state are the containers in?
I needed to be able to gather this information and pass it into commands so that my scripts would be able to work out how to proceed. So I’ve written a bit of code in order to do just that.
This is a bit of a change for me, I usually just drop code into my posts but as it’s still a work in process, what I’ve done is create a GitHub account and uploaded the script. You can find it here: – https://github.com/dbafromthecold/parsedockercommands
Really simple to use, just change the variables at the top to your environment and you’re off. The only slightly tricky bit is making sure that your docker engine is configured for remote administration but I’ve also fully detailed how to set that up here.
What you’ll end up with is two arrays holding details of all the images and containers on your host which you can then use for, well, whatever!
There’s probably better ways of doing this but it’s always fun to work out how to do this yourself. I’m more than open to suggestions on how to improve the script so let me know if you have anything.
Thanks for reading!