In this course you will learn how to apply DevOps. Why DevOps? It is one of the most sought after skills in the IT industry. The average salary in the US is $105,000 per year (source: Glassdoor), up to an average of $146,000 in San Fransisco (source: Indeed).
The course is aimed at software engineers and system administrators that want to deliver better software. Other IT professionals can also take this course, but might have to do some extra research to understand some of the concepts.
You will learn how to improve the Software Development Lifecycle by applying techniques to improve software delivery. I will explain how to improve delivery using automation, configuration management, provisioning and deployment tools. I also cover newer tools like Docker and Kubernetes. Where possible I point you towards the best practices in the field.
The course is very practical. There is about 3 to 4 hours of lectures, but you want to try out everything yourself, which will add multiple hours of learning. If you get stuck with the technology while trying, there is support available. I will answer your messages on the message boards and we have a Facebook group where you can post questions.
February 2016 Updates:
- Added content about building tools like sbt and maven
- By popular demand: added more Docker content about the architecture, images, volumes, and networking
Course Introduction
This lecture explains how the course is structured and what the learning objectives are
Concepts
This lecture explains what exactly DevOps is.
Continuously deliver software in a DevOps organization by improving the Software Development Lifecycle (SDLC) and benefits of doing this
DevOps is a change of culture. It's also connected to the Lean Organization.
Version Control is a necessity. This lecture will explain how GIT works.
Overview of useful git commands
A demo showing you how to create a git repository, and use the git commands like git push, git pull, git checkout
Automation is a pillar of a DevOps enabled organization. In this lecture, I'll talk about automating tasks and saving the state (Configuration Management)
With Virtualization, Containerization, and the Cloud, provisioning has become a lot easier and faster. Getting provisioning right will help you to build a DevOps culture
Software delivery never stops, a little word about planning and monitoring
Step 1 - Provisioning
How to provision instances locally on your PC, on-premise, or using Cloud technologies.
Vagrant is great for provisioning of Virtual Machines for development and testing. In this lecture we see why.
A demo showing you how to use Vagrant
Step 2 - Automation and Configuration Management
What Configuration Management tools to use? Puppet, Salt, Chef, Ansible? I'll discuss the differences between Chef and Ansible in more detail.
An introduction to Ansible
Installing Ansible on your provisioned vagrant machine
A demo showing you how to install ansible on your vagrant virtual server
How to setup an Ansible playbook. We'll use an nginx playbook as an example
A demo of using the nginx playbook to set up a webserver, using vagrant.
We can invoke ansible immediately during the provisioning process of Vagrant. It's also possible to provision directly on Amazon AWS EC2 Virtual Servers.
A demo showing how to provision an AWS EC2 machine and immediately run an Ansible playbook on it. Requires Amazon AWS Account.
Ansible best practices: the use of Ansible roles.
More Ansible best practices
The Ansible directory layout you should create for Ansible playbooks
An introduction to Chef, an alternative for Ansible
An introduction to Chef
An introduction to Chef
A lecture on using Chef knife
A demo on using Chef knife
Using chef-server
Best practices in Chef: using Chef roles
A demo of using chef server with knife
A brief explanation about AWS Opsworks, which is Chef on Amazon AWS
Step 3 - Continuous Integration
An introduction to Continuous Integration: how to make sure the application being written is properly tested
Continuous Integration using Jenkins: an introduction and the installation of Jenkins on a Vagrant Virtual Machine
Using Jenkins with the Play! Framework. How to test and package a Scala / Java app
How to package applications. A comparison of sbt and maven
Building an app in Jenkins
A demonstration of building an app using Jenkins
How to automate testing using Jenkins
Using jenkins to package our application
A demo showing how to automate testing and package our Play! application
Step 4 - Deployments
After building and packaging, we need to deploy our application on our servers
Where to store our artifacts? An introduction to repository management to take care of our Debian packages
A demo showing how to use artifact storage and how to deploy our application
Step 5 - Continuous Monitoring
It doesn't stop when an application is deployed: Continous Monitoring
The Twelve Factor app
The Twelve Factor Application. The standard you should follow when developing applications on private or public cloud.
Containerization
From monolithic applications to Microservices
Docker, the missing piece to run microservices
A hello world demo using Docker
The difference between Virtual Machines and Containerization. Explains how isolation is applied in containers.
Docker Image Layers, Container Layer (Thin R/W Layer), Copy on write strategy
Docker Volumes, Docker Volumes Plugins, and using external storage with Docker using Flocker
Docker User Defined Networks, Bridged Networks and Overlay Networks
Docker Hub can be used as a Docker Repository for public and private images
Docker Compose for a multi-container setup
Docker compose demo with 1x nodeJS web container and 1x MySQL container
Provision Docker Hosts with Docker Machine
This demo shows how to provision docker containers in AWS using docker-machine
Docker Swarm can be used to cluster docker containers. This lecture provides an architecture overview and an example Swarm setup using Concul
A demo showing you how to setup a Docker Swarm cluster using Vagrant
Container Orchestration
Container Orchestration introduction: how to make sure we have a technology to manage all our containers
An explanation of Kubernetes to manage our containers
How to deploy containers using Kubernetes
A demo that shows how to deploy a NodeJS application using Kubernetes
Labs
A very practical challenge to bring your DevOps skills into practice!