Skip to main content

Python type() Function

When learning Python, you will work with different types of data, such as numbers, text, decimal values, and Boolean values. Python provides several built-in functions to help you work with these data types. One of the most useful functions is the type() function . The type() function tells you the data type of a value or variable. It helps you understand what kind of data Python is working with and can make debugging your programs easier. For example, consider these variables: age = 20 price = 99.50 name = "Rahul" is_student = True Although all four variables store data, their data types are different. Python allows us to check these types using type() . Let's understand how it works with simple examples. 1. What Is the type() Function in Python? The type() function is a built-in Python function that returns information about the type of an object. In beginner-level programming, you can use it to check whether a value is an integer, a floating-point number, a string,...

Docker and Containerization in the PERN Stack

Introduction

In the previous article, we learned:

  • Frontend deployment

  • Backend hosting

  • Cloud PostgreSQL databases

  • Environment variables

  • Production builds

  • Domain configuration

  • CI/CD basics

Now it is time to move toward modern cloud-native development using:

Docker

Modern applications are often deployed using containers because they make applications:

  • Portable

  • Scalable

  • Consistent

  • Easier to deploy

In this article, we will learn:

  • What Docker is

  • What containers are

  • Docker images

  • Dockerfile

  • Docker Compose

  • Containerizing PERN applications

  • Multi-container architecture

  • Kubernetes basics


What is Docker?

Docker is a platform used to package applications into containers.


What is a Container?

A container is:

A lightweight isolated environment for running applications

It includes:

  • Application code

  • Dependencies

  • Libraries

  • Runtime environment


Why Containers are Important

Without containers:

  • Applications may work on one system

  • Fail on another system

This causes:

Environment Problems

Docker solves this issue.


Real-World Example

Suppose your application works on:

Windows

but fails on:

Linux Server

Docker ensures identical environments everywhere.


What is a Docker Image?

A Docker image is:

A blueprint for creating containers

It contains:

  • Application code

  • Packages

  • Configurations


What is a Docker Container?

A container is:

A running instance of a Docker image

Docker Workflow

Dockerfile
    ↓
Docker Image
    ↓
Docker Container

Installing Docker

Install Docker Desktop from:

Docker Official Website


Checking Docker Installation

Run:

docker --version

Example output:

Docker version 27.0.0

Understanding Dockerfile

A:

Dockerfile

contains instructions for creating Docker images.


Backend Dockerfile Example

Inside backend folder create:

Dockerfile

Example Dockerfile

FROM node:20

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 5000

CMD ["npm", "start"]

Understanding Dockerfile Instructions

InstructionPurpose
FROMBase image
WORKDIRWorking directory
COPYCopy files
RUNExecute commands
EXPOSEOpen port
CMDStart application

Understanding Base Images

FROM node:20

uses official Node.js image.


Building Docker Image

Run inside backend folder:

docker build -t pern-backend .

Understanding docker build

PartMeaning
docker buildBuild image
-tImage tag
pern-backendImage name
.Current directory

Running Docker Container

docker run -p 5000:5000 pern-backend

Understanding Port Mapping

-p 5000:5000

means:

Local Port : Container Port

Viewing Running Containers

docker ps

Stopping Containers

docker stop container_id

What is Docker Compose?

Docker Compose manages multiple containers together.


Why Docker Compose is Important

A PERN stack application needs:

  • React container

  • Express container

  • PostgreSQL container

Managing them individually becomes difficult.

Docker Compose solves this problem.


Creating docker-compose.yml

In project root:

docker-compose.yml

Example Docker Compose File

version: '3'

services:

  backend:

    build: ./server

    ports:
      - "5000:5000"

  frontend:

    build: ./client

    ports:
      - "3000:3000"

  database:

    image: postgres

    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: pern_app

    ports:
      - "5432:5432"

Understanding Services

ServicePurpose
backendExpress API
frontendReact app
databasePostgreSQL

Starting Docker Compose

Run:

docker-compose up

Running in Background

docker-compose up -d

Stopping Docker Compose

docker-compose down

Environment Variables in Docker

Docker Compose supports:

.env

files.

Example:

POSTGRES_PASSWORD=password123
JWT_SECRET=mysecret

Accessing Variables in Compose

environment:
  POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

Docker Volumes

Containers normally lose data after removal.

Volumes provide:

Persistent Storage

PostgreSQL Volume Example

volumes:
  - pgdata:/var/lib/postgresql/data

Why Volumes are Important

Without volumes:

  • Database data gets deleted

  • Uploaded files disappear


Named Volumes

volumes:
  pgdata:

Docker Networking

Docker Compose automatically creates internal networks.

Containers communicate using:

Service Names

Example Database Connection

Instead of:

localhost

use:

database

inside Docker containers.


Backend Database Example

host: 'database'

Multi-Container PERN Architecture

React Container
      ↓
Express Container
      ↓
PostgreSQL Container

Advantages of Docker

Portability

Runs identically everywhere.


Scalability

Easy to scale applications.


Consistency

Same environment for:

  • Developers

  • Testing

  • Production


Faster Deployment

Deployment becomes simpler.


What is Kubernetes?

Kubernetes manages large-scale containerized applications.


Why Kubernetes is Used

Kubernetes helps:

  • Scale containers

  • Handle failures

  • Load balance traffic

  • Manage deployments


Docker vs Kubernetes

DockerKubernetes
Creates containersManages containers
Single applicationLarge infrastructure

What is a Pod?

In Kubernetes:

Pod

is the smallest deployable unit.


Kubernetes Features

Kubernetes provides:

  • Auto scaling

  • Self-healing

  • Load balancing

  • Rolling updates


Real-World Companies Using Docker

Docker is used by:

  • Netflix

  • Spotify

  • PayPal

  • Amazon

  • Google


Common Beginner Mistakes

Not Using .dockerignore

Create:

.dockerignore

Example

node_modules
.env

Copying node_modules

Never copy:

node_modules

inside images.


Hardcoding Secrets

Use environment variables instead.


Using Large Images

Use smaller base images when possible.


Best Practices

Use Multi-Stage Builds

Reduces image size.


Keep Containers Small

Smaller containers:

  • Start faster

  • Use less memory


Use Docker Compose

For multi-container applications.


Use Volumes for Databases

Prevents data loss.


Real-World DevOps Workflow

Modern workflow:

Code
 ↓
GitHub
 ↓
CI/CD Pipeline
 ↓
Docker Build
 ↓
Cloud Deployment

Conclusion

You have now learned Docker and containerization in the PERN stack.

You learned:

  • Docker images

  • Containers

  • Dockerfile

  • Docker Compose

  • Multi-container architecture

  • Volumes

  • Networking

  • Kubernetes basics

Now your PERN stack applications are becoming cloud-native and production-ready.

Comments

Popular posts from this blog

Understanding Comments in Java: A Beginner’s Guide

When learning Java programming, one of the first concepts you’ll come across is comments . Comments may not affect how a program runs, but they play a crucial role in making code more understandable, readable, and maintainable. Let’s dive deeper into what comments are, why they’re important, and the different types of comments in Java. What are Comments in Java? A comment in Java is a piece of text written within a program that is ignored by the compiler . In other words, comments are notes for humans, not instructions for machines. They help developers explain the purpose of code, describe logic, or temporarily disable certain lines of code without deleting them. Why are Comments Important? 📌 Readability – Comments make code easier to understand for you and others. 📌 Maintenance – When you revisit your code after months, comments remind you what you were doing. 📌 Collaboration – In team projects, comments explain code to fellow developers. 📌 Debugging – You c...

Java Program to Check Voting Eligibility

In this program, we’ll take the user’s age as input and check whether the person is eligible to vote or not. In India, the minimum age required to vote is 18 years . 💻 Program Code // Java Program to Check Voting Eligibility import java.util.Scanner; public class VotingEligibility { public static void main(String[] args) { // Create Scanner object to take input from user Scanner sc = new Scanner(System.in); // Ask user to enter age System.out.print("Enter your age: "); int age = sc.nextInt(); // Check eligibility if (age >= 18) { System.out.println("You are eligible to vote."); } else { System.out.println("You are not eligible to vote yet."); System.out.println("You can vote after " + (18 - age) + " year(s)."); } sc.close(); // Close the scanner } } 🧠 Explanation import java.util.Scanner; → Imp...

Java Program to Calculate Total Marks and Average of Five Subjects

💡 Program Explanation In this program: The user will input marks of five subjects . The program will calculate the total marks and average . It will then display both results clearly. 🧑‍💻 Java Code: // Java Program to Calculate Total Marks and Average of Five Subjects import java.util.Scanner; // Importing Scanner class for user input public class TotalAndAverage { public static void main(String[] args) { // Creating Scanner object to take input from user Scanner sc = new Scanner(System.in); // Declaring variables for five subjects double subject1, subject2, subject3, subject4, subject5; // Taking marks input for each subject System.out.print("Enter marks of Subject 1: "); subject1 = sc.nextDouble(); System.out.print("Enter marks of Subject 2: "); subject2 = sc.nextDouble(); System.out.print("Enter marks of Subject 3: "); subject3 = sc.nextDo...