Docker - robbiehume/CS-Notes GitHub Wiki
- Docker is a tool that allows developers, sys-admins etc. to easily deploy their applications in a sandbox (called containers) to run on the host operating system i.e. Linux
- The key benefit of Docker is that it allows users to package an application with all of its dependencies into a standardized unit for software development
- Unlike virtual machines, containers do not have high overhead and hence enable more efficient usage of the underlying system and resources
- Portability – A containerized application runs the same way regardless of where it's deployed (local machine, cloud, server)
- Isolation – Containers run independently from one another and from the host OS, reducing conflicts between dependencies
- Lightweight – Unlike virtual machines (VMs), containers share the host OS kernel, making them much faster and more resource-efficient
- Scalability – Works well with microservices architectures, allowing easy scaling of individual services
Common Use Cases
- Microservices: Run each service in a separate container
- Development Environments: Developers can work with the same stack across machines
- CI/CD Pipelines: Automate testing and deployment
- Cloud Deployments: Easily run applications in cloud environments
| Concept | Description | 
|---|---|
| Container | A lightweight, isolated environment for running applications | 
| Image | A snapshot of a container; contains the app and all dependencies | 
| Dockerfile | A script defining how an image is built (OS, libraries, commands, etc.) | 
| Registry | A storage for images (e.g., Docker Hub, AWS ECR, GitHub Container Registry) | 
| Volumes | Persistent storage for data shared between containers | 
| Network | Allows communication between containers | 
- 
Write a Dockerfile- Defines the environment for your application
 
- 
Build an Image
- 
docker build -t myapp .→ Converts theDockerfileinto an image
 
- 
- 
Run a Container from the Image
- 
docker run -d -p 8080:80 myapp→ Starts a container from the image, exposing it on port 8080
 
- 
- 
Share the Image
- 
docker push myapp→ Upload to a registry so others can use it
 
- 
- 
Deploy Anywhere
- Run the container on any system with Docker installed
 
| Feature | Docker (Containers) | Virtual Machines | 
|---|---|---|
| Size | Small (MBs) | Large (GBs) | 
| Startup Time | Seconds | Minutes | 
| Performance | Near-native speed | Slower | 
| Isolation | Shares OS Kernel | Full OS Isolation | 
| Portability | Highly portable | Less portable | 
- An image is a package/template used to create one or more containers
- Containers are running instances of images that are isolated and have their own environments and set of processes
- VMs are great at providing full process isolation for applications: there are very few ways a problem in the host operating system can affect the software running in the guest operating system, and vice-versa
- But this isolation comes at great cost — the computational overhead spent virtualizing hardware for a guest OS to use is substantial
 
- Containers take a different approach: by leveraging the low-level mechanics of the host operating system, containers provide most of the isolation of virtual machines at a fraction of the computing power
- There are already pre-built containers for common applications
- 
# Check Docker is installed docker --version # Pull an image from Docker Hub # Or it will automatically pull it when you do the run command for the first time docker pull nginx # List available images docker images # Creates a new container from an image and starts it in the background # To run in foreground (attached), remove -d docker run -d -p 8080:80 nginx # List running containers docker ps # Stop a container docker stop <container_id> # Starts an existing stopped container docker start # Remove a container docker rm <container_id> # Remove an image docker rmi <image_id> # View container logs docker logs <container_id> 
- 
Stop all running containers: docker stop $(docker ps -aq)
- 
Remove all containers: docker rm $(docker ps -aq)
- 
Remove all images: docker rmi $(docker images -aq)
- When providing an ID to a command, you just need the first ncharacters that make it unique compared to others
- 
Option Description -dRuns the container in detached mode (background) -itInteractive mode with a TTY (for CLI-based apps) --rmRemoves the container after it stops --name <name>Assigns a custom name to the container --restart=<policy>Defines the restart policy ( always,unless-stopped,on-failure)