How I learned Docker & DevOps
Brief Summary About Me
I don't come from a sophisticated background. Rather, I am self-taught from the ripe age of twelve in all technology and languages I practice. I seem to learn very effectively on my own, I've been working professionally for over 14 years.
Why I wanted to learn Docker & DevOps
I actually learned it from all the buzz and decided to get my hands on it. I had a few positions where I got into the thick of Docker as well. I found it is so much easier to manage a project without worrying about the Host OS when you can isolate your environment in the micro-containers so nicely.
How I approached learning Docker & DevOps
I am a fairly slow learner and it may be due to the fact that I am hungry to know as much as possible. I don't know everything about a topic, but I absorb as much as I can. I started by reading the Docker documentation which is quite good, but there are many things that will become tricky I will mention below.
My method of learning is always taking notes as I practice what I do. No matter what, I always make note, including code snippets and I, constantly come back to them. By doing this I am able to memorize things much more!
- My Perferred Note Taking App: Typora (Markdown Syntax)
- Synced with Dropbox / Google Drive.
Challenges I faced
I found the Docker CLI to have a plethora of options. It was tricky to get started as most of what you want to do is going to require flag arguments. Another difficult part is when you come to managing 10 or more containers at a time, you really have to stay consistent in your approach.
It was a bit difficult at first but once you get the hang of it I would say Docker is here to stay, it's absolutely amazing, and the Alpine OS base image at roughly 3MB is a fantastic start for a Node, PHP, or Python application. I would start with a single isolated environment before moving into microservices that have a Docker network in order to speak to eachother via another container such as NATS, RabbitMQ, Kafka, or something similar.
Docker Compose is very useful, especially for development environments. It helps you quickly attach all dependencies for a Container that may need a Database and it's own Application Container.
I would say the greatest pay off was getting my hands dirty, breaking things, reviewing the documents and hammering the CLI options into my brain. It took a month to learn, and about 2 more months to feel quite confident.
Lastly, when you get to clustering the go-to now is Kubernetes which seems a bit easier to use than Swarm. Some providers like GCE (Google Compute Engine) have this built in and require zero effort for this. I think it's good practice to learn an orchestration engine so that you are never tied to a vendor.
Tips and advice
Docker will certainly save many problems when it comes to upgrading your server and handling dependencies; Things will not break. There is a great sense of security, and this security is not artificial.
- Docker Providers
- Docker Hub akin to GitHub yet for Containers.
- Docker Cloud for auto Swarm Clustering
- Google and AWS provide their own solutions as well.
- Custom Management
- Rancher is an open source container management platform, web-based.
- Portainer is a simple container management tool, web-based.
- Kitematic is another UI tool.
- For beginners, if you use a GUI I would start with Portainer or Kitematic.
Final thoughts and next steps
I think Docker is probably the best tools developed in the past eight years, it's hard to briefly explain why it's so amazing -- trust me, it's worth the time invested!