Docker Fundamentals Sinhala Guide | Containers & VMs | Beginners

Docker Fundamentals Sinhala Guide | Containers & VMs | Beginners

කොහොමද යාලුවනේ! අපි Docker ගැන මුල ඉදන්ම ඉගෙන ගනිමු!

අද කාලේ Software Engineering ක්ෂේත්‍රයේ ඉන්න කෙනෙක්ට, විශේෂයෙන්ම DevOps, Cloud Computing පැත්තට යන්න හිතන කෙනෙක්ට, Docker කියන්නේ අනිවාර්යයෙන්ම දැනගෙන ඉන්න ඕන දෙයක්. මේක අලුත් දෙයක් නෙවෙයි, හැබැයි මේකේ බලය තාමත් ගොඩක් අය හරියට තේරුම් අරගෙන නැහැ. ඔයා Developer කෙනෙක්ද? එහෙම නැත්නම් System Administrator කෙනෙක්ද? මොන කෙනෙක් වුණත්, Docker ඔයාගේ වැඩ කටයුතු සෑහෙන්න පහසු කරනවා. එහෙනම්, අපි බලමු මේ Docker කියන්නේ මොකද්ද, මේකෙන් අපිට මොනවද කරන්න පුළුවන් කියලා, ලංකාවේ අපිට තේරෙන භාෂාවෙන්.

මේ tutorial එක අවසාන වෙනකොට, ඔයාට Docker කියන්නේ මොකක්ද, ඒක Virtual Machines (VMs) වලට වඩා වෙනස් වෙන්නේ කොහොමද, Docker එකේ ප්‍රධාන අංග මොනවද, ඒක install කරන්නේ කොහොමද, වගේම සාමාන්‍යයෙන් පාවිච්චි කරන Docker commands කිහිපයක් ගැනත් හොඳ අවබෝධයක් ලැබෙයි. එහෙනම්, අපි පටන් ගමු!

1. Docker යනු කුමක්ද? (What is Docker?)

සරලවම කිව්වොත්, Docker කියන්නේ applications ඉක්මනින් build කරන්න, ship කරන්න, සහ run කරන්න උදව් කරන platform එකක්. මේක අපේ applications සහ ඒවාට අවශ්‍ය කරන සියලුම දේවල් (dependencies, libraries, configurations) එක package එකක් විදිහට, ඒ කියන්නේ container එකක් විදිහට අසුරන්න පුළුවන් tool එකක්. හරියට අපි බඩු ටිකක් නැවක යවන්න කලින් shipping container එකකට දානවා වගේ වැඩක්.

මේ container එක ඕනම තැනක, ඕනම environment එකක (ඔයාගේ laptop එකේ, server එකක, cloud එකේ) කිසිම ගැටලුවකින් තොරව ධාවනය කරන්න පුළුවන්. “It works on my machine!” කියන ප්‍රශ්නෙට Docker හොඳම විසඳුමක්. මොකද, Docker container එකක් ඇතුලේ ඔයාගේ application එක ධාවනය වෙන environment එක හැම තැනම එකම විදිහට තියෙන නිසා.

Docker වල ප්‍රධාන වාසි:

  • Consistency (ස්ථාවරත්වය): Development, Testing, Production කියන හැම environment එකකම application එක එකම විදිහට ධාවනය වෙනවා.
  • Portability (පහසුවෙන් ගෙන යා හැකි වීම): ඔයාගේ application එක container එකකට දාපු ගමන්, ඒක Linux, Windows, Mac, Cloud ඕන තැනක ධාවනය කරන්න පුළුවන්.
  • Efficiency (කාර්යක්ෂමතාව): Containers, Virtual Machines (VMs) වලට වඩා සැහැල්ලුයි සහ වේගවත්.
  • Isolation (වෙන් කිරීම): හැම application එකක්ම තමන්ගේම container එකක් ඇතුලේ ධාවනය වෙන නිසා, එක application එකකින් තවත් application එකකට බලපෑමක් වෙන්නේ නැහැ.

2. Containers vs. Virtual Machines (VMs)

Docker containers ගැන කතා කරද්දී, Virtual Machines (VMs) ගැන කතා නොකරම බෑ. මේ දෙකම applications isolate කරන්න පාවිච්චි කරනවා වුණත්, ඒවා වැඩ කරන විදිහ සෑහෙන්න වෙනස්.

Virtual Machines (VMs)

Virtual Machine එකක් කියන්නේ සම්පූර්ණ operating system (OS) එකක් (උදා: Windows, Linux) hardware layer එක උඩින් Hypervisor (VMware ESXi, VirtualBox, Hyper-V) එකක් පාවිච්චි කරලා emulate කරන එකට. හැම VM එකකටම තමන්ගේම Guest OS එකක්, libraries, dependencies, සහ application එකක් තියෙනවා.

ඒක මෙහෙම පේනවා:

Hardware
  |-- Hypervisor
    |-- VM 1 (Guest OS + Bin/Lib + App)
    |-- VM 2 (Guest OS + Bin/Lib + App)
    |-- VM 3 (Guest OS + Bin/Lib + App)

වාසි:

  • සම්පූර්ණ isolation.
  • විවිධ OS මත ධාවනය කළ හැකි වීම.

අවාසි:

  • සැහැල්ලු නැහැ (heavyweight).
  • සෑම VM එකකටම තමන්ගේම Guest OS එකක් අවශ්‍ය නිසා resource (CPU, RAM, Disk) වැඩිපුර පරිභෝජනය කරනවා.
  • boot up වෙන්න කාලයක් යනවා.

Containers (Docker)

Containers, VMs වලට වඩා වෙනස්. Container එකකට වෙනම Guest OS එකක් අවශ්‍ය වෙන්නේ නැහැ. ඒවා ධාවනය වෙන්නේ Host OS එකේ kernel එක පාවිච්චි කරලා. Docker Engine එක මේ Host OS එක සහ containers අතර සම්බන්ධය හදනවා.

ඒක මෙහෙම පේනවා:

Hardware
  |-- Host OS
    |-- Docker Engine
      |-- Container 1 (Bin/Lib + App)
      |-- Container 2 (Bin/Lib + App)
      |-- Container 3 (Bin/Lib + App)

වාසි:

  • සැහැල්ලුයි (lightweight).
  • Resource අඩුයි (VMs වලට වඩා).
  • ඉක්මනින් boot up වෙනවා.
  • පහසුවෙන් scale කරන්න පුළුවන්.

අවාසි:

  • Host OS එකේ kernel එක share කරන නිසා, VMs තරම්ම isolation නැහැ. (ආරක්ෂාව අතින් පොඩි වෙනසක් තියෙන්න පුළුවන්, හැබැයි සාමාන්‍ය භාවිතයට ප්‍රමාණවත්).

දැන් ඔයාලට තේරෙනවා ඇති containers අපේ applications ධාවනය කරන්න කොයි තරම් efficient ද කියලා.

3. Docker Architecture

Docker වැඩ කරන්නේ client-server architecture එකක් මත. මේකේ ප්‍රධාන අංග කිහිපයක් තියෙනවා:

  • Docker Daemon (dockerd): මේක Docker Engine එකේ server කොටස. Docker objects (images, containers, volumes, networks) කළමනාකරණය කරන ප්‍රධාන process එක මේක.
  • Docker Client (docker CLI): මේක Docker Daemon එකත් එක්ක interact වෙන්න පාවිච්චි කරන command-line tool එක. අපි docker run, docker ps වගේ commands දෙන්නේ මේ CLI එකෙන්.
  • Docker Registry: මේක Docker images ගබඩා කරන තැනක්. Docker Hub කියන්නේ public registry එකක්. අපිට ඕන නම් private registry එකක් හදාගන්නත් පුළුවන්.

මේවාට අමතරව Docker වල ප්‍රධාන concepts කිහිපයක් තියෙනවා:

  • Image: Container එකක් හදන්න පාවිච්චි කරන read-only template එකක්. මේකේ application එකට අවශ්‍ය code, libraries, dependencies, environment variables, සහ configuration files වගේ හැම දෙයක්ම අඩංගුයි.
  • Container: Image එකකින් runtime වෙලාවේ හදන instance එකක්. මේක අපේ application එක ධාවනය වෙන isolated environment එක.
  • Dockerfile: Docker image එකක් build කරන්න අවශ්‍ය instructions අඩංගු text file එකක්. මේකෙන් image එකක් හදන හැටි පියවරෙන් පියවර විස්තර කරනවා.

4. Docker Install කරමු! (Let's Install Docker!)

Docker installation එක හරිම පහසුයි. ඔයා පාවිච්චි කරන operating system එක අනුව installation steps පොඩ්ඩක් වෙනස් වෙනවා.

Windows සහ macOS සඳහා:

Windows සහ macOS වලට Docker Desktop කියන application එක install කරන්න පුළුවන්. මේකෙන් Docker Engine, CLI, Docker Compose වගේ ඔක්කොම එක තැනකට ගෙනත් දෙනවා. installation එක හරිම සරලයි, සාමාන්‍යයෙන් application එකක් install කරනවා වගේමයි.

Linux සඳහා:

Linux වලට Docker Engine එක කෙලින්ම install කරන්න පුළුවන්. මේක command line එකෙන් කරනවා.

Ubuntu වගේ Debian-based systems වලට:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

installation එක සාර්ථකද කියලා බලන්න, මේ command එක දෙන්න:

docker --version

තවදුරටත් Docker හරියට වැඩ කරනවද කියලා බලන්න, hello-world container එක run කරන්න පුළුවන්:

docker run hello-world

මේ command එකෙන් output එකක් ආවොත්, Docker installation එක සාර්ථකයි!

5. මූලික Docker Commands (Basic Docker Commands)

දැන් අපි Docker install කරලා ඉවරයි. දැන් බලමු Docker එක්ක වැඩ කරන්න අවශ්‍ය මූලික commands කිහිපයක්.

Images සම්බන්ධ Commands:

  • docker pull [image_name]:[tag]: Docker Registry එකකින් image එකක් download කරගන්න (tag එක නොදැම්මොත් latest එක pull වෙනවා).
    උදා: docker pull ubuntu:latest
  • docker images: ඔයාගේ local machine එකේ තියෙන හැම Docker image එකක්ම බලන්න.
  • docker rmi [image_id_or_name]: Image එකක් delete කරන්න.

Containers සම්බන්ධ Commands:

  • docker run [image_name]: Image එකකින් අලුත් container එකක් හදලා run කරන්න.
    උදා: docker run ubuntu (මේකෙන් ubuntu container එකක් run වෙලා exit වෙනවා, මොකද ඒකට කරන්න command එකක් නැති නිසා).
    තවත් උදා: docker run -it ubuntu bash (මේකෙන් ubuntu container එකක් interactive mode එකෙන් run කරලා ඒක ඇතුලේ bash shell එකක් open කරනවා. -i කියන්නේ interactive, -t කියන්නේ pseudo-TTY).
  • docker ps: දැනට running තියෙන containers බලන්න.
  • docker ps -a: running සහ stopped කරපු හැම container එකක්ම බලන්න.
  • docker stop [container_id_or_name]: Running container එකක් stop කරන්න.
  • docker start [container_id_or_name]: Stopped container එකක් ආයෙත් start කරන්න.
  • docker rm [container_id_or_name]: Container එකක් delete කරන්න (stop කරලා තියෙන්න ඕන).
  • docker exec -it [container_id_or_name] bash: Running container එකක් ඇතුලට ගිහින් commands දෙන්න.

ප්‍රායෝගික උදාහරණයක්: Nginx Web Server එකක් Run කරමු!

දැන් අපි බලමු Docker පාවිච්චි කරලා Nginx web server එකක් කොහොමද run කරන්නේ කියලා. මේක හරිම සරලයි.

    • -d: මේකෙන් කියන්නේ container එක detached mode එකෙන්, ඒ කියන්නේ background එකේ run කරන්න කියලා. නැත්නම් terminal එක block වෙනවා.
    • -p 8080:80: මේක තමයි port mapping එක. මේකෙන් කියන්නේ ඔයාගේ host machine එකේ port 8080 එක container එක ඇතුලේ තියෙන port 80 (Nginx default port) එකට map කරන්න කියලා. ඒ කියන්නේ localhost:8080 වලින් access කරාම ඒක container එකේ port 80 එකට redirect වෙනවා.
    • --name my-nginx-server: container එකට නමක් දෙනවා (my-nginx-server). මේකෙන් container එක හොයාගන්න පහසුයි.
    • nginx: මේක තමයි අපි run කරන්න යන image එක.
  1. Web Server එකට Access වෙමු:දැන් ඔයාගේ web browser එක open කරලා http://localhost:8080 කියලා address bar එකේ type කරලා Enter කරන්න. "Welcome to Nginx!" කියන page එක පෙනෙයි. ඒකෙන් කියන්නේ ඔයාගේ Nginx web server එක Docker container එකක් විදිහට සාර්ථකව run වෙනවා කියලා. ඒක නියමයි නේද!

Container එක Delete කරමු:අවශ්‍ය නම් container එක delete කරන්නත් පුළුවන්:

docker rm my-nginx-server

Container එක Stop කරමු:වැඩේ ඉවර වුණාම container එක stop කරන්නත් පුළුවන්:

docker stop my-nginx-server

Container එක Running ද කියලා බලමු:දැන් මේ command එකෙන් Nginx container එක running ද කියලා බලන්න පුළුවන්:

docker ps

මේකෙන් output එකක් එයි, ඒකේ my-nginx-server කියන container name එකත්, status 'Up' කියලත් තියෙන්න ඕන.

Nginx Container එක Run කරමු:දැන් අපි Nginx container එකක් run කරමු. මේකේදී අපි පොඩි configurations ටිකක් කරනවා.

docker run -d -p 8080:80 --name my-nginx-server nginx

Nginx Image එක Pull කරගමු:මුලින්ම අපිට Nginx Docker image එක Docker Hub එකෙන් pull කරගන්න ඕන.

docker pull nginx

මේ command එකෙන් Nginx latest image එක ඔයාගේ local machine එකට download වෙයි.

අවසන් වචන...

ඔන්න ඔහොමයි යාලුවනේ Docker එකේ මූලික කරුණු ටික වැඩ කරන්නේ. අද අපි Docker කියන්නේ මොකක්ද, ඒක VMs වලට වඩා වෙනස් වෙන්නේ කොහොමද, Docker architecture එක, installation එක, වගේම සාමාන්‍යයෙන් පාවිච්චි කරන Docker commands කිහිපයක් ගැනත් ඉගෙන ගත්තා. මේ tutorial එක ඔයාට Docker ලෝකයට පිවිසෙන්න හොඳ ආරම්භයක් වෙන්න ඇති කියලා මම හිතනවා.

Docker කියන්නේ විශාල ක්ෂේත්‍රයක්. Docker Compose, Docker Swarm, Kubernetes, volumes, networks, Dockerfiles හදන හැටි වගේ තව ගොඩක් දේවල් තියෙනවා ඉගෙන ගන්න. හැබැයි මේ මුලික කරුණු ටික තේරුම් ගත්තා නම්, ඉස්සරහට ඉගෙන ගන්න එක පහසු වෙයි.

ඔයාගේ Docker journey එකට සුබ පැතුම්! මේ tutorial එක ඔයාට ප්‍රයෝජනවත් වුණා නම්, අනිවාර්යයෙන්ම comment එකක් දාගෙන යන්න. ඔයාලත් මේ වගේ Docker commands පාවිච්චි කරලා මොනවද කරලා තියෙන්නේ කියලා කියන්න. මේක ඔයාගේ ඊලඟ project එකේදී උත්සාහ කරලා බලන්නත් අමතක කරන්න එපා!