Docker
Docker is an open-source platform that enables developers to automate the deployment of applications as portable, self-sufficient containers. These containers package an application with all its dependencies, libraries, and configuration files, ensuring it runs consistently across different environments from development to production. By leveraging operating system-level virtualization, Docker provides a lightweight alternative to traditional virtual machines, allowing for high density and rapid scaling of services.
Key Concepts
- Docker Image: A read-only template used to create containers. Images are built from a
Dockerfileand are often stored in registries like Docker Hub. - Docker Container: A runnable instance of a Docker image. Containers are isolated from each other and the host system, yet can communicate through defined network channels.
- Dockerfile: A text document containing all the commands a user could call on the command line to assemble an image.
- Docker Volume: A mechanism for persisting data generated by and used by Docker containers, managed by Docker independently of the container lifecycle.
- Docker Network: A subsystem that allows containers to communicate with each other and with the outside world.
Common Patterns or Tools
- Multi-Stage Builds: A technique used in Dockerfiles to optimize image size by using multiple
FROMstatements, copying only necessary artifacts from earlier stages to the final production image. - Docker Compose: A tool for defining and running multi-container Docker applications using a YAML file to configure services, networks, and volumes.
- Container Registry: Services like Docker Hub, Amazon ECR, or Google Container Registry used for storing and distributing Docker images.
- Base Images: Minimal operating system images (e.g., Alpine Linux) used to reduce the attack surface and footprint of the final container.