abhilashthale.tech
  • Home
  • BlogCategories
    • coding
    • other
    • n
  • Images to Pdf
  • My Files
  • Shares Average
  • About Me
  • Server Stats
  • Day
  • Night
  • Birds
  • Waves
  • Net
  • Dots
  • Halo
  • Rings
  • Fog
  • Clouds

    Docker Basics

    by abhilashthale - March 12, 2026

    Day 1: Install Docker & Practice Container Commands

    Install Docker

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    sudo yum install -y docker-ce docker-ce-cli containerd.io
    sudo systemctl enable --now docker
    

    Add user to docker group

    sudo usermod -aG docker $USER
    

    Test docker

    docker run hello-world
    

    Run Docker with IPv4 only

    Create file:

    /etc/docker/daemon.json
    

    Add configuration:

    {
     "ipv6": false,
     "dns": ["8.8.8.8","1.1.1.1"]
    }
    

    Restart docker

    systemctl restart docker
    

    Verify

    docker run hello-world
    

    Docker Basics

    Pull Images

    docker pull nginx
    docker pull ubuntu
    docker pull mysql
    

    Run Container

    docker run -d --name mynginx -p 8080:80 nginx
    

    Explanation

    -d = run in background
    --name mynginx = container name
    -p 8080:80 = map container port 80 to host port 8080
    

    Enter Container

    docker exec -it mynginx bash
    

    Stop / Start Containers

    docker stop mynginx
    docker start mynginx
    docker restart mynginx
    

    View Logs

    docker logs mynginx
    docker logs -f mynginx
    

    Remove Containers

    docker stop mynginx
    docker rm mynginx
    

    Remove all stopped containers

    docker container prune
    

    Port Mapping Example

    docker run -d --name mynginx -p 8081:80 nginx
    

    Container port 80 → Host port 8081


    Volumes (Persistent Data)

    Create configuration file

    mkdir -p /data/docker
    touch /data/docker/my.cnf
    
    chown 999:999 /data/docker/my.cnf
    chmod 644 /data/docker/my.cnf
    

    Run MySQL container

    docker run -d \
    --name mydb \
    -e MYSQL_ROOT_PASSWORD=pass123 \
    -v /data/mysql:/var/lib/mysql \
    -v /data/docker/my.cnf:/etc/mysql/conf.d/my.cnf \
    -p 3306:3306 \
    mysql:latest
    

    Build Your Own Docker Image

    Create Dockerfile

    cat > Dockerfile <<EOF
    FROM mysql:8.0
    
    LABEL maintainer="you@example.com"
    
    COPY my.cnf /etc/mysql/conf.d/my.cnf
    
    RUN apt-get update && apt-get install -y \
        vim \
        net-tools \
     && apt-get clean
    EOF
    

    Useful Docker Commands

    docker images        # list images
    docker ps            # list containers
    docker stats         # container resource usage
    docker logs -f name  # view logs
    docker inspect name  # container config
    docker exec -it name bash  # enter container
    docker top name      # processes inside container
    docker system df     # disk usage
    

    Run Container With CPU & Memory Limits

    docker run -d \
    --name mydb5 \
    -e MYSQL_ROOT_PASSWORD=pass123 \
    -p 3308:3306 \
    --memory="1g" \
    --cpus="1.5" \
    mysql:8.0
    

    Verify limits

    docker inspect mydb5 | grep -i -E "memory|cpus"
    

    Live resource usage

    docker stats mydb5
    

    Check inside container

    docker exec -it mydb5 cat /sys/fs/cgroup/memory/memory.limit_in_bytes
    docker exec -it mydb5 cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
    docker exec -it mydb5 cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
    

    Restart Policies

    docker run -d \
    --name mydb10 \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=pass123 \
    -p 3310:3306 \
    mysql:latest
    

    Restart options

    no
    on-failure
    always
    unless-stopped
    

    Docker Networking

    Default network: bridge

    Create network

    docker network create mynet2
    docker network inspect mynet2
    

    Run container on network

    docker run -d \
    --name mydb12 \
    --restart=always \
    -e MYSQL_ROOT_PASSWORD=pass123 \
    -p 3312:3306 \
    --network mynet2 \
    mysql:latest
    

    Connect container to multiple networks

    docker network connect mynet mydb9
    docker network connect mynet1 mydb9
    docker network connect mynet2 mydb9
    docker network connect mynet3 mydb9
    

    Network types

    bridge   : containers on same host
    host     : use host network
    none     : isolated container
    overlay  : multi-host cluster networking
    

    Docker Health Checks

    Example

    docker run -d \
    --name web2 \
    --restart unless-stopped \
    --health-cmd="curl -f http://localhost:80 || exit 1" \
    --health-interval=30s \
    --health-retries=3 \
    --health-timeout=5s \
    nginx
    

    Exit codes

    0 = success
    1 = failure
    command missing = failure
    

    Copy Files From Container

    docker cp temp-tomcat:/usr/local/tomcat/conf /data/mytomcat
    

    Production MySQL Container Example

    docker run -d \
    --name mydb16v8 \
    -e MYSQL_ROOT_PASSWORD=pass123 \
    -e TZ="Asia/Kolkata" \
    --restart unless-stopped \
    --health-cmd="mysqladmin ping -h localhost -u root --password=pass123 || exit 1" \
    --health-interval=5s \
    --health-retries=5 \
    -v /data/mysql16v8:/var/lib/mysql \
    -v /data/docker/my.cnf:/etc/mysql/conf.d/my.cnf \
    -p 3316:3306 \
    --memory="1g" \
    --cpus="1.5" \
    --network mynet2 \
    my-mysql-image:8.0
    

    Deploy Tomcat With WAR

    docker run -d \
    --name tomcat3 \
    --restart unless-stopped \
    --health-cmd="curl -f http://localhost:8080 || exit 1" \
    --health-interval=30s \
    --health-retries=3 \
    --health-timeout=5s \
    -e TZ="Asia/Kolkata" \
    -e JAVA_OPTS="-Xms128m -Xmx256m -Duser.timezone=Asia/Kolkata" \
    -p 8083:8080 \
    --network mynet2 \
    -v /data/tomcat_docker/tomcat_common/warfile/log-api-1.0.war:/usr/local/tomcat/webapps/log-api-1.0.war \
    -v /data/tomcat_docker/tomcat3/logs:/usr/local/tomcat/logs \
    -v /data/tomcat_docker/tomcat_common/db_properties/db.properties:/usr/local/tomcat/conf/db.properties \
    tomcat:9.0.111-jdk8-corretto-al2
    

    Nginx Load Balancer Container

    docker run -d \
    --name nginxlb \
    --restart unless-stopped \
    --network mynet2 \
    -p 80:80 \
    -p 443:443 \
    -v /data/nginx-lb/nginx.conf:/etc/nginx/nginx.conf:ro \
    -v /data/nginx-lb/SSL:/etc/nginx/SSL:ro \
    -v /data/nginx-lb/logs:/var/log/nginx \
    --health-cmd="sh -c 'echo > /dev/tcp/127.0.0.1/80 || exit 1'" \
    --health-interval=30s \
    --health-retries=3 \
    --health-timeout=5s \
    -e TZ="Asia/Kolkata" \
    nginx:stable
    

    Test request

    curl -k "https://localhost:443/log-api-1.0/log?msgtext=thisistest4011116&status=ok"
    

    Docker Compose Basics

    Start containers

    docker compose up -d
    

    Stop containers

    docker compose down
    

    Rebuild containers

    docker compose up -d --build
    

    Force recreate

    docker compose up -d --force-recreate
    

abhilashthale.tech