DK

Docker Notes

Docker

Introduction
  • Docker is a configuration management tool highly sought after in DevOps roles. It streamlines the process of building, shipping, and running applications by using containerization.

  • The increasing demand for software services has significantly elevated the importance of DevOps jobs in the tech hiring landscape.

  • DevOps professionals require a broad range of technical skills, from Linux fundamentals to proficiency in DevOps tools like Docker, to ensure efficient software deployment and management.

Objectives
  • Understand the fundamental concepts of Docker.

  • Learn about the architectural components and design of Docker.

  • Grasp the major concepts and principles behind the Docker tool.

  • Identify which companies are leveraging Docker in their operations.

  • Execute basic Docker commands to gain hands-on experience.

What is Docker?
  • Docker is an open source software platform used to build, design, and manage applications through containerization.

  • It isolates applications from their environment, enabling seamless deployment across various environments using Docker containers.

  • Docker containers are executable software packages that include all dependencies (frameworks, libraries, etc.) required to execute an application consistently across different environments.

  • Docker facilitates faster code testing and reduces the time between writing and running code by leveraging containerization techniques.

  • Docker enables users to run code in almost any environment (local machine or cloud infrastructure) with minimal effort, ensuring portability and consistency.

  • Containers can be easily moved from one host to another without significant changes, simplifying deployment workflows.

Docker Architecture
  • Docker employs a client-server architecture to manage containers effectively.

  • The Docker daemon serves applications, handling actions such as creating, deploying, and shutting down containers.

  • The Docker client communicates with the daemon to manage its services, providing a user interface for interacting with Docker.

  • The client and server are integrated within the Docker Engine, which orchestrates container operations.

  • Docker Engine builds and executes containers using various Docker components, ensuring smooth operation and management.

Key Components
  • Docker Image: A template of instructions used to create containers.- It is a read-only blueprint used to build a container.

    • An image can contain components like Apache Tomcat or Kafka integrated with an Ubuntu operating system, providing a pre-configured environment.

    • Images can be easily added, updated, and shared, facilitating collaboration and standardization.

    • Images are built using a Dockerfile, which defines the steps to create the image.

    • Docker images consist of multiple layers, each representing a specific set of changes or instructions.

    • When a developer builds a container, a new Docker layer is automatically created on top of the image layers, known as the container layer.

    • Docker provides a separate read/write layer to each container, allowing modifications without affecting the underlying image.

    • Changes made to a container are reflected only on its specific container layer, ensuring isolation and consistency.

  • Docker Registry: A service to host and distribute Docker images among users.- A repository is a collection of Docker images, organized for easy access and management.

    • Users can distinguish between Docker images by using their tag names, enabling version control and identification.

    • Docker offers its own cloud-based registry called Docker Hub, providing a public repository for sharing Docker images.

    • Docker Hub allows users to store and distribute container images, facilitating collaboration and community contributions.

    • Docker registries can be configured as public or private, depending on the access control requirements.

    • push and pull commands are used to interact with Docker images in the registry, enabling seamless image management.- push command: Stores a Docker image in the Docker registry, making it available for others to use.

      • pull command: Retrieves an image from the Docker registry, allowing users to create containers from existing images.

    • A Docker registry is a storage and content delivery service that holds Docker images in different versions, ensuring version control and reproducibility.

    • Docker workflow involves a sequence of actions on registries, images, and containers, streamlining the application lifecycle.

    • It enables developers to create containers based on customized images pulled from a registry and deployed/run on a host server, ensuring consistency and portability.

Who Uses Docker?
  • Docker is frequently preferred over virtual machines due to its increased running capacity, lower overhead, and faster startup times.

  • Gartner predicts that by 2023, more than 50% of companies will adopt Docker containers in production, showcasing its growing adoption and importance.

  • The revenue from serverless containers like Docker is expected to increase from 465,000,000 in 2020 to 944,000,000 in 2024, highlighting its economic impact.

Companies Using Docker
  • Spotify, Yelp, ADB, eBay, Expedia, Groupon, BBC, Facebook, LinkedIn, The New York Times, Oxford University Press, PayPal, Sage, and Shopify are among the companies using Docker.

  • Expedia:- Runs more than 9,000 Docker containers in AWS ECS service, demonstrating its scalability and reliability.

    • Chose Docker to speed up the building and deploying process of applications, improving development and deployment cycles.

    • Benefits from Docker components like Docker Registry and Docker Swarm, enhancing its container management capabilities.

Docker Demo
  • The typical workflow:

    • Create a Dockerfile for each component of the application, defining the environment and dependencies.

    • Create containers and execute the required commands to set up and run the application within the containers.

    • Test, share, and deploy the containerized application across different environments seamlessly.

  • Initial steps:

    • Create a Dockerfile that specifies the application’s dependencies and configuration.

    • Build a Docker image from the source code and Dockerfile, creating a reusable package.

    • Ensure the containers launched from those images work correctly, validating the setup and configuration.

  • Commands:

    • First it can be verified if any docker images exist using the command docker images.

    • To create a new docker image, execute the command docker build -t <image_name> .. Please note that this downloading process may take a while.

    • A list of docker images will be displayed by running the command docker images again.

    • To delete a docker image use docker rmi <image_name>. Example: docker rmi simplylearn.

    • To remove an image like Ubuntu, run docker image rm ubuntu after identifying its image ID using docker images.

    • Pull Jenkins from Docker Hub using the command docker pull jenkins:latest; then use docker images to verify the download.

    • Create a container using docker create --name jenkins_container jenkins.

    • View the status of containers using docker ps -a to see all containers, including stopped ones.

    • Start a container with docker start <container_id>. Example: docker start tender_napier, where tender_napier is the container ID.

    • Run a container with docker run -d -p 8080:8080 jenkins, which runs the container in detached mode and maps port 8080.