docker,
docker කියන්නේ , ඔයාගේ entire software එක package කරලා easily deploy කරන්න පුළුවන් solution එකක්.
අපි locally development කරද්දී හොදට වැඩ කරන app එක, server එකට දැම්මට පස්සේ ඒක වැඩ කරන්නේ නැතිව යනවා. එතොකොට එක fix කරන්න අපිට ටිකක් වෙලා යනවා. එකට ගොඩක් හේතුව වෙන්නේ, අපෙ local environment එකයි server environment එකයි වෙනස් නිසා.
හැබැයි අපිට පුළුවන් docker use කරලා මේ problem එක solve කරන්න. එකට හේතුව locally docker ඇතුලේ app එක වැඩ කරනවනම්, docker run වෙන ඕන server එකක අපේ app එක වැඩ.
how docker works,
docker කියන්නේ containerization platform එකක්.
containerization එක්ක ලගින්ම යන අනිත් එක තමා virtualization කියන්නේ. අපි බලමු මොකක්ද මේ දෙකේ වෙනස කියල.
virtualization (2nd image ) කියන්නේ සරලව, host os එක උඩ hypervisor software එකක් run කරලා, එක uda virutal machines හදාගන්න එක.
එතොකොට ඒ හැම virtual machine ekak ඇතුලේම entire os එකක් run වෙනවා.
ex - virtual box කියන්නේ open source hyperviosr එකක්. අපිට windows os එකක් උඩ linux install කරන්න පුලූවන් dual boot කරන්නේ නැතුව.
එතකොට docker engine එක වැඩ කරන්නේ ?,
අපේ host os එක උඩ docker engine එක run කරනවා, ඊට පස්සේ docker වලට පුළුවන් isolated process හදන්න්න. මේ අපි හදන එක process එකකට කියනවා container එකක් කියල. ඇත්තටම container එකක තියෙන්නේ මොකක් හරි එක process එකක්. ex: apache server, mysql server..
එක lightweight, අනිත් process එක්ක isolated, ඒ වගේම host OS එකේ kernel එක තමා මෙ හැම container එකක්ම share කරගන්නේ.
ඒ වගේම virtual machine එකකට වඩා fast. එකට හේතුව virtual machine එකක් restart කරනවා කියන්නේ entire OS එකම restart වෙනවා කියන එක. හැබැයි container එකක් restart වෙනව කියන්නේ, දැනටමත් run වෙන host OS එකේ process එකක් restart වෙනවා කියන එක විතරයි.
basic terms of docker
container - isolated process එකක් (මොකක් හරි එක task එකක් , etc mysql server, nginx server )
image - container එකක් run කරන්න ඕන application library, system tools, configuration files වල එකතුවක්. ඒවගේම අපිට මේ එක image එකකින් multiple containers හදාගන්න පුළුවන්.
dockerfile - docker image එකක් create කරන්න ඕන instructions තමා අපි මේකේ ලියන්නේ. ex - environment variables, port mapping, මොන toolsද install වෙන්න ඕන කියල මේ file එකේ ලියන්න පුළුවන්.
docker registry - docker image එක store කරන්න පුළුවන් place එකක්.
ex: අපි git එක්ක github වගේ remote reporsitory එකක් තියාගන්නවා වගේ වැඩක්.
- docker hub - මේක docker ලගේ official images store කරන්න තියන registry එකක්. free වගේම paid version එකක් තියනව.
- aws ecr - aws lage paid solution එකක් docker images store කරන්න තියෙන
.
හරි දැන් අපි docker වලින් container එකක් හදල බලමු,
මුලින් ඔය docker install කරගන්න ඔයාගේ os එක අනුව.
https://docs.docker.com/get-docker/
check docker installed, then it will show the help menu
docker
pull mysql docker image from docker hub
docker pull mysql:5.7
view downloaded docker images
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 a4fdfd462add 5 days ago 448MB
create a docker container from docker image
docker run --name my_db -p 9000:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
--name used for container name (අපිට කැමති නමක් දෙන්න පුළුවන් )
-e used for environment variables
-i or -d used for running mode,
container එකක් run වෙන විදී දෙකක් තියනව.
- -i ඔයාට container එකේ input outputs shell එකෙන් බලාගන්න පුළුවන්. ඔය ඒ shell එක close කරෝතින් container එක stop වෙනවා
- -d container එක run වෙන්නේ background process එකක් විදිහට.
-p used for port mapping,
අපි මුලින් කිවා container එකක් කියන්නේ process එකක් කියල, එකියන්නේ සරලව container එක මොකක්හරි port එකක run වෙනව කියන එකයි . mysql ගත්තොත් එයා default port number 3306 එකේ run වෙනවා.
එකියන්නේ container eka athule අපේ mysql server එක port 3306 run wenawa. හැබැයි අපිට තාම අපේ host OS එකේ idan container එකට connect wenna බැහැ. මොකද host os එක මේ process eka ගැන දන්නේ නැති නිසා.
එනිසා අපිට සිද්ද වෙනවා container port එක ape host OS එකේ port එකකට map කරන්න. මං මේකේ 3306 කියන container eke run වෙන port එක 9000 kiyana host OS එකේ port එකකට map karala තියෙන්නේ.
check running containers
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3788c9366954 mysql:5.7 "docker-entrypoint.s…" 2 minutes ago Up About a minute 33060/tcp, 0.0.0.0:9000->3306/tcp my_db
now you can connect to the running container
mysql -h 127.0.0.1 -P 9000 -uroot -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
to stop running container,
docker ps # list running containers
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3d87881b0ce mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 33060/tcp, 0.0.0.0:9000->3306/tcp my_db
docker stop d3d87881b0ce # cotaniner id
get all containers (running or stopped)
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3788c9366954 mysql:5.7 "docker-entrypoint.s…" 5 minutes ago Up 11 seconds 33060/tcp, 0.0.0.0:9000->3306/tcp my_db
c9142a5d1251 char:latest "/bin/bash ./run.sh" 8 days ago Exited (1) 8 days ago pensive_shtern
8266e6f237e2 5c8c4e171da6 "/bin/bash ./run.sh" 8 days ago Exited (1) 8 days ago
මේක docker වල basic overview එකක් විතරයි. තව ගොඩක් concepts තියනවා ඉගෙන ගන්න. මං ඒවත් ඉස්සරහට දාන්නම්.