Docker for Beginners
Tags: docker, kubernetes, azure, tutorial
Published: 2024-03-01 10:14:37

## Introduction:

In today's fast-paced software development environment, deploying applications efficiently and securely is a top priority. Docker has emerged as a leading technology in this domain, offering a powerful solution for containers.

### What is Docker?
Docker is an open-source platform that allows developers to build, package, and deploy applications as lightweight, portable containers. This container contains all the dependencies and libraries necessary to run the application, ensuring consistency and reproducibility in different environments.

####  Key concepts:

1. **Container:** A container is a lightweight, self-contained, executable package that contains everything necessary to run a piece of software, including code, runtime, system tools, system libraries, and configuration. Docker containers are independent of each other and share the core of the host operating system, making them efficient and portable.

2. **Image:** Schema for docker image container. Read the only template that contains all the instructions needed to make the container. Images are created using Dockerfiles that define the environment and configuration required for the application.

3. **Dockerfile:** A Dockerfile is a text document that contains some instructions for building a Docker image. These instructions include setting up the base image, copying files to the image, setting environment variables, and running commands.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8j01tenq51wmkatg1slw.jpg)
4. **Registries:** Docker registries are repositories for Docker images. This allows users to save photos and share them with others. Docker Hub is the official public registry for Docker images, but users can also set up private registries for their organizations.

###  Getting Started:

1. **Installing Docker:** To start using Docker, you need to install Docker engine on your system. Docker provides installation instructions for several operating systems, including Windows, macOS, and Linux.

2. **Running your first container:** Once Docker is installed, you can run your first container with the docker run command. 
For example,
                   **docker run hello-world**
will download and run the **hello-world** image, providing a simple introduction to Docker.

3. **Build a Docker image:** To create a custom Docker image for your application, you need to write a Dockerfile. This file specifies the necessary configuration and dependencies for your application. Once the Dockerfile is created, you can build the image using the **docker build** command.

4. **Managing Containers:** To manage Docker containers, provide commands like **docker ps** to list running containers, **docker stop** to stop containers, and **docker rm** to remove containers. You can also check container logs using docker logs and execute commands inside running containers using docker exec.

Advance Topics:

1. **Docker Compose:** Docker Compose is a tool for defining and running multi-container Docker applications. It allows you to define multi-container applications in a single YAML file and manage the container lifetime with simple commands like docker-compose up and docker-compose down.

2. **Docker Swarm:** Docker Swarm is Docker's native clustering and orchestration tool. It allows you to create and manage clusters of Docker hosts, providing high availability and scalability for your applications.

3. **Docker Security:** Security is an important aspect of containerization. Docker provides features such as namespaces, control groups, and the ability to isolate containers from each other and from the host system. Additionally, you can implement best practices such as image scanning, minimum redundancy, and network segmentation to improve container security.


### Docker Basics cheat sheet

#### Setup and installation:
- **Installing Docker:** Follow the official installation instructions for your operating system.

- **Check the build:** After installation, run **docker --version** to make sure that Docker is installed correctly.

- **Starting Docker:** On most systems, Docker should start automatically after installation. If not, start using the appropriate command for your operating system.

#### Working with containers:

- **Get image:** **docker get <image_name>** to download image from registry.

- **Run the container:** **docker run <image_name>** to create and start the container.

- **List of running containers:** **docker ps** to see all running containers.

- **List all containers:** `docker ps -a` to list all containers, including cached ones.

- **Stop the container:** **docker stop <container_id>** to stop the container from running.

- **Start the stopped container:** **docker start <container_id>** to start the stopped container.

- **Remove a container:** `docker rm <container_id>` to remove a stopped container.

- **Remove a running container:** **docker rm -f <container_id>** to force remove a running container.

- **Check Container:** Check **docker <container_id>** to see detailed information about the container.

#### Work with images:

- **List of images: ** **docker images** to view all downloaded images.

- **Remove image:** **docker rmi <image_name>** to remove an image from your local Repository.

- **Build image:** **docker build -t <image_name> <path_to_dockerfile>** to build image from Dockerfile.

- **Tag an image:** `docker tag <image_id> <new_image_name> to tag an image for easy recognition'.

- **Push image:** **push docker <image_name>** to register the image.

#### Dockerfile:

- **Create a Dockerfile: ** Use a text editor to create a file called **Dockerfile** with instructions to build your image.

- **Define the base image:** Use the **FROM** statement to define the base image.

- **Copy files:** Use the **COPY** command to add files from your local directory to the image.

- **Set environment variables:** Use the **ENV** directive to set environment variables inside the container.

- **Run Commands:** Use the **RUN** command to execute commands during the image build process.

- **Expose ports:** Use the EXPOSE directive to specify which ports should be exposed to the container.

- **Set the default command:** Use the **CMD** command to set the default command to run when the container starts.

#### Docker type:

- **Define Services:** Create a **docker-compose.yml** file to define your application's services.

- **start services:** Run **docker-compose up** to start all services defined in the **docker-compose.yml** file.

- **service stop:** Run docker-compose below to stop all services and remove the associated containers.

#### Network:

- **Port mapping:** Use **-p** or **- deploy** flag with **docker running** to map ports between container and host.

- **Container System:** Docker provides a standard system that allows containers to communicate with each other using container names.

#### The results:
Docker has changed the way developers build, ship, and run applications. Using the power of containerization, Docker provides a consistent and secure environment for deploying software across different platforms.