DevOps - The Must Know Checklist : 1 - Docker 1 වන කොටස
DevOps - The Must Know Checklist : 1 - Docker 1 වන කොටස
ඔන්න අපි අද ඉදන් DevOps කෙනෙක් වෙන්න අනිව දැන ගත යුතු tools සහ applications ගැන කතාකරන්න පටන් ගන්නව. මේකට අපි The Must Know Checklist කියල කියමු. මේ ලිස්ට් එකේ මුලින්ම ඉන්නෙ Docker. Docker ගැන දැන ගන්න නම් ඉතින් අපි වාරයකට යන්න ඕන. නමුත් නැව් එන වාරයකට යන්න හොදේ. එතකම් මම පොඩ්ඩක් කියල දෙන්නම මොකක් ද මේ ඩොකර් (Docker) කියල කියන්නෙ. ඔයාල Docker ගැන මුලින්ම ඉගෙන ගන්නෙ මේ ලිපියෙන් නම් ඔයාල Docker කුමක් ද කියල මම තේරුම් ගත් විදියට තේරුම් ගන්න උත්සාහ කරන්න.මම මෙහිදී විස්තර කරන්නෙ Docker එක UNIX / Linux මෙහෙයුම් පද්දති වල ක්රියා කරන ආකාරයි.Docker කියන්නෙ Linux වල තියෙන Linux Containers මැනේජ් කරන්න බාවිතා කරන සිස්ටම් එකක්. එනිසා Linux Containers වල දක්නට ලැබෙන මූලික ගුණාංග සියල්ලම වගේ Docker වලත් දක්නට ලැබෙනව. අපිට මේක හොදින් තේරුම් ගන්න පුළුවන් මොනවද මේ Linux Containers කියන්නෙ කියල. අපි කවුරුත් දැකල තියෙනව Containers පෙට්ටි. මේ පෙට්ටි ටික නැවකට පටවල අනතුරුව නැව තමයි අදාල වරයට යන්නෙ. මේ Containers පෙට්ටි වල මුහුදේ ගමන් කිරීමට උපකාර වන කිසිම යාන්ත්රික උපාංගයක් නෑ. Containers පෙට්ටි වලට එක වරායක සිට අනිත් වරයට යන්න උදවු කරන්නෙ නැව තමයි. Container පෙට්ටියක් එක නැවකට සම්බන්ද වෙලා තිබුනට එක නැවකට Containers පෙට්ටි ගොඩක් සම්බන්ද වෙලා තියෙනව කියල අපි දන්නව.
Linux Containers කියනනෙත් අපි දැකල තියෙන Containers පෙට්ටි වගේ දෙයක්. අපි Linux OS කියල හදුන්වනෙ Linux kernel එකයි. මේ kernel එකත් හරියට අර නැවක් වගේ.
Linux Containers කියල ටෙක්නිකලි කියන්නෙ Operating System ලෙවෙල් එකේ virtualization method එකකට. මේක අපි දන්නා සමාන්ය VM වලට වඩා වෙනස්. මෙහිදී Linux Containers බාවිතා කරගන්නෙ Host OS එකේ තිබෙන kernel එකයි. ඒ කියන්නෙ Host server එකේ තියෙන සියලුම Linux Containers බාවිතා කරන්නෙ කාටත් පොදුවුන Linux kernel එකක්. නමුත් අපි රන් කරන processes එකිනෙකෙන් වෙන් කරල වෙන වෙනම Containers තුල තමයි රන් කරන්නෙ. මෙහිදී container එකක් තුල තියෙන process එකකට වෙනත් container එකක රන් වෙන processes එකක් සමග ගනු දෙනු කිරීමට නොහැක. මේකට අපි කියන්නෙ isolated environments කියල. මෙන්න මේ ආකාරයට තමයි Linux Containers මගින් virtualization එක වෙන්නෙ.
උදාහරණයක් ලෙස අපි බාවිතා කරන VMWare ගත් විට එහි තිබෙන එක් VM එකකට එක kernel එක බැගින් තිබෙනව(dedicated). ඒ වගේම එකකට එක බැගින් virtual hardwares සෙට් වෙන වෙනම තියෙනව.
නමුත් Linux Containers කියන ක්රමයෙදි තියෙන්නේ host server එකට අයිති real hardware ටික විතරයි. මොකද host ගෙ තියෙන kernel එක හැම Containers එකක්ම use කරන නිසා (මතක තිය ගන්න host ගෙ kernel එක තමා host ට සම්බන්ද කරලා තියෙන සියලුම hardware සමග ගනු දෙනු කරන්නෙ). මෙහිදී එක Linux Container එකක් ගත්විට එයට හැගී යන්නෙ තියෙන hardware ටික ඔක්කොම කෙලින්ම එයට connect කරල තියෙනව කියල.
(Linux Container එකක් kernel එකෙන් මෙහෙම අහන්නෙ නැතුව ඇති "මට නුඹ විතරක් වුනාට නුඹට ඉන්නෙ මං විතරද....?" කියල)
අපි Docker Engine එක මගින් කරන්නෙ මෙන මේ කියපු Linux Containers ටික මැනේජ් කරන එක.
අන්තිමට Docker කියන්නෙ Containerization technology එකක් කියල කියන්න පුළුවන්. ඔයාලට මේ ගැන යම් ගැටළුවක් තියෙනවනම් අහන්න හොදද...?
තවද අපි මේ Docker එක solution එකක් විදියට තමයි සලකන්නේ. එහිදී Docker solution එක මේ විදියට කොටස් දෙකකට වෙන් කරනු ලබනව.
The Docker engine - මෙමගින් Docker හි මුලික පරමාර්ථයට අදාල කාර්යන ඉටුකරගැනීමට අවශ්ය Docker containers පවත්වා ගැනීම සිදු කරනව.
The Docker Hub - මෙමගින් Docker images පවත්වා ගැනීම සිදු කරනව.
දැනට ඔයාල මේ කොටස් දෙක මේ විදියට සරලව තේරුම් ගන්න.
අපි දැන් කෙලින්ම බලමු කොහොමද මේ Docker බාවිතා කරන්නෙ කියල උදාහරණ සමගින්. සියලු දෙනාගේම පහසුව තකා මම මේ සදහා Ubuntu 16.04 (64bit) බාවිතා කරනවා හොදද.
(ඔයාලට මේ සදහා Google Cloud , Digital Ocean ,AWS වලින් දෙන VM එකක් යොදා ගන්න එක හරි පහසුයි.)
අපිට නොමිලේ access කරන්න පුළුවන් Docker images ගොඩක් public Docker Hub එකේ තියෙනව (https://hub.docker.com/). අපිට පුළුවන් එම Docker images බාවිතා කරලා අපිට අවශ්ය විදියට Docker containers සාදාගන්න.
Docker Install කිරීම
මුලින්ම ඔයාල Ubuntu server එකට ලොග් වෙලා මෙන්න මේ කමාන්ඩ්ස් ටික පිළිවෙලට දෙන්න.
ට්රයි sudo apt-get update && sudo apt-get upgrade -y
කියන කමාන්ඩ් එක යොදා ගන්නව.
මෙන්න මේ කමාන්ඩ් එකෙන් පුළුවන් දැනට අපි ලෝග්වෙලා ඉන්න user ව කෙලින්ම docker group එකට ඇතුලත් කරන්න. මෙහිදී user name එක සදහන් නොකරයි. ඔයාල මේ විදියට ට්රයි කරන්න.
ට්රයි sudo usermod -aG docker `whoami`
ට්රයි exit
ට්රයි docker -v
හරි අපිට docker කමාන්ඩ්ස් use කරන්න පර්මිෂන් තියෙනව.
අපි ඊළගට බලමු Docker image එකක් බාවිතා කරල Docker container එකක් හදාගන්න විදිය. මෙය ඉතාමත්ම පහසු ක්රියාවලියක්. ඔයාලට හරිම පහසුවෙන්ම තේරුම් ගන්න පුළුවන්.
DevOps - The Must Know Checklist : 1 - Docker 1 වන කොටස
ඔන්න අපි අද ඉදන් DevOps කෙනෙක් වෙන්න අනිව දැන ගත යුතු tools සහ applications ගැන කතාකරන්න පටන් ගන්නව. මේකට අපි The Must Know Checklist කියල කියමු. මේ ලිස්ට් එකේ මුලින්ම ඉන්නෙ Docker. Docker ගැන දැන ගන්න නම් ඉතින් අපි වාරයකට යන්න ඕන. නමුත් නැව් එන වාරයකට යන්න හොදේ. එතකම් මම පොඩ්ඩක් කියල දෙන්නම මොකක් ද මේ ඩොකර් (Docker) කියල කියන්නෙ. ඔයාල Docker ගැන මුලින්ම ඉගෙන ගන්නෙ මේ ලිපියෙන් නම් ඔයාල Docker කුමක් ද කියල මම තේරුම් ගත් විදියට තේරුම් ගන්න උත්සාහ කරන්න.මම මෙහිදී විස්තර කරන්නෙ Docker එක UNIX / Linux මෙහෙයුම් පද්දති වල ක්රියා කරන ආකාරයි.Docker කියන්නෙ Linux වල තියෙන Linux Containers මැනේජ් කරන්න බාවිතා කරන සිස්ටම් එකක්. එනිසා Linux Containers වල දක්නට ලැබෙන මූලික ගුණාංග සියල්ලම වගේ Docker වලත් දක්නට ලැබෙනව. අපිට මේක හොදින් තේරුම් ගන්න පුළුවන් මොනවද මේ Linux Containers කියන්නෙ කියල. අපි කවුරුත් දැකල තියෙනව Containers පෙට්ටි. මේ පෙට්ටි ටික නැවකට පටවල අනතුරුව නැව තමයි අදාල වරයට යන්නෙ. මේ Containers පෙට්ටි වල මුහුදේ ගමන් කිරීමට උපකාර වන කිසිම යාන්ත්රික උපාංගයක් නෑ. Containers පෙට්ටි වලට එක වරායක සිට අනිත් වරයට යන්න උදවු කරන්නෙ නැව තමයි. Container පෙට්ටියක් එක නැවකට සම්බන්ද වෙලා තිබුනට එක නැවකට Containers පෙට්ටි ගොඩක් සම්බන්ද වෙලා තියෙනව කියල අපි දන්නව.
Linux Containers කියනනෙත් අපි දැකල තියෙන Containers පෙට්ටි වගේ දෙයක්. අපි Linux OS කියල හදුන්වනෙ Linux kernel එකයි. මේ kernel එකත් හරියට අර නැවක් වගේ.
Linux Containers කියල ටෙක්නිකලි කියන්නෙ Operating System ලෙවෙල් එකේ virtualization method එකකට. මේක අපි දන්නා සමාන්ය VM වලට වඩා වෙනස්. මෙහිදී Linux Containers බාවිතා කරගන්නෙ Host OS එකේ තිබෙන kernel එකයි. ඒ කියන්නෙ Host server එකේ තියෙන සියලුම Linux Containers බාවිතා කරන්නෙ කාටත් පොදුවුන Linux kernel එකක්. නමුත් අපි රන් කරන processes එකිනෙකෙන් වෙන් කරල වෙන වෙනම Containers තුල තමයි රන් කරන්නෙ. මෙහිදී container එකක් තුල තියෙන process එකකට වෙනත් container එකක රන් වෙන processes එකක් සමග ගනු දෙනු කිරීමට නොහැක. මේකට අපි කියන්නෙ isolated environments කියල. මෙන්න මේ ආකාරයට තමයි Linux Containers මගින් virtualization එක වෙන්නෙ.
උදාහරණයක් ලෙස අපි බාවිතා කරන VMWare ගත් විට එහි තිබෙන එක් VM එකකට එක kernel එක බැගින් තිබෙනව(dedicated). ඒ වගේම එකකට එක බැගින් virtual hardwares සෙට් වෙන වෙනම තියෙනව.
නමුත් Linux Containers කියන ක්රමයෙදි තියෙන්නේ host server එකට අයිති real hardware ටික විතරයි. මොකද host ගෙ තියෙන kernel එක හැම Containers එකක්ම use කරන නිසා (මතක තිය ගන්න host ගෙ kernel එක තමා host ට සම්බන්ද කරලා තියෙන සියලුම hardware සමග ගනු දෙනු කරන්නෙ). මෙහිදී එක Linux Container එකක් ගත්විට එයට හැගී යන්නෙ තියෙන hardware ටික ඔක්කොම කෙලින්ම එයට connect කරල තියෙනව කියල.
(Linux Container එකක් kernel එකෙන් මෙහෙම අහන්නෙ නැතුව ඇති "මට නුඹ විතරක් වුනාට නුඹට ඉන්නෙ මං විතරද....?" කියල)
අපි Docker Engine එක මගින් කරන්නෙ මෙන මේ කියපු Linux Containers ටික මැනේජ් කරන එක.
අන්තිමට Docker කියන්නෙ Containerization technology එකක් කියල කියන්න පුළුවන්. ඔයාලට මේ ගැන යම් ගැටළුවක් තියෙනවනම් අහන්න හොදද...?
තවද අපි මේ Docker එක solution එකක් විදියට තමයි සලකන්නේ. එහිදී Docker solution එක මේ විදියට කොටස් දෙකකට වෙන් කරනු ලබනව.
The Docker engine - මෙමගින් Docker හි මුලික පරමාර්ථයට අදාල කාර්යන ඉටුකරගැනීමට අවශ්ය Docker containers පවත්වා ගැනීම සිදු කරනව.
The Docker Hub - මෙමගින් Docker images පවත්වා ගැනීම සිදු කරනව.
දැනට ඔයාල මේ කොටස් දෙක මේ විදියට සරලව තේරුම් ගන්න.
අපි දැන් කෙලින්ම බලමු කොහොමද මේ Docker බාවිතා කරන්නෙ කියල උදාහරණ සමගින්. සියලු දෙනාගේම පහසුව තකා මම මේ සදහා Ubuntu 16.04 (64bit) බාවිතා කරනවා හොදද.
(ඔයාලට මේ සදහා Google Cloud , Digital Ocean ,AWS වලින් දෙන VM එකක් යොදා ගන්න එක හරි පහසුයි.)
අපිට නොමිලේ access කරන්න පුළුවන් Docker images ගොඩක් public Docker Hub එකේ තියෙනව (https://hub.docker.com/). අපිට පුළුවන් එම Docker images බාවිතා කරලා අපිට අවශ්ය විදියට Docker containers සාදාගන්න.
Docker Install කිරීම
මුලින්ම ඔයාල Ubuntu server එකට ලොග් වෙලා මෙන්න මේ කමාන්ඩ්ස් ටික පිළිවෙලට දෙන්න.
ට්රයි sudo apt-get update && sudo apt-get upgrade -y
ට්රයි curl -sSL https://get.docker.com/ | sudo shnix@ja2k17ja-docker:~$ sudo apt-get update && sudo apt-get upgrade -y
Hit:1 http://us-central1.gce.archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://us-central1.gce.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:3 http://us-central1.gce.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
Hit:4 http://archive.canonical.com/ubuntu xenial InRelease
---
---
---
nix@ja2k17ja-docker:~$
අපි දැන් Docker install කරලා ඉවරයි. වැඩේ අවුලක් නැතුව කරගන්න පුළුවන් නම් ඔයාලට ඉහල පෙන්නලා තියෙනව වගේ රිසල්ට් එකක් ලැබෙනව. අපිට දැන් තියෙන්නෙ අපි දැනට ලොග් වෙලා ඉන්න user ව (මගේ නමේ nix කියන user) docker කියන group එකකේ මෙම්බර් කෙනෙක් කරන්න. එතකොට අපිට පුළුවන් docker කියන client application එක root පර්මිෂන් නොමැතිව රන් කරන්න. අපි docker group එකේ මෙම්බර් කෙනෙක් නොවුනොත් අපිට නිතරම sudo මගින් root පර්මිෂන් අරගෙන තමයි කමාන්ඩ්ස් රන් කරන්න වෙන්නේ. එක මර ඇණයක්. දැන් අපි nix ව docker group එකේ member කෙනෙක් කරමු. (nix කියන්නෙ දැනට මම ලොග් වෙලා ඉන්න user එකවුන්ට් එක) මම මේ සදහා sudo usermod -aG docker nixnix@ja2k17ja-docker:~$ curl -sSL https://get.docker.com/ | sudo sh
+ sh -c apt-get update
Hit:1 http://us-central1.gce.archive.ubuntu.com/ubuntu xenial InRelease
Hit:2 http://us-central1.gce.archive.ubuntu.com/ubuntu xenial-updates InRelease
Hit:3 http://us-central1.gce.archive.ubuntu.com/ubuntu xenial-backports InRelease
Hit:4 http://archive.canonical.com/ubuntu xenial InRelease
Get:5 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Fetched 102 kB in 0s (179 kB/s)
Reading package lists... Done
+ sh -c apt-get install -y -q apt-transport-https ca-certificates curl software-properties-common
Reading package lists...
----
----
----
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker your-user
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run
containers which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.
nix@ja2k17ja-docker:~$
කියන කමාන්ඩ් එක යොදා ගන්නව.
මෙන්න මේ කමාන්ඩ් එකෙන් පුළුවන් දැනට අපි ලෝග්වෙලා ඉන්න user ව කෙලින්ම docker group එකට ඇතුලත් කරන්න. මෙහිදී user name එක සදහන් නොකරයි. ඔයාල මේ විදියට ට්රයි කරන්න.
ට්රයි sudo usermod -aG docker `whoami`
දැන් අපි shell එකෙන් logout වෙලා නැවත ලොග් වෙලා බලමු අපිට් docker කමාන්ඩ්ස් බාවිතා කරන්න permission තියෙනවද කියල.nix@ja2k17ja-docker:~$ sudo usermod -aG docker `whoami`
nix@ja2k17ja-docker:~$
ට්රයි exit
නැවත ලොග් වෙලා මේ කමාන්ඩ් එක දීල චෙක් කරගනිමු.nix@ja2k17ja-docker:~$ exit
logout
Connection to 104.155.111.111 closed.
ට්රයි docker -v
ට්රයි docker infonix@ja2k17ja-docker:~$ docker -v
Docker version 17.06.0-ce, build 02c1d87
nix@ja2k17ja-docker:~$
nix@ja2k17ja-docker:~$ docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.06.0-ce
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a
runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4
init version: 949e6fa
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.8.0-56-generic
Operating System: Ubuntu 16.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 14.69GiB
Name: ja2k17ja-docker
ID: 7S22:2M57:RMYE:GTD4:2DY7:OV4I:FDHC:LP44:YSAM:62EB:LXUOWGW
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
WARNING: No swap limit support
nix@ja2k17ja-docker:~$
හරි අපිට docker කමාන්ඩ්ස් use කරන්න පර්මිෂන් තියෙනව.
අපි ඊළගට බලමු Docker image එකක් බාවිතා කරල Docker container එකක් හදාගන්න විදිය. මෙය ඉතාමත්ම පහසු ක්රියාවලියක්. ඔයාලට හරිම පහසුවෙන්ම තේරුම් ගන්න පුළුවන්.
Last edited:
WGW
