Thuta Learning
ရှာဖွေရန်
ExercisesDevOps & Toolsintermediate

Docker Practice: Compose, Volume & Network

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Docker Practice: Compose, Volume & Network ကို ကိုယ်တိုင် လေ့ကျင့်ကြည့်မယ်
  • သင်ခဲ့ပြီးသား skill တွေကို practice လုပ်ပြီး ခိုင်မာအောင်လုပ်မယ်
  • အမှားရှာ၊ ပြင်တတ်၊ ကိုယ်တိုင် check လုပ်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

ဒီ exercise set ကတော့ Basic exercise ထက် တစ်ဆင့်တက်ပြီး Compose, Volumes, Networking concept သုံးခုကို ပေါင်းစပ်သုံးရမယ့် practice ပါ။ Teaching အသစ်မဟုတ်ဘဲ compose-intro, compose-file, volumes, networking lesson တွေမှာ လေ့လာခဲ့တဲ့အရာတွေကို တစ်ခုတည်းသော project setup ထဲမှာ ပေါင်းသုံးကြည့်ရမှာပါ။ Service နှစ်ခုကို docker-compose.yml တစ်ခုတည်းထဲမှာ သတ်မှတ်ပြီး၊ database အတွက် data ကို volume နဲ့ persist လုပ်ကာ၊ service ချင်း network အတွင်းက service name နဲ့ တစ်ခုနဲ့တစ်ခု ဘယ်လို ချိတ်ဆက်တယ်ဆိုတာကို လက်တွေ့ စမ်းသပ်ရပါမယ်။ ဒီလို hands-on practice က real project setup ထဲမှာ Compose ကို ဘယ်လိုသုံးရမလဲဆိုတာကို ပိုပြီးရင်းနှီးစေပါတယ်။

လေ့ကျင့်ခန်းများ

Task 1 - app service (nginx လိုမျိုး) နဲ့ db service (postgres) နှစ်ခုပါတဲ့ docker-compose.yml ကို ကိုယ်တိုင်ရေးပါ၊ service နှစ်ခုစလုံးကို custom network တစ်ခုအောက်မှာ ထားပါ။ Task 2 - postgres service အတွက် named volume တစ်ခု ထည့်ပြီး docker compose down ပြန်လုပ်ပြီး docker compose up ပြန်လုပ်ကြည့်တဲ့အခါ data ဆက်ရှိနေကြောင်း စစ်ဆေးပါ။ Task 3 - docker compose exec app ping db (or curl) command run ကြည့်ပြီး service name (db) ကိုပဲသုံးပြီး တစ်ခုနဲ့တစ်ခု reach လုပ်နိုင်ကြောင်း confirm လုပ်ပါ။ Task 4 - environment variable (ဥပမာ POSTGRES_PASSWORD) ကို docker-compose.yml ထဲမှာ ထည့်ပြီး depends_on သုံးပြီး startup order ကို control လုပ်ကြည့်ပါ။

Code နမူနာ

yaml
# docker-compose.yml
version: "3.9"
services:
  app:
    image: nginx
    ports:
      - "8080:80"
    networks:
      - app-net
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - app-net

networks:
  app-net:

volumes:
  db-data:
You should see
docker compose up ပြီးရင် app နဲ့ db service နှစ်ခုစလုံး running ဖြစ်ရမယ်၊ db ကို service name နဲ့ reach လုပ်လို့ရရမယ်၊ container down/up ပြန်လုပ်လည်း db data မပျောက်ဘဲ ကျန်ရှိနေရမယ်။

၅ မိနစ် စမ်းကြည့်

5 minutes အတွင်း docker-compose.yml ကို docker compose down -v (volume ပါဖျက်) နဲ့ docker compose down (volume မဖျက်) ကွာခြားချက်ကို compare လုပ်ကြည့်ပါ၊ data ဘယ်အချိန်ပျောက်၊ ဘယ်အချိန်ကျန်လဲ သတိထားကြည့်ပါ။

သတိလေးတစ်ချက်

docker compose down -v ကို run လိုက်ရင် volume အားလုံးပါ ဖျက်ပစ်လိုက်တာမို့ real data ရှိနေတဲ့ project တွေမှာ -v flag ကို သတိထားပြီးမှသုံးပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • volume ကို compose file ထဲမှာ mount လုပ်ဖို့ မေ့ကျန်ခဲ့လို့ container ပြန် restart တိုင်း database data အကုန်ပျောက်နေတာ
  • service ချင်းချိတ်ဆက်တဲ့အခါ localhost ကိုသုံးထားလို့ (service name db အစား) connection refused error ကြုံရတာ

အခု ကိုယ်တိုင် စမ်းကြည့်

5 minutes အတွင်း docker-compose.yml ကို docker compose down -v (volume ပါဖျက်) နဲ့ docker compose down (volume မဖျက်) ကွာခြားချက်ကို compare လုပ်ကြည့်ပါ၊ data ဘယ်အချိန်ပျောက်၊ ဘယ်အချိန်ကျန်လဲ သတိထားကြည့်ပါ။

You'll know it worked when: docker compose up ပြီးရင် app နဲ့ db service နှစ်ခုစလုံး running ဖြစ်ရမယ်၊ db ကို service name နဲ့ reach လုပ်လို့ရရမယ်၊ container down/up ပြန်လုပ်လည်း db data မပျောက်ဘဲ ကျန်ရှိနေရမယ်။

Docker Practice: Compose, Volume & Network | Thuta Learning