Docker කියන්නේ මොකක්ද?
Docker කියන්නේ මොකක්ද, containers වැඩ කරන්නේ කොහොමද?
ඔයා application එකක් හදලා, ඒක ඔයාගේ computer එකේ හොඳටම වැඩ කළත් වෙන computer එකකදී වැඩ නොකරන situation එකකට මුහුණ දීලා තියෙනවද?
සමහරවිට developersලා කියන මේ famous phrase එක අහලා ඇති:
It works on my machine!
මේ වගේ ප්රශ්න ඇති වෙන්නේ application එකක් තනිවම වැඩ කරන්නේ නැති නිසා. ඒකට programming language versions, libraries, dependencies, system configurations වගේ දේවල් ගොඩක් අවශ්ය වෙනවා.
Docker කියන්නේ මේ වගේ environment-related problems අඩු කරගන්න භාවිතා කරන technology එකක්.
Docker වලින් වෙන්නෙ මොකක්ද?
Docker කියන්නේ application එකක්, එය run වීමට අවශ්ය dependencies සහ environment එක සමඟ package කරලා, ඒක isolated container එකක් තුළ run කිරීමට ඉඩ දෙන platform එකක්.
සරලව කිව්වොත්:
Docker මඟින් application එකක් වෙනස් environments වල වඩාත් consistent ලෙස run කරන්න පුළුවන්.
උදාහරණයක් විදිහට ඔයා Node.js application එකක් හදනවා කියලා හිතමු.
ඒ application එකට:
Node.js version
npm packages
Environment variables
System libraries
Configurationවගේ දේවල් අවශ්ය වෙන්න පුළුවන්.
ඔයාගේ computer එකේ මේ හැමදේම නිවැරදිව තිබුණත්, වෙන developer කෙනෙකුගේ computer එකේ versions වෙනස් නම් application එක වෙනස් ආකාරයට වැඩ කරන්න හෝ සම්පූර්ණයෙන්ම fail වෙන්න පුළුවන්.
Docker මඟින් application එකට අවශ්ය environment එකත් සමඟ application එක package කරලා container එකක් තුළ run කරන්න පුළුවන්.
Application
+
Dependencies
+
Configuration
↓
Docker Image
↓
Docker Container
↓
Application runsStandardized Box එකක්
Docker තේරුම්ගන්න ලේසිම විදිහක් තමයි මේ analogy එක.
ඔයා ගෙදරදී කෑමක් හදනවා කියලා හිතන්න.
ඒක හොඳට හැදෙන්නේ ඔයාට:
හරි ingredients තියෙන නිසා
හරි cooking equipment තියෙන නිසා
හරි temperature එක තියෙන නිසා
හුරුපුරුදු environment එකක් තියෙන නිසා
නමුත් ඒ කෑමම ඔයාගේ යාළුවෙකුගේ ගෙදර හදන්න ගියොත්?
එයාගේ kitchen එකේ equipment වෙනස් වෙන්න පුළුවන්. Ingredients වෙනස් වෙන්න පුළුවන්. Cooking conditions වෙනස් වෙන්න පුළුවන්.
ඒ වෙනුවට ඒ කෑම හදන්න අවශ්ය හැමදේම standardized box එකකට දාලා අරගෙන ගියා කියලා හිතන්න.
ඒ box එක වෙන kitchen එකකට අරගෙන ගියත්, අවශ්ය දේවල් එකටම තියෙන නිසා එකම result එක අරගන්න පහසුයි.
Docker එකත් ටිකක් මේ වගේ.
Box එක = Container එකකට
ඒක ඇතුළේ application එකට අවශ්ය software environment එක තියෙනවා.
ඇත්තටම Docker එක සම්පූර්ණ computer එකක් container එකකට දානවා නෙවෙයි. Application එකට අවශ්ය software සහ dependencies එකතු කරලා isolated environment එකක් හදලා දෙනවා.
Docker Container කියන්නේ මොකක්ද?
Container එකක් කියන්නේ application එකක් එයට අවශ්ය components සමඟ isolated environment එකක run වෙන එකක්.
උදාහරණයක්:
┌─────────────────────────┐
│ Docker Container │
│ │
│ Your Application │
│ Node.js │
│ Dependencies │
│ Configuration │
└─────────────────────────┘මේ නිසා application එක developer ගේ computer එකේ configuration එක මත සම්පූර්ණයෙන්ම depend වීම අඩු වෙනවා.
ඒ application එක වෙනත් environments වලට move කිරීමත් පහසු වෙනවා.
උදාහරණයක්:
Developer PC
↓
Docker Container
↓
Testing Server
↓
Production Serverමේ stages වලදී එකම container image එක භාවිතා කරන්න පුළුවන්.
Docker Image කියන්නේ මොකක්ද?
Docker ඉගෙනගන්නකොට නිතරම හමුවෙන terms දෙකක් තමයි:
Image සහ Container
මේ දෙක එකම දෙයක් නෙවෙයි.
Docker Image
Docker Image කියන්නේ container එකක් create කිරීමට භාවිතා කරන packaged template එකක්.
Docker Container
Docker Container කියන්නේ ඒ image එකෙන් create කරලා run කරන instance එක.
මේක recipe එකකට සමාන කරන්න පුළුවන්.
Recipe
↓
Docker Image
↓
Running Meal
↓
Docker Containerඑකම image එකෙන් containers කිහිපයක් create කරන්නත් පුළුවන්.
Docker Image
↓
┌──────────┼──────────┐
↓ ↓ ↓
Container Container Containerඒ containers එකිනෙකට independent ලෙස run වෙන්න පුළුවන්.
ඔයා application එකක් develop කරන්නේ:
Node.js 22
Express
MongoDB
Several npm packagesභාවිතා කරලා කියලා හිතන්න.
ඔයාගේ computer එකේ application එක හොඳට වැඩ කරනවා.
නමුත් ඔයාගේ teammate ගේ computer එකේ:
Node.js 18
Different package versions
Different configurationතියෙනවා.
දැන් application එකේ behavior එක වෙනස් වෙන්න පුළුවන්.
Environment එකේ වෙනස්කම් නිසා ඇති වෙන ප්රශ්න හොයන්න developer කෙනෙකුට පැය ගණනක් යන්නත් පුළුවන්.
Docker භාවිතා කරලා application එකට අවශ්ය environment එක define කරලා image එකක් create කරන්න පුළුවන්.
ඊට පස්සේ teammate ටත් ඒ same container එක run කරන්න පුළුවන්.
Your Computer ↓ ┌─────────────────┐ │ Docker Container│ │ Node.js 22 │ │ Dependencies │ │ Your App │ └─────────────────┘SAME
Teammate's Computer ↓ ┌─────────────────┐ │ Docker Container│ │ Node.js 22 │ │ Dependencies │ │ Your App │ └─────────────────┘
මේක environment-related differences අඩු කරන්න ගොඩක් උපකාරී වෙනවා.
Docker සහ Virtual Machine අතර වෙනස
ගොඩක් දෙනෙක් අහන ප්රශ්නයක් තමයි:
“Docker කියන්නේ Virtual Machine එකක්ද?”
ඇත්තටම නෑ.
මේ දෙකම isolated enviroments ලබාදෙනවා. නමුත් ඒවා වැඩ කරන ආකාරය වෙනස්.
Virtual Machine (VM) එකක සාමාන්යයෙන් සම්පූර්ණ guest operating system එකක් තියෙනවා.
Hardware ↓ Host OS ↓ Hypervisor ↓ ┌──────────────┐ │ VM │ │ Application │ │ Libraries │ │ Guest OS │ └──────────────┘
┌──────────────┐ │ VM │ │ Application │ │ Libraries │ │ Guest OS │ └──────────────┘
Docker containers සාමාන්යයෙන් host operating system එකේ kernel එක share කරගන්න ගමන්ම applications සහ ඒවායේ environments isolate කරනවා.
Hardware ↓ Host OS ↓ Docker Engine ↓ ┌──────────────┐ │ Container │ │ Application │ │ Dependencies │ └──────────────┘
┌──────────────┐ │ Container │ │ Application │ │ Dependencies │ └──────────────┘
ඒ නිසා containers වලට සාමාන්යයෙන් සම්පූර්ණ guest operating system එකක් අවශ්ය නොවන නිසා, traditional VMs වලට වඩා lightweight වගේම ඉක්මනින් start වෙන්නත් පුළුවන්.
Docker භාවිතා කරන අවස්ථා මොනවද?
Docker software development වල විවිධ stages වලදී ප්රයෝජනවත්.
1. Development
Team එකේ developers ලාට එකම environment එකක් භාවිතා කරන්න පුළුවන්.
හැම developer කෙනෙකුටම:
මේ version එක install කරන්න, මේ library එක configure කරන්න, මේ setting එක වෙනස් කරන්න…
කියනවා වෙනුවට project එකේ Docker configuration එක මඟින් අවශ්ය environment එක define කරන්න පුළුවන්.
2. Testing
Testing environments වඩාත් consistent කරන්න Docker භාවිතා කරන්න පුළුවන්.
Code
↓
Docker Container
↓
Run Tests
↓
Resultsමේක developer computers සහ testing servers අතර තියෙන environment වෙනස්කම් නිසා ඇතිවන problems අඩු කරන්න උපකාරී වෙනවා.
3. Deployment
Application එක container එකක් විදිහට package කළාම ඒ container එක environments අතර move කිරීම පහසු වෙනවා.
උදාහරණයක්:
Development
↓
Testing
↓
Productionමේ නිසා deployment process එක වඩාත් predictable කරගන්න පුළුවන්.
4. Microservices
Modern applications බොහෝ විට smaller services කිහිපයකට divide කරනවා.
මේවාට microservices කියනවා.
උදාහරණයක්:
┌────────────────┐ │ User Service │ └────────────────┘┌────────────────┐ │ Payment Service│ └────────────────┘
┌────────────────┐ │ Product Service│ └────────────────┘
මේ සෑම service එකක්ම වෙනම container එකක run කරන්න පුළුවන්.
ඒ නිසා services වෙන වෙනම develop, deploy සහ scale කරන්න පහසු වෙනවා.
5. CI/CD
Docker CI/CD pipelines වලදීත් බහුලව භාවිතා වෙනවා.
CI/CD කියන්නේ Continuous Integration සහ Continuous Delivery/Deployment.
සරල workflow එකක්:
Developer
↓
Push Code
↓
CI/CD Pipeline
↓
Build Docker Image
↓
Run Tests
↓
DeployApplication එක consistent environment එකක test කරන්න පුළුවන් නිසා automated software delivery process එක වඩාත් reliable කරන්න Docker උපකාරී වෙනවා.
Docker Engine කියන්නේ මොකක්ද?
Docker Engine කියන්නේ Docker containers build සහ run කිරීමට අවශ්ය core technology එක.
සරලව:
Your Command
↓
Docker CLI
↓
Docker Engine
↓
Containersඔයා Docker command එකක් භාවිතා කරලා container එකක් start කළාම, Docker tooling Docker Engine සමඟ communicate කරනවා. Docker Engine එක container එක manage කරනවා.
Docker application එකට අවශ්ය දේවල් දන්නේ කොහොමද?
මෙතනදී Dockerfile එක වැදගත් වෙනවා.
Dockerfile කියන්නේ Docker image එකක් build කිරීමට අවශ්ය instructions තියෙන text file එකක්.
සරල example එකක්:
FROM node:22WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
මේ instructions මඟින් Docker ට:
භාවිතා කළ යුතු base environment එක
Application එක තිබිය යුතු location එක
Copy කළ යුතු files
Install කළ යුතු dependencies
Application එක start කරන command එක
වගේ දේවල් කියනවා.
ඊට පස්සේ Docker ඒ instructions භාවිතා කරලා image එක build කරනවා.
Dockerfile
↓
Docker Build
↓
Docker Image
↓
Docker ContainerReal Project එකක Docker
ඔයා online store එකක් build කරනවා කියලා හිතන්න.
Application එකේ:
Frontend
↓
Backend API
↓
Databaseවගේ components තියෙන්න පුළුවන්.
Docker භාවිතා කරලා මේවා වෙන වෙනම containers වල run කරන්න පුළුවන්.
┌──────────────────┐ │ Frontend │ │ Container │ └──────────────────┘┌──────────────────┐ │ Backend API │ │ Container │ └──────────────────┘
┌──────────────────┐ │ Database │ │ Container │ └──────────────────┘
මේ containers Docker network එකක් හරහා එකිනෙකා සමඟ communicate කරන්නත් පුළුවන්.
Containers කිහිපයක් එකට manage කිරීමට Docker Compose භාවිතා කරන්නත් පුළුවන්.
Did you find this article helpful?
Related Articles
Azure වලින් මොනවද කරන්න පුළුවන්?
Microsoft Azure කියන්නේ විවිධ විදිහෙ දේවල් ගොඩක් කරන්න පුලුවන් cloud platform එකක්.
මොනවද මේ Linux Shell වර්ග?
Linux වල තියෙන Bash, Zsh, Fish, Dash වගේ Shells අතර වෙනස්කම්
Flutter සහ React Native
Mobile App Development එකට හොද මොකක්ද?
