මම මේ දවස් වල Docker ඉගෙන ගන්නවා. මේ ගැන සිංහලෙන් ලියවුනු ලිපි අඩුයිනෙ . මේ තියෙන්නේ මට හම්බුනා ලිපියක්. මම එක මෙතන post කරනචා. කැමති
අයට ඉගෙන ගන්න පුලුවන්නෙ. තව මේ වගේ ලිපි තියෙනවා නම් මෙතන දාන්න .
සුභ දවසක් හැමෝටම. අද මම කතා කරන්න බලාපොරොත්තු වෙන්නේ Docker ගැන. මේ වෙනකොට software industry එකේ ගොඩක් ජනප්රිය technology එකක් තමයි Docker. අලුතෙන් industry එකට එන ඕනෙම කෙනෙකුට අවශ්ය වෙන platform එකක් කිව්වොත් හරියටම හරි. Docker ගැන articles, videos ගොඩක් තිබ්බත් සිංහලෙන් ලියවුන resources තියෙන්නේ හරිම අඩුවෙන්. ඒකයි මේ article එක සිංහලෙන් ලියන්න හිතුවේ. එහෙනං පටන්ගමු.
මොකක්ද ඇත්තටම Docker කියන්නේ?
Docker කියන්නේ දැනට ලෝකේ තියෙන ප්රධානම software container platform එක. එතකොට container එකක් කියන්නේ මොකක්ද?
Container එකක් කියන්නේ මොකක් හරි software එකක් run වෙන්න ඕනේ කරන codes, run-time, system tools, system libraries, settings වගේ හැමදේම එකතු කරපු image එකකට. උඩ diagram එකේ තියෙනවා වගේ අපේ project එකට ඕනේ කරන දේවල් එකතු කරලා අපිට වෙන වෙනම containers හදාගන්න පුළුවන්. ඒ වගේම මේ containers වල විශේෂත්වය තමයි මේවා ඔක්කොම isolated software environments වීම. ඒ කියන්නේ අපි එක container එකක use කරන දේවල් තවත් container එකකට visible නෑ.
මොකක්ද Docker use කරන එකේ වාසිය.
Docker වලින් විසඳන ප්රධානම ප්රශ්නේ තමයි “It worked on my machine”. ඔයාල මිට කලින් එක එක project කරලා ඇතිනේ. ඒවා කොහේ හරි production environment එකකට deploy කරන්න උත්සහ කරලා තියෙනවා නං මේ ප්රශ්නේ ගැන දන්නවා. ඔයාගේ machine එකේ හොදට run උන project එක server එකකට දැම්මට පස්සේ වැඩ කරන්නේ නෑ.
මෙහෙම වෙන්න විවිධ හේතු තියෙන්න පුළුවන්. මොන හේතුව තිබුනත් Docker use කරොත් කිසිම කරදරයක් නැතුව ඔයාගේ project එක foreign environment එකක deploy කරන්න පුළුවන්. තියෙන්න ඕනේ එකම දේ Docker Engine එක විතරයි.
උදාහරණයක් විදිහට අපි හිතමු ඔයාගේ project එක PHP, MySQL වලින් හදපු website එකක් කියලා. ඔයාට කරන්න තියෙන්නේ PHP image එකකුයි MySQL image එකකුයි docker hub එකෙන් pull කරගෙන ඔයාගේ code එකත් දාලා ඔයාගෙම Docker container එකක් හදාගන්න එක. ඊට පස්සේ ඔයාට ඒක run කරලා ඔයාගේ website එක up කරගන්න පුළුවන්. ඒ වගේම ඒක image එකක් විදිහට ආපහු docker hub එකට push කරලා ඔයාගේ production environment එකට pull කරගන්නත් පුළුවන්. එතකොට website එක කලින් විදිහටම එකෙත් run වෙනවා.
මේ වගේ සරල දේවල් වගේම ගොඩක් සංකීර්ණ වැඩත් Docker වලින් ලේසියෙන්ම කරගන්න පුළුවන්.
Docker vs. Virtual Machines?
ඔයාල virtual machines ගැන අහලා තියෙනවා නං හිතෙන්න පුළුවන් මේකත් VM එකක් වගේ නේද කියල. ඇත්තටම නැහැ. Containers සහ VM අතර වෙනස් කම් තියෙනවා.
මේ diagram එක බැලුවොත් පැහැදිලි වෙනවා containers සහ VMs අතර වෙනස. VM වලදී අපිට containers වල නැති OS level process isolation එකක් ලබා ගන්න පුළුවන්. හැබැයි හැම VM එකක් එක්කම guest OS එකේ බරත් දරන්න සිද්ධ වෙනවා. VM එකක් up වෙන්න සාමන්යයෙන් විනාඩි කිහිපයක් ගියත් Docker container එකක් තත්පර ගානක් ඇතුලත up කරගන්න පුළුවන්. මේකෙන් කියන්නේ නෑ containers කියන්නේ VM වලට ආපු competition එකක් කියලා. අපේ අවශතාවය අනුව VMද containerද use කරන්නේ කියලා අපි තීරණය කරන්න ඕනේ.
හරි. මන් හිතනවා දැන් ඔයාලට Docker ගැන basic idea එකක් තියෙනවා කියලා. මේක හොදටම තේරෙන්න නං Docker use කරලා බලන්නම වෙනවා. අදට මන් කියන්නන් කොහොමද Docker engine එක install කරගෙන example project එකක් run කරගන්නේ කියල. හැබැයි මම use කරන්නේ ubuntu. Windows සහ MacOS වල install කරන විදිහ ටිකක් වෙනස්. Official documentation එක බැලුවොත් ඒක එච්චර අමාරු වෙන්නේ නෑ. අනිත් Docker commands වෙනස් වෙන්නේ නෑ.
Install Docker on Ubuntu 16.04
මුලින්ම official Docker repository එකේ GPG key එක අපේ Ubuntu system එකට add කරගන්න ඕනේ. මේක නැත්තන් අපිට Docker download කරන්න බැරි වෙනවා. ඊළගට Docker repository එක add කරගන්න ඕනේ. ඒක add කරගත්තට පස්සේ අපේ package database එක update කරගත්තම Docker packages download කරන්න පුළුවන් වෙනවා. මන් මේ ටික එකටම දාල තියෙන්නේ ඔක්කොම එක පාර terminal එකට paste කරන්න පුළුවන් වෙන්න. (Ctrl + Shift + v)
ඊළගට අපි check කරලා බලන්න ඕනේ Docker repository එක add උනාද කියල.
මේ command එක ගැහුවම පහල තියෙන විදිහේ output එකක් එන්න ඕනේ. Version number එක වෙනස් වෙන්න පුළුවන්. හැබැයි candidate install location එක Docker repository වෙන්න ඕනේ. පහල Bold කරලා තියෙන line එක. මේක නැති උනොත් ඔයාට මුල ඉදලා ආපහු කරලා බලන්න වෙනවා.
ඒ ටික හරි නං Docker install කරන්න පුළුවන් පහල command එකෙන්.
ඊළගට මේ command එකෙන් පහල තියෙනවා වගේ output එකක් එනවා නං වැඩේ හරි.
Static site on Docker
ඊළඟට අපි try කරමු example image එකක් run කරගන්න.
docker run -d dockersamples/static-site
මේ command එකෙන් වෙන්නේ docker demon එක static-site කියන image එක docker-hub එකෙන් pull කරගෙන container එකක් විදිහට ඔයාගේ machine එකේ run කරන එක.-d කිව්වේ detached mode එකෙන් run කරන්න කියලා. ඔය පහල command එක ගැහුවොත් බලාගන්න පුළුවන් අපි run කරපු container එකේ විස්තර.
දැන් එතකොට කොහොමද මේ site එක access කරන්නේ? මොකක්ද port එක? ඒවා කරන්න මේ පොඩි command එකෙන් බෑ. ඉස්සෙල්ලා අපි මේ හැදිච්ච container එක අයින් කරලා ඉමු.
ecstatic_nobel කියන්නේ docker demon මේ container එකට දුන්න random name එක. ඔයාගේ container name එක තමයි මෙතන එන්න ඕනේ. ඊළගට පහල command එක run කරන්න.
මේ command එකෙන් කලින් වගේම static-site container එකක් run වෙනවා. හැබැයි කලින්ට වඩා දේවල් ටිකක් වෙනවා.
–name – කලින් පාර ලැබුන random name එක වෙනුවට අපි නමක් දෙනවා.
-P – container එකේ ports ඔක්කොම host එකේ random ports වලට assign කරනවා.
-e – මේ විදිහට තමයි container එකට environment variables pass කරන්නේ.
AUTHOR – අපි pass කරන variable එක. මෙතන your name කියන තැන ඔයාගේ නම දාන්න.
කලින් වතාවේ image එක download කරගත්තට මේ වතාවේ එහෙම උනේ නෑ නේද? image එකක් එක පාරක් download කරගත්තට පස්සේ ආපහු pull කරගන්න ඕනේ නෑ. Docker demon මුලින් අපේ machine එකේ image එක තියෙනවද කියලා බලලා තමයි pull කරගන්නේ.
ඊළගට අපේ container එකට assign උන ports ටික බලාගන්න පුළුවන් පහල command එකෙන්.
අපේ static website එක බලාගන්න කරන්න තියෙන්නේ ඔයාගේ browser එකෙන් 80/tcp එකට අදාළ address එකට යන එක විතරයි.
Docker වලින් අපිට එක command එකකින් website එකක් run කරන්න පුළුවන්.
මං හිතනවා දැන් ඔයාලට Docker ගැන idea එකක් එන්න ඇති කියල. ඉස්සරහට තවත් docker ගැන කතා කරන්න බලාපොරොත්තුවක් තියෙනවා. එහෙම post එකකින් නැවත හමු වෙමු. එතකං ජය!
source :https://everything1know.wordpress.com/2017/09/10/docker-%E0%B7%83%E0%B7%92%E0%B6%82%E0%B7%84%E0%B6%BD%E0%B7%99%E0%B6%B1%E0%B7%8A/
අයට ඉගෙන ගන්න පුලුවන්නෙ. තව මේ වගේ ලිපි තියෙනවා නම් මෙතන දාන්න .
සුභ දවසක් හැමෝටම. අද මම කතා කරන්න බලාපොරොත්තු වෙන්නේ Docker ගැන. මේ වෙනකොට software industry එකේ ගොඩක් ජනප්රිය technology එකක් තමයි Docker. අලුතෙන් industry එකට එන ඕනෙම කෙනෙකුට අවශ්ය වෙන platform එකක් කිව්වොත් හරියටම හරි. Docker ගැන articles, videos ගොඩක් තිබ්බත් සිංහලෙන් ලියවුන resources තියෙන්නේ හරිම අඩුවෙන්. ඒකයි මේ article එක සිංහලෙන් ලියන්න හිතුවේ. එහෙනං පටන්ගමු.
මොකක්ද ඇත්තටම Docker කියන්නේ?
Docker කියන්නේ දැනට ලෝකේ තියෙන ප්රධානම software container platform එක. එතකොට container එකක් කියන්නේ මොකක්ද?
Container එකක් කියන්නේ මොකක් හරි software එකක් run වෙන්න ඕනේ කරන codes, run-time, system tools, system libraries, settings වගේ හැමදේම එකතු කරපු image එකකට. උඩ diagram එකේ තියෙනවා වගේ අපේ project එකට ඕනේ කරන දේවල් එකතු කරලා අපිට වෙන වෙනම containers හදාගන්න පුළුවන්. ඒ වගේම මේ containers වල විශේෂත්වය තමයි මේවා ඔක්කොම isolated software environments වීම. ඒ කියන්නේ අපි එක container එකක use කරන දේවල් තවත් container එකකට visible නෑ.
මොකක්ද Docker use කරන එකේ වාසිය.
Docker වලින් විසඳන ප්රධානම ප්රශ්නේ තමයි “It worked on my machine”. ඔයාල මිට කලින් එක එක project කරලා ඇතිනේ. ඒවා කොහේ හරි production environment එකකට deploy කරන්න උත්සහ කරලා තියෙනවා නං මේ ප්රශ්නේ ගැන දන්නවා. ඔයාගේ machine එකේ හොදට run උන project එක server එකකට දැම්මට පස්සේ වැඩ කරන්නේ නෑ.
මෙහෙම වෙන්න විවිධ හේතු තියෙන්න පුළුවන්. මොන හේතුව තිබුනත් Docker use කරොත් කිසිම කරදරයක් නැතුව ඔයාගේ project එක foreign environment එකක deploy කරන්න පුළුවන්. තියෙන්න ඕනේ එකම දේ Docker Engine එක විතරයි.
උදාහරණයක් විදිහට අපි හිතමු ඔයාගේ project එක PHP, MySQL වලින් හදපු website එකක් කියලා. ඔයාට කරන්න තියෙන්නේ PHP image එකකුයි MySQL image එකකුයි docker hub එකෙන් pull කරගෙන ඔයාගේ code එකත් දාලා ඔයාගෙම Docker container එකක් හදාගන්න එක. ඊට පස්සේ ඔයාට ඒක run කරලා ඔයාගේ website එක up කරගන්න පුළුවන්. ඒ වගේම ඒක image එකක් විදිහට ආපහු docker hub එකට push කරලා ඔයාගේ production environment එකට pull කරගන්නත් පුළුවන්. එතකොට website එක කලින් විදිහටම එකෙත් run වෙනවා.
මේ වගේ සරල දේවල් වගේම ගොඩක් සංකීර්ණ වැඩත් Docker වලින් ලේසියෙන්ම කරගන්න පුළුවන්.
Docker vs. Virtual Machines?
ඔයාල virtual machines ගැන අහලා තියෙනවා නං හිතෙන්න පුළුවන් මේකත් VM එකක් වගේ නේද කියල. ඇත්තටම නැහැ. Containers සහ VM අතර වෙනස් කම් තියෙනවා.
මේ diagram එක බැලුවොත් පැහැදිලි වෙනවා containers සහ VMs අතර වෙනස. VM වලදී අපිට containers වල නැති OS level process isolation එකක් ලබා ගන්න පුළුවන්. හැබැයි හැම VM එකක් එක්කම guest OS එකේ බරත් දරන්න සිද්ධ වෙනවා. VM එකක් up වෙන්න සාමන්යයෙන් විනාඩි කිහිපයක් ගියත් Docker container එකක් තත්පර ගානක් ඇතුලත up කරගන්න පුළුවන්. මේකෙන් කියන්නේ නෑ containers කියන්නේ VM වලට ආපු competition එකක් කියලා. අපේ අවශතාවය අනුව VMද containerද use කරන්නේ කියලා අපි තීරණය කරන්න ඕනේ.
හරි. මන් හිතනවා දැන් ඔයාලට Docker ගැන basic idea එකක් තියෙනවා කියලා. මේක හොදටම තේරෙන්න නං Docker use කරලා බලන්නම වෙනවා. අදට මන් කියන්නන් කොහොමද Docker engine එක install කරගෙන example project එකක් run කරගන්නේ කියල. හැබැයි මම use කරන්නේ ubuntu. Windows සහ MacOS වල install කරන විදිහ ටිකක් වෙනස්. Official documentation එක බැලුවොත් ඒක එච්චර අමාරු වෙන්නේ නෑ. අනිත් Docker commands වෙනස් වෙන්නේ නෑ.
Install Docker on Ubuntu 16.04
මුලින්ම official Docker repository එකේ GPG key එක අපේ Ubuntu system එකට add කරගන්න ඕනේ. මේක නැත්තන් අපිට Docker download කරන්න බැරි වෙනවා. ඊළගට Docker repository එක add කරගන්න ඕනේ. ඒක add කරගත්තට පස්සේ අපේ package database එක update කරගත්තම Docker packages download කරන්න පුළුවන් වෙනවා. මන් මේ ටික එකටම දාල තියෙන්නේ ඔක්කොම එක පාර terminal එකට paste කරන්න පුළුවන් වෙන්න. (Ctrl + Shift + v)
Code:
# Add the GPG key for the official Docker repository to the system:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Add the Docker repository to APT sources:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# Update the package database with the Docker packages from the newly added repo:
sudo apt-get update
Code:
apt-cache policy docker-ce
මේ command එක ගැහුවම පහල තියෙන විදිහේ output එකක් එන්න ඕනේ. Version number එක වෙනස් වෙන්න පුළුවන්. හැබැයි candidate install location එක Docker repository වෙන්න ඕනේ. පහල Bold කරලා තියෙන line එක. මේක නැති උනොත් ඔයාට මුල ඉදලා ආපහු කරලා බලන්න වෙනවා.
Code:
Output of apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 17.03.1~ce-0~ubuntu-xenial
Version table:
17.03.1~ce-0~ubuntu-xenial 500
[B]500 [url]https://download.docker.com/linux/ubuntu[/url] xenial/stable amd64 Packages[/B]
17.03.0~ce-0~ubuntu-xenial 500
500 [url]https://download.docker.com/linux/ubuntu[/url] xenial/stable amd64 Packages
Code:
sudo apt-get install -y docker-ce
ඊළගට මේ command එකෙන් පහල තියෙනවා වගේ output එකක් එනවා නං වැඩේ හරි.
Code:
sudo systemctl status docker
Code:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since සෙ 2017-09-09 15:45:27 +0530; 20h ago
Docs: [url]https://docs.docker.com[/url]
Main PID: 1159 (dockerd)
Tasks: 46
Memory: 72.0M
CPU: 5min 34.947s
CGroup: /system.slice/docker.service
├─1159 /usr/bin/dockerd -H fd://
├─1336 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0
├─1674 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 27018 -container-ip 172.17.0.2 -container
└─1716 docker-containerd-shim 932345d26cafca4da97dfaacd1fa7a6c4e7cb4cb9a71af19400a1a15682da156 /var/run/docker
Static site on Docker
ඊළඟට අපි try කරමු example image එකක් run කරගන්න.
docker run -d dockersamples/static-site
මේ command එකෙන් වෙන්නේ docker demon එක static-site කියන image එක docker-hub එකෙන් pull කරගෙන container එකක් විදිහට ඔයාගේ machine එකේ run කරන එක.-d කිව්වේ detached mode එකෙන් run කරන්න කියලා. ඔය පහල command එක ගැහුවොත් බලාගන්න පුළුවන් අපි run කරපු container එකේ විස්තර.
Code:
docker ps
දැන් එතකොට කොහොමද මේ site එක access කරන්නේ? මොකක්ද port එක? ඒවා කරන්න මේ පොඩි command එකෙන් බෑ. ඉස්සෙල්ලා අපි මේ හැදිච්ච container එක අයින් කරලා ඉමු.
Code:
docker stop ecstatic_nobel
docker rm ecstatic_nobel
Code:
docker run --name static-site -e AUTHOR="Your Name" -d -P dockersamples/static-site
මේ command එකෙන් කලින් වගේම static-site container එකක් run වෙනවා. හැබැයි කලින්ට වඩා දේවල් ටිකක් වෙනවා.
–name – කලින් පාර ලැබුන random name එක වෙනුවට අපි නමක් දෙනවා.
-P – container එකේ ports ඔක්කොම host එකේ random ports වලට assign කරනවා.
-e – මේ විදිහට තමයි container එකට environment variables pass කරන්නේ.
AUTHOR – අපි pass කරන variable එක. මෙතන your name කියන තැන ඔයාගේ නම දාන්න.
කලින් වතාවේ image එක download කරගත්තට මේ වතාවේ එහෙම උනේ නෑ නේද? image එකක් එක පාරක් download කරගත්තට පස්සේ ආපහු pull කරගන්න ඕනේ නෑ. Docker demon මුලින් අපේ machine එකේ image එක තියෙනවද කියලා බලලා තමයි pull කරගන්නේ.
ඊළගට අපේ container එකට assign උන ports ටික බලාගන්න පුළුවන් පහල command එකෙන්.
Code:
docker port static-site
අපේ static website එක බලාගන්න කරන්න තියෙන්නේ ඔයාගේ browser එකෙන් 80/tcp එකට අදාළ address එකට යන එක විතරයි.
Docker වලින් අපිට එක command එකකින් website එකක් run කරන්න පුළුවන්.
මං හිතනවා දැන් ඔයාලට Docker ගැන idea එකක් එන්න ඇති කියල. ඉස්සරහට තවත් docker ගැන කතා කරන්න බලාපොරොත්තුවක් තියෙනවා. එහෙම post එකකින් නැවත හමු වෙමු. එතකං ජය!
source :https://everything1know.wordpress.com/2017/09/10/docker-%E0%B7%83%E0%B7%92%E0%B6%82%E0%B7%84%E0%B6%BD%E0%B7%99%E0%B6%B1%E0%B7%8A/


