Docker ගැන සිංහලෙන් - part 01



  • 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 කියන්නේ. අපි බලමු මොකක්ද මේ දෙකේ වෙනස කියල.

    alt text

    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 තියනවා ඉගෙන ගන්න. මං ඒවත් ඉස්සරහට දාන්නම්.


  • Web Development

    Elakiri bro


  • Linux Help

    Niyamai bro. digatama continue karamu



  • @oditha thanks bro



  • @root thanks bro



  • Niyamai ❤💪


  • Web Development

    patta bro



  • ඒක නම් ගොඩක් වැදගත්. මේක ගැන තව ලියන්න පුලුවන්නම් නියමයි.



  • @Thilina-jayakody thanx bro



  • digatama damu ❤



  • part 2 ekath ikmanata danna bro.



  • Thank you.. superb! so much helpful ❤