💻 Development වැඩ ලේසි කරගන්න Docker use කරමු

Ted Mosby

Junior member
  • Aug 29, 2021
    31
    94
    18
    Development වැඩ ලේසි කරගන්න Docker use කරමු


    අපේ developing කරන කොල්ලෝ කෙල්ලෝන්ට තියෙන common ප්‍රශ්න තමයි develop කරන laptop එහෙම format කරාට පස්සේ ආයෙමත් development environment එක setup කරගන්න එක. PHP install කරලා MYSQL install කරලා තව ඉතින් Redis/RabbitMQ වගේ එක ඕන වෙනවා නම් දවස් බාගයක් විතර යනවා ඔක්කොම install කරලා setup කරලා ඉවර කරගන්න.

    ඊට පස්සේ පරණ වැඩ කරපු project එහෙම clone කරලා වැඩේ කරන්න යනකොට වැඩ කරන්නේ නෑ. තව දවස් එකහාමාරක් විතර හොයලා හොයලා බලනකොට තමයි තේරෙන්නේ PHP 7.0, MySQL 5.7 ඕන එකට අලුතෙන් install කරද්දී කරලා තියෙන්නේ PHP 7.3, MySQL 8.0. ඊටපස්සේ ඒක හදාගෙන එහෙම එනකොට තව දවස් බාගයක් විතර විතර ගිහින්.

    සහ තව තව ප්‍රශ්න තියෙනවා. ඔයාට ඕන උනොත් PHP version දෙක තුනක් manage කරන්න. MYSQL version දෙක තුනක් manage කරන්න. Mongodb version දෙක තුනක් manage කරගන්න වගේ හරිම කරදරයි.

    මම නම් දැන් කාලෙක ඉදන් මේ වගේ හැම එකකකට use කරන්නේ Docker. Docker ගැන දන්නේ නැත්නම් comment එකක් දාන්න මම ඒ ගැන වෙනම කියලා දෙන්නම්. ඒ නැතත් ගොඩක් online resources තියෙනවා docker basics ඉගෙන ගන්න.

    මම අලුතෙන් development environment එක setup කරනවා නම් (format කරාට පස්සේ වගේ) මුලින්ම install කරන්නේ git ඊට පස්සේ docker and docker-compose.

    මගේ හැම project එකකම docker-compose ෆයිල් එකක් තියෙනවා. මම මේකේ දාන්නේ project එක run කරන්න ඕන services. PHP, MYSQL, RABBITMQ, REDDIS වගේ.

    YAML:
    version: "3.9"
    services:
    
      app:
        image: php-73
        ports:
          - "9001:80"
        volumes:
          - ${PWD}:/app
    
      redis:
        image: redis
        ports:
          - "9002:6379"
    
      mysql:
        image: mysql
        ports:
          - "3333:3306"

    මෙන්න මේ වගේ. php-73 කියන්නේ මගේ custom image එකක්. මොකද laravel වගේ ඒවාට සැහෙන්න extentions එහම ඕනේ. ඒක නිසා laravel වලට ඕන ඒවා install කරපු image එකක් තියාගෙන ඉන්නේ.

    දැන් මේකේ හැටියට කොහොමද mysql, reddis වලට connect වෙන්නේ ?

    app එක connect වෙන්නේ හොස්ට් එක තමයි mysql, port eka 3306. ඒ කියන්නේ හොස්ට් එකේ localhost වෙනුවට mysql කියලා දෙන්න. ඔයාගේ web app එක localhost:9001 වලින් access කරන්න පුළුවන්. ඔයාට mysql db එක බලන්න ඕනේ නම් work bench එකෙන් localhost 3333 port එකෙන් බලන්න පුළුවන්.

    එතකොට composer install වගේ කරන්නේ කොහොමද ?

    එකට docker app container එකට exec වෙන්න ඕනේ. docker exec -it CONTIANER_ID /bin/bash කියලා දුන්නම ඔයාට docker container එකට access හම්බෙනවා. ඔට පස්සේ composer install වගේ ඒවා කරන්න පුළුවන්.

    මේ project එකේ වැඩ කරලා ඉවර උනාම docker-compose stop කියන command එක run කරාම ඔයාගේ ඔක්කොම services ටික නවතිනවා. ආයෙමත් මේ project එකේ වැඩ පටන් ගන්නකොට start කරගන්න තියෙන්නේ.


    වැදගත්ම දේ තමයි ඔයාට මේ project එක වෙන කාට හරි යවන්න ඕනේ උනොත් කෙලින්ම යවන්න පුළුවන් මොකද ඒ කෙනාටත් ඔයාගේ php version install කර කර ඉන්න ඕනේ නැ. docker-compose එක run කරපු ගමන් ඔක්කොම වැඩ.

    It works on my machine කියලා කියන්න ඕන වෙන්නේ නැ

    එහෙනම් අදට ගියා.
    තව දවසකින් මේ වගේම post එකක් අරගෙන එන්නම්. ඔයාලට ඕන දේවල් comment කරන්න. අදහසක් දාගෙනම යන්න.
     

    Ted Mosby

    Junior member
  • Aug 29, 2021
    31
    94
    18
    good post,
    mn docker dala imge ekk up krla vs on krpu gmn ram eka cpu eka ynwa 98% wtr. wada krgnd ba. lol
    ඔව් එහෙම ප්‍රශ්න තියෙනවා. සමහර වෙලාවට docker එකට විතරක් මගේ 7GB විතර RAM එක use වෙනව්.

    Good post. Development setup tika hadaganna ona machan Docker dala.
    ඔව් මචං වැඩේට වැය වෙලාවට වඩා ගොඩක් වෙලා ඉතුරු කරගන්න පුළුවන්
     
    • Like
    Reactions: Gwynbleidd

    Tikiril

    Well-known member
  • May 14, 2021
    148
    309
    63
    පොඩි දෙයක් එකතු කරන්නම්. :D

    මේක multi-stage විදියට config කරගන්න. ඒ කියන්නෙ dev කරන්න ඒක stage එකක්, QA කරන්න එක ස්ටේජ් එකක්, Production release එක අන්තිම ස්ටේජ් එක. මේකෙන් වෙන්නෙ, අනවශ්ය දේවල්, ඕන නැති ලේවල් වලට යන්නෙ නැති වෙන එක.
    උදාහරණයක් විදියට, release කරන production build එකට dev environment එකේ දේවල් ඕන නෑ. minimal binary ටික තමයි එතන්ට ඕනි. එකම build එක, ඕන තැනකින් නවත්තල දෙන්න පුලුවන් ලැබෙන කෙනා අනුව. :yes:
    Jenkins Build agent කෙනෙක් Config කරගන්න පුලුවන් ලේසියෙන්ම, ඕන තැනකින් බිල්ඩ් එකක් ගන්න.

    මේක සපෝර්ට් කරන්නෙ Docker Engine 17.05 වල ඉදල. :P