Examine the evolution of virtualization technologies from bare metal, virtual machines, and containers and the tradeoffs between them.
Explores the three core Linux features that enable containers to function (cgroups, namespaces, and union filesystems), as well as the architecture of the Docker components.
Install and configure Docker Desktop
Use publicly available container images in your developer workflows and learn how about container data persistence.
Building out a realistic microservice application to containerize.
Write and optimize Dockerfiles and build container images for the components of the example web app.
Use container registries such as Dockerhub to share and distribute container images.
Use Docker and Docker Compose to run the containerized application from Module 5.
Learn best practices for container image and container runtime security.
Explore how to use Docker to interact with containers, container images, volumes, and networks.
Add tooling and configuration to enable improved developer experience when working with containers.
•Developer Experience Wishlist
Deploy containerized applications to production using a variety of approaches.
In this section, we explore the motivation behind containers, the history of virtualization technologies, and why containers have become the dominant development and deployment mechanism for software applications today.
Containers aim to address two main aspects of the software development lifecycle:
Historically, setting up a development environment involved complex and error-prone processes. Docker simplifies this by allowing developers to run a single command, docker-compose up, and have a compatible environment across Windows, Mac, and Linux systems.
Deploying applications used to involve several steps, such as creating a server, configuring dependencies, and copying the application code. Containers introduce a single standardized package, simplifying deployment by only requiring a container runtime and the container image.
Containers make both development and deployment processes simpler and more reliable. They help ensure that the local environment is as close as possible to the production environment, reducing the chances of errors when translating from local to production systems.