Add docker roadmap

This commit is contained in:
Kamran Ahmed
2025-05-29 20:05:19 +01:00
parent 19be07817d
commit 3eaeb7ff9e
57 changed files with 104 additions and 68 deletions
@@ -1,6 +1,6 @@
# Bare Metal vs VM vs Containers
Bare metal is a term used to describe a computer that is running directly on the hardware without any virtualization. This is the most performant way to run an application, but it is also the least flexible. You can only run one application per server, and you cannot easily move the application to another server. Virtual machines (VMs) are a way to run multiple applications on a single server. Each VM runs on top of a **hypervisor**, which is a piece of software that emulates the hardware of a computer. The hypervisor allows you to run multiple operating systems on a single server, and it also provides isolation between applications running on different VMs. Containers are a way to run multiple applications on a single server without the overhead of a hypervisor. Each container runs on top of a **container engine** (software that manages the lifecycle of containers), which oversees and isolates processes using the host operating system’s kernel features.
Bare metal is a term used to describe a computer that is running directly on the hardware without any virtualization. This is the most performant way to run an application, but it is also the least flexible. You can only run one application per server, and you cannot easily move the application to another server. Virtual machines (VMs) are a way to run multiple applications on a single server. Each VM runs on top of a **hypervisor**, which is a piece of software that emulates the hardware of a computer. The hypervisor allows you to run multiple operating systems on a single server, and it also provides isolation between applications running on different VMs. Containers are a way to run multiple applications on a single server without the overhead of a hypervisor. Each container runs on top of a **container engine** (software that manages the lifecycle of containers), which oversees and isolates processes using the host operating system's kernel features.
You can learn more from the following resources:
@@ -1,28 +1,28 @@
# Docker Basics
Docker is a platform that simplifies the process of building, packaging, and deploying applications in lightweight, portable containers. In this section, we'll cover the basics of Docker, its components, and key commands you'll need to get started.
## What is a Container?
A container is a lightweight, standalone, and executable software package that includes all the dependencies (libraries, binaries, and configuration files) required to run an application. Containers isolate applications from their environment, ensuring they work consistently across different systems.
## Docker Components
There are three key components in the Docker ecosystem:
- **Dockerfile**: A text file containing instructions (commands) to build a Docker image.
- **Docker Image**: A snapshot of a container, created from a Dockerfile. Images are stored in a registry, like Docker Hub, and can be pulled or pushed to the registry.
- **Docker Container**: A running instance of a Docker image.
## Docker Commands
Below are some essential Docker commands you'll use frequently:
- `docker pull <image>`: Download an image from a registry, like Docker Hub.
- `docker build -t <image_name> <path>`: Build an image from a Dockerfile, where `<path>` is the directory containing the Dockerfile.
- `docker image ls`: List all images available on your local machine.
- `docker run -d -p <host_port>:<container_port> --name <container_name> <image>`: Run a container from an image, mapping host ports to container ports.
- `docker container ls`: List all running containers.
- `docker container stop <container>`: Stop a running container.
- `docker container rm <container>`: Remove a stopped container.
- `docker image rm <image>`: Remove an image from your local machine.
# Docker Basics
Docker is a platform that simplifies the process of building, packaging, and deploying applications in lightweight, portable containers. In this section, we'll cover the basics of Docker, its components, and key commands you'll need to get started.
## What is a Container?
A container is a lightweight, standalone, and executable software package that includes all the dependencies (libraries, binaries, and configuration files) required to run an application. Containers isolate applications from their environment, ensuring they work consistently across different systems.
## Docker Components
There are three key components in the Docker ecosystem:
- **Dockerfile**: A text file containing instructions (commands) to build a Docker image.
- **Docker Image**: A snapshot of a container, created from a Dockerfile. Images are stored in a registry, like Docker Hub, and can be pulled or pushed to the registry.
- **Docker Container**: A running instance of a Docker image.
## Docker Commands
Below are some essential Docker commands you'll use frequently:
- `docker pull <image>`: Download an image from a registry, like Docker Hub.
- `docker build -t <image_name> <path>`: Build an image from a Dockerfile, where `<path>` is the directory containing the Dockerfile.
- `docker image ls`: List all images available on your local machine.
- `docker run -d -p <host_port>:<container_port> --name <container_name> <image>`: Run a container from an image, mapping host ports to container ports.
- `docker container ls`: List all running containers.
- `docker container stop <container>`: Stop a running container.
- `docker container rm <container>`: Remove a stopped container.
- `docker image rm <image>`: Remove an image from your local machine.
@@ -1,6 +1,6 @@
# Bind Mounts
Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its absolute path on the host machine. By contrast, when you use a volume, a new directory is created within Docker’s storage directory on the host machine, and Docker manages that directory’s contents.
Bind mounts have limited functionality compared to volumes. When you use a bind mount, a file or directory on the host machine is mounted into a container. The file or directory is referenced by its absolute path on the host machine. By contrast, when you use a volume, a new directory is created within Docker's storage directory on the host machine, and Docker manages that directory's contents.
Visit the following resources to learn more:
@@ -6,4 +6,4 @@ Visit the following resources to learn more:
- [@official@Control Groups](https://www.docker.com/resources/what-container/#control-groups)
- [@article@Control Groups - Medium](https://medium.com/@furkan.turkal/how-does-docker-actually-work-the-hard-way-a-technical-deep-diving-c5b8ea2f0422)
- [@video@An introduction to cgroups, runc & containerD](https://www.youtube.com/watch?v=u1LeMndEk70)
- [@video@An introduction to cgroups, runc & containerD](https://www.youtube.com/watch?v=u1LeMndEk70)
@@ -1,8 +0,0 @@
# Docker Volumes
Docker volumes are persistent storage solutions used to manage and store data outside the container’s filesystem, ensuring data remains intact even if the container is deleted or recreated. They are ideal for storing application data, logs, and configuration files that need to persist across container restarts and updates. With the Docker CLI, you can create and manage volumes using commands like `docker volume create` to define a new volume, `docker volume ls` to list all volumes, and `docker run -v` to mount a volume to a specific container. This approach helps maintain data integrity, simplifies backup processes, and supports data sharing between containers, making volumes a core part of stateful containerized applications.
Visit the following resources to learn more:
- [@official@Docker Volumes](https://docs.docker.com/storage/volumes/)
- [@official@Docker Volume Commands](https://docs.docker.com/engine/reference/commandline/volume/)
@@ -5,4 +5,4 @@ When building container images, Docker caches the newly created layers. These la
Visit the following resources to learn more:
- [@official@Docker Layer Caching](https://docs.docker.com/build/cache/)
- [@video@Layer Caching](https://www.youtube.com/watch?v=_nMpndIyaBU)
- [@video@Layer Caching](https://www.youtube.com/watch?v=_nMpndIyaBU)
@@ -4,5 +4,5 @@ Docker images are lightweight, standalone, and executable software packages that
Learn more from the following resources:
- [@article@What’s the Difference Between Docker Images and Containers?](https://aws.amazon.com/compare/the-difference-between-docker-images-and-containers/)
- [@video@What is an image?](https://www.youtube.com/watch?v=NyvT9REqLe4)
- [@article@What's the Difference Between Docker Images and Containers?](https://aws.amazon.com/compare/the-difference-between-docker-images-and-containers/)
- [@video@What is an image?](https://www.youtube.com/watch?v=NyvT9REqLe4)
@@ -1 +0,0 @@
@@ -1,24 +0,0 @@
# Underlying Technologies
Understanding the core technologies that power Docker will provide you with a deeper insight into how Docker works and will help you use the platform more effectively.
## Linux Containers (LXC)
Linux Containers (LXC) enables running multiple independent Linux systems on a single computer. Acting as isolated spaces, LXC containers share host resources like memory and processing power, without needing their own full operating system copy, ensuring lightweight and fast startup.
## Control Groups (cgroups)
Control Groups (cgroups) is a Linux kernel feature that allows the allocation and management of resources like CPU, memory, and I/O to a set of processes.
## Union File Systems (UnionFS)
UnionFS is a file system service that allows the overlaying of multiple file systems in a single, unified view.
## Namespaces
Namespaces are another Linux kernel feature that provides process isolation.
Visit the following resources to learn more:
- [@official@Underlying Technologies](https://www.docker.com/resources/what-container/#underlying-technologies)
- [@article@Underlying Technologies - Medium](https://medium.com/@furkan.turkal/how-does-docker-actually-work-the-hard-way-a-technical-deep-diving-c5b8ea2f0422)
@@ -0,0 +1,6 @@
# Underlying Technologies
Visit the following resources to learn more:
- [@official@Underlying Technologies](https://www.docker.com/resources/what-container/#underlying-technologies)
- [@article@Underlying Technologies - Medium](https://medium.com/@furkan.turkal/how-does-docker-actually-work-the-hard-way-a-technical-deep-diving-c5b8ea2f0422)
@@ -0,0 +1,8 @@
# Docker Volumes
Docker volumes are persistent storage solutions used to manage and store data outside the container's filesystem, ensuring data remains intact even if the container is deleted or recreated. They are ideal for storing application data, logs, and configuration files that need to persist across container restarts and updates. With the Docker CLI, you can create and manage volumes using commands like `docker volume create` to define a new volume, `docker volume ls` to list all volumes, and `docker run -v` to mount a volume to a specific container. This approach helps maintain data integrity, simplifies backup processes, and supports data sharing between containers, making volumes a core part of stateful containerized applications.
Visit the following resources to learn more:
- [@official@Docker Volumes](https://docs.docker.com/storage/volumes/)
- [@official@Docker Volume Commands](https://docs.docker.com/engine/reference/commandline/volume/)
+2 -1
View File
@@ -2,6 +2,7 @@
jsonUrl: '/jsons/roadmaps/docker.json'
pdfUrl: '/pdfs/roadmaps/docker.pdf'
order: 14
renderer: 'editor'
briefTitle: 'Docker'
briefDescription: 'Step by step guide to learning Docker in 2025'
title: 'Docker Roadmap'
@@ -10,7 +11,7 @@ isNew: false
hasTopics: true
dimensions:
width: 968
height: 1808.98
height: 1830
schema:
headline: 'Docker Roadmap'
description: 'Learn how to use Docker with this interactive step by step guide in 2025. We also have resources and short descriptions attached to the roadmap items so you can get everything you want to learn in one place.'
@@ -0,0 +1,53 @@
{
"introduction": "Py9nst2FDJ1_hoXeX_qSF",
"introduction:what-are-containers": "74JxgfJ_1qmVNZ_QRp9Ne",
"introduction:need-for-containers": "i4ijY3T5gLgNz0XqRipXe",
"introduction:bare-metal-vm-containers": "3hatcMVLDbMuz73uTx-9P",
"introduction:docker-and-oci": "43drPbTwPqJQPyzwYUdBT",
"underlying-technologies": "jrH1qE6EnFXL4fTyYU8gR",
"underlying-technologies:namespaces": "BvV8VCX39wRB-g8WvGF1g",
"underlying-technologies:cgroups": "fRl4EfNwlBiidzn3IV34-",
"underlying-technologies:union-filesystems": "vEUfw_vobshuZI0-q8RZo",
"installation-setup": "01nDXqxVdMv4SeXc0nYHH",
"installation-setup:docker-desktop": "NCdsPRhJy7UtQFNLo1J1f",
"installation-setup:docker-engine": "0NKqLUWtJMlXn-m6wpA6f",
"docker-basics": "kIqx7Inf50mE9W0juwNBz",
"data-persistence": "uUPYXmwu27SBPqKZx6U_q",
"data-persistence:ephemeral-container-fs": "086zZYjtzdCaDHm-MkSqg",
"data-persistence:volume-mounts": "woemCQmWTR-hIoWAci3d5",
"data-persistence:bind-mounts": "wZcCW1ojGzUakHCv2AaI1",
"using-third-party-images": "LShK3-1EGGuXnEvdScFR7",
"using-third-party-images:databases": "jKSE_wKYf4P9wnSh_LkMi",
"using-third-party-images:interactive-test-environments": "HlTxLqKNFMhghtKF6AcWu",
"using-third-party-images:command-line-utilities": "YzpB7rgSR4ueQRLa0bRWa",
"building-container-images": "5OEfBQaYNOCi999x6QUqW",
"building-container-images:dockerfiles": "yGRQcx64S-yBGEoOeMc55",
"building-container-images:efficient-layer-caching": "frshJqVMP8D7o_7tMZMPI",
"building-container-images:image-size-and-security": "-8wAzF6_3gruiM3VYMvB0",
"container-registries": "3VKPiMfbGBxv9m_SljIQV",
"container-registries:dockerhub": "rxVR62_yXIjc-L4GFSV6u",
"container-registries:dockerhub-alt": "fh5aERX7c-lY9FPsmftoF",
"container-registries:image-tagging-best-practices": "Vs4WQwgJFhA63U9Gf2ym0",
"running-containers": "z2eeBXPzo-diQ67Fcfyhc",
"running-containers:docker-run": "6eu5NRA1sJuaHTlHtNurc",
"running-containers:docker-compose": "jjA9E0J8N2frfeJCNtA1m",
"running-containers:runtime-config-options": "mAaEz-bwB5DLaBbOSYGMn",
"container-security": "78YFahP3Fg-c27reLkuK4",
"container-security:image-security": "M5UG-ZcyhBPbksZd0ZdNt",
"container-security:runtime-security": "vYug8kcwrMoWf8ft4UDNI",
"docker-cli": "b-LwyYiegbF0jIrn7HYRv",
"docker-cli:images": "3Nsg-F3wMKEzEsXw1MBZv",
"docker-cli:containers": "jhwe-xfVc-C7qy8YuS5dZ",
"docker-cli:volumes": "eHtVLB6v3h7hatJb-9cZK",
"docker-cli:networks": "w5QjzvOaciK2rotOkjvjQ",
"developer-experience": "hHXTth0ZP8O-iMGR9xfu9",
"developer-experience:hot-reloading": "4p5d3rzCHy4vjg2PRX-2k",
"developer-experience:debuggers": "LiAV9crrTHhLqeZhD25a2",
"developer-experience:tests": "Kmyo1_Mor9WHLkRhNShRZ",
"developer-experience:continuous-integration": "oyqw4tr-taZcxt5kREh1g",
"deploying-containers": "qXOGqORi3EdqwsP9Uhi9m",
"deploying-containers:paas-options": "PP_RRBo_pThe2mgf6xzMP",
"deploying-containers:kubernetes": "RqXpX2XabtHYVjgg1EZR_",
"deploying-containers:docker-swarm": "ks6PFN-0Z9zH7gtWaWgxz",
"deploying-containers:nomad": "r1eJZDZYouUjnGwAtRbyU"
}
+1
View File
@@ -116,6 +116,7 @@ export function clearMigratedRoadmapProgress(
'aspnet-core',
'java',
'cpp',
'docker',
];
if (!migratedRoadmaps.includes(resourceId)) {