#begin

Quite some time ago I checked out this very short course on Docker. I’m using docker for a couple of projects but never really dived into it or studied it. I thought it would be useful to listen to some course in the background while working. It’s a four and a half hour course and it really covers all the basics. Maybe a bit too basic, but that’s fine since I was doing other things in the mean time.
The key learning for me in this course was the differences between the docker compose files. This make a lot more sense now. The course also comes with these study environments called labs. In such labs students can play around with a virtual docker system and test their knowledge. Really cool btw, yet I didn’t do any of them because I was just listening.

I want to write a short little blog about this course since our business subscription to won’t be renewed. We’re going to check out either Coursera or PluralSight now, switching things up a bit. Unfortunately I can not longer access my Udemy business account so I cannot check the content of the course, or even download the certificates I got. This sucks ass btw… I don’t understand why they wouldn’t allow me to login anymore to view my data. I understand I cannot access the courses anymore, but logging in just throws this large modal on the screen saying: “How you pay here voor!? Hier…”

So, I’m writing this blog in hindsight and probably wont be able to describe things as detailed as all the previous ones. But let’s see how far I get.

 

Section 1: Introduction

As with any course on Udemy, this one also starts with an introduction. It’s basically a high level description about what docker is exactly; explaining the transition from bare metal machines, to virtual machines, to containers. It also dives into installing docker on the different OS and even Docker Desktop.

 

Section 2: Docker Commands

As Docker mostly relies on an API delivered through a command line interface it comes with numerous commands. This section will dive into a couple of the basic ones like docker version, docker run, docker stop and docker kill. It provides true newbies with a general understanding of what docker’s basic capabilities are.

 

Section 3: Docker Run

Section three is all about the most important command docker provides and that’s of course, docker run. The docker run command comes in many different flavors as it can be augmented with a lot of arguments. In this section they show how you can pipe in and output through to a container. In many cases you absolutely have to do this because otherwise, docker will simply start your container and immediately close it because it’s done starting it. So if you do not pipe STDIN, SDTOUT or STDERR it closes. You can compare this with console applications you might write. If there is no console.readline() it will simply run the process and quit as soon as it reaches the last instruction. So keep an eye on this 🙂

 

Section 4: Docker Images

The next section is about Docker images. Docker images are basically pre-build or compiled snapshots of the environment you need. For example; A Ubuntu Linux distro with DotNet, Unity3D, GitLab Runner installed. So when you docker run this image, it will come with all of this included. Really awesome stuff right!?
The most interesting part of this section, which I didn’t know in detail since I never made an image myself, is the fact that these images are build as a layered architecture. Meaning; for the base layer you choose a OS, next you put DotNet, then Unity followed by what-ever. By creating this layered architecture, docker builds up this cache in order to speed op building new images. So if, in another image I want a Linux os with DotNet and unity but this time with Unity3D’s build server as well. I don’t have to rebuild the first three layers because Docker is intelligent enough to take that from the cache, and only rebuild the buildserver part. So, depending on how much you can reuse common docker layers, you can speed up building images.

 

Section 5: Docker Compose

Docker compose is a means to connect multiple docker containers together. For example; for a modern website you might have a front-end, back-end, database, search-engine, caching and an event-bus, because well, every derper needs an event-bus nowadays. With compose you are able to define how these containers aught to communicate like the network ports they are using etc.
The most interesting part here, which I kinda spoiled already is the fact that over the lifetime of dockers existence the docker compose yaml file format has seen some changes. So if you search stackoverflow for answers to that hard to solve question you have, you might see a solution being proposed in an older format of the compose file. I’ve had this as well! So in this part they discus the differences between these versions as well, how to read them, and how to convert one version to another. This was really helpful to me!

 

Section 6: Docker Registry

One of the coolest parts of Docker is it’s immense community. This community maintains a giant registry of pre-build containers. So do you need a container with a very specific Unity3D version in there? It’s on the registry somewhere. This registry is not just managed by community open source devs, but also by companies like Google, Amazon or Meta. So some containers are managed by the original companies that created the software in the first place.
In this section they will show you how to use the docker registry, and how to refer to your own private registry.

 

Section 7: Docker Engine, Storage and Networking

This section is kinda out of my mind. But I think this was all about how to properly connect containers through the docker compose configuration. So if your .NetCore app has a connection string to a database defined in your compose file, they show you how to access that. The same goes for network addresses and ports. You define them in the compose file and inject them into the applications (or containers) that use them. I can’t recall more about this section sadly enough.

 

Conclusion:

Well there are three more sections: “Docker on Mac & windows”, “Container Orchestration – Docker Swarm & Kubernetes” and they concluding arguments to this course.
The “Container Orchestration – Docker Swarm & Kubernetes” section explains how to scale Docker to match large scale applications automatically. So the “Orchestration” is done automatically as the load on the website increases and decreases. No manual actions are needed. They provide us with some very basic information about what Docker Swarm and Kubernetes are but don’t go in depth as it is far beyond the scope of this course.
My opinion then: Well, I really liked it. Even writing this blog most of the subjects returned to me haha. Which is good because it means I really learned something. The most important thing I learned, as I said, was the docker compose file formats. Really helpful information.
I would recommend this course to anyone who knows nothing or a bit about docker and simply wants to know a bit more. This course doesn’t go in depth, which is perfectly fine! So if you are a mere mortal Unity3D dev, who never ever needs to touch any docker shit yet still wants to know what the hell docker is; this is the course for you!

 

#end

01010010 01110101 01100010 01100101 01101110

Hey, sorry to bother you but you can subscribe to my blog here.

Never miss a blog post!

You have Successfully Subscribed!