រំលងទៅមាតិកាសំខាន់

Docker - Container and Image

Docker Container

Docker container ជាដំណើរការ instance នៃ image។ អ្នកអាចប្រើ command line interface(CLI) ដើម្បីបញ្ជាឲ្យដំណើរការ, ចាប់ផ្តើម​, បញ្ឈប់, ផ្លាស់ទី, ឬលុប container។ អ្នកក៏អាចកំណត់នូវរចនាសម្ព័ន្ធសម្រាប់ network និង environment variables ផងដែរ។ Docker container មានលក្ខណៈដាច់ដោយឡែកនិងជាកម្មវិធីដែលមានសុវត្ថិភាព ប៉ុន្តែវាអាចចែករំលែកនិងអាចចូលទៅកាន់ប្រភពដែលកំពុងត្រូវបានដំណើរការនៅក្នង hostcontainer ផ្សេងគ្នា។

Docker Image

Image ជា read-only template with instructions ដែលប្រើសម្រាប់បង្កើតនូវ Docker container។ វាត្រូវបានពិពណ៌នានៅក្នុងឯកសារអត្ថបទមួយហៅថា Dockerfile ដែលមានលក្ខណៈសាមញ្ញហើយនិងបានកំណត់នូវ syntax បានយ៉ាងល្អ។

ឧទាហរណ៍

អ្នកអាចយល់ពី container និង image ដោយមានជំនួយពីពាក្យបញ្ជាខាងក្រោម៖

$ docker run hello-world

ពាក្យបញ្ជាខាងលើ docker ដំណើរការ hello-world មានបីផ្នែក៖

  1. docker: វាជា docker engine ហើយវាប្រើសម្រាប់ដំណើរការនូវកម្មវិធី docker។​ ហើយពេលប្រើវា វានឹងប្រាប់ទៅប្រព័ន្ធប្រតិបត្តិការថាអ្នកកំពុងតែដំណើរការកម្មវិធី docker
  2. run: ពាក្យបញ្ជារងមួយនេះប្រើសម្រាប់បង្កើតនិងដំណើរការ docker container
  3. hello-world: វាជាឈ្មោះរបស់ image។ អ្នកគួរតែបញ្ជាក់ពីឈ្មោះរបស់ image ដើម្បីអាចផ្ទុកក្នុង container

ពាក្យបញ្ជាពិសេសៗដែលត្រូវប្រើជាប្រចាំថ្ងៃ

  • ទាញយក Image:

    $ docker pull nginx
    • ប្រើសម្រាប់ទាញយក image ចេញពី docker hub ហើយ nginx ជាឈ្មោះរបស់ image
  • បង្ហាញនៅ Image:

    $ docker images ឬ​ $ docker image ls
    • ប្រើសម្រាប់បង្ហាញនូវ images ទាំងអស់ដែលមាននៅក្នុងម៉ាស៊ីន។
  • ដំណើរការ Container:

    $ docker run nginx:latest
    • ប្រើសម្រាប់ដំណើរការ container របស់ image ដែល nginx គឺជាឈ្មោះរបស់ image រីឯ latest ដែលនៅជាប់នោះគឺ​ version របស់ image ហើយត្រូវភ្ជាប់វាជាមួយនឹងសញ្ញា colon(:) នៅពីមុខ version ផង។
    $ docker run -d nginx:latest
    • ប្រើសម្រាប់ដំណើរការ container ដូចនឹង docker run nginx:latest ដែរ តែ​ពាក្យបញ្ជានេះគឺប្រតិបត្តិលក្ខណៈជា detached mode ពោលគឺដំណើរការ container ហើយគឺអ្នកអាចប្រើប្រាស់ console ដែលអ្នកកំពុងដំណើរការ container បានធម្មតា តែបើប្រើពាក្យបញ្ជា ខាងលើដំបូងនោះវិញគឺមិនអាចប្រើប្រាស់ console បាននោះទេ។
  • បង្ហាញនៅ Container:

    $ docker container ls ឬ $ docker ps
    • ប្រើសម្រាប់បង្ហាញនូវ container ទាំងអស់ដែលកំពុងត្រូវបានដំណើរការ។
    $ docker ps -a
    • ប្រើសម្រាប់បង្ហាញនៅរាល់ container ទាំងអស់ មិនថា container មួយនោះកំពុងត្រូវបានដំណើរការឬក៏បញ្ឈប់ក្តី។
    $ docker ps -q
    • ប្រើសម្រាប់បង្ហាញតែ ID របស់ container ដែលកំពុងត្រូវបានដំណើរការ។
    $ docker ps -aq ឬ $ docker ps -a -q
    • ប្រើសម្រាប់បង្ហាញតែ ID របស់ container ទាំង container ដែលកំពុងត្រូវបានដំណើរការនិងមិនកំពុងត្រូវបានដំណើរការ។
    $ docker ps --format="ID\t{{.ID}}\nNAME\t{{.Names}}\nImage\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n"
    • ប្រើសម្រាប់បង្ហាញនូវ containers ទាំងអស់ដែលកំពុងត្រូវបាន run ក្នុងលក្ខណៈ format ងាយស្រួលក្នុងការមើល។
    export FORMAT="ID\t{{.ID}}\nNAME\t{{.Names}}\nImage\t{{.Image}}\nPORTS\t{{.Ports}}\nCOMMAND\t{{.Command}}\nCREATED\t{{.CreatedAt}}\nSTATUS\t{{.Status}}\n"
    • ប្រើសម្រាប់ export path variable នៅក្នុងម៉ាស៊ីនដើម្បីងាយស្រួលហៅប្រើលើកក្រោយដោយមិនចាំបាច់សរសេរច្រើនបន្ថែមទៀត។
    $ docker ps --format=$FORMAT
    • ប្រើសម្រាប់បង្ហាញ container ដែលមានលក្ខណៈ format ដោយហៅពី path variable មក។
  • បញ្ឈប់ Container:

    $ docker stop 19411e21c4fa
    • ប្រើសម្រាប់បញ្ឈប់ container ហើយ 19411e21c4fa គឺជាលេខ ID របស់ container
    $ docker stop boring_merkle
    • ប្រើសម្រាប់បញ្ឈប់ container ដូចទៅនឹងពាក្យបញ្ជាខាងលើដែរតែពាក្យបញ្ជា (docker stop 19411e21c4fa) ខាងលើគឺប្រើ ID របស់ container តែ ពាក្យបញ្ជានេះវិញគឺប្រើឈ្មោះរបស់ container វិញ តែយ៉ាងណាមិញអ្នកចង់ប្រើជម្រើសមួយណាក៏បាន។
  • Exposing Port:

    $ docker run -d -p 9000:80 nginx:latest
    • ប្រើសម្រាប់ដំណើរការ container ជាលក្ខណៈ detached mode ហើយមានការរួមបញ្ចូលជាមួយនឹងការបញ្ជាក់យ៉ាងច្បាស់ជាមួយនឹង expose port ដែលទុកប្រើសម្រាប់ដំណើរការកម្មវិធី nginx ហើយដើម្បីបញ្ជាក់ expose port បាន អ្នកត្រូវប្រើស្លាក -p ហើយបន្ទាប់គឺ port ដែលអ្នកចង់ដាក់ ហើយបន្ទាប់គឺសញ្ញា colon(:) ហើយបន្ទាប់គឺ port របស់ container នោះផ្ទាល់។
    $ docker run -d -p 9000:80 -p 9010:80 nginx:latest
    • ប្រើសម្រាប់ដំណើរការ container ដូចពាក្យបញ្ជាខាងលើដែរ តែអ្នកអាចប្រើ multiple port បាន ពោលគឺអ្នកប្រើ port 9000 ក៏ដំណើរការជោគជ័យ ឬក៏ប្រើ port 9010 ក៏ដំណើរការជោគជ័យ។
  • ការចាប់ផ្តើម Container:

    $ docker start 19411e21c4fa ឬ $ docker start boring_merkle
    • ប្រើសម្រាប់ចាប់ផ្តើមដំណើរការ container ដែលមានរួចជាស្រេច ហើយអ្នកចង់ប្រើជម្រើសចាប់ផ្តើមដោយ ID របស់ container ក៏បាន​ ឬក៏ប្រើជម្រើស​ចាប់ផ្តើមដោយឈ្មោះរបស់ container ក៏បាន។
  • ការលុប Container:

    $ docker rm 19411e21c4fa ឬ $ docker rm boring_merkle
    • ប្រើសម្រាប់លុប container ចោលហើយការលុបមួយនេះ អ្នកអាចលុបដោយប្រើ ID របស់ container ក៏បានឬក៏ឈ្មោះរបស់ container ក៏​បាន ហើយមួយវិញទៀត អ្នកអាចលុប container ចោលបាន លុះត្រាតែ container នោះត្រូវបានបញ្ឈប់ជាមុនសិន។
    $ docker rm -f 19411e21c4fa ឬ $ docker rm -f boring_merkle
    • ប្រើសម្រាប់លុប container ចោលដូចនឹងពាក្យបញ្ជាខាងលើដែរ តែការលុបនេះគឺលុបក្នុងលក្ខណៈ force mode គឺមានន័យថាលុប container ចោលដោយមិនចាំបាច់ត្រូវបញ្ឈប់ container នោះទេ ហើយការលុបមួយនេះ អ្នកអាចលុបដោយប្រើ ID របស់ container ក៏បានឬក៏ឈ្មោះរបស់ container ក៏​បាន។
    $ docker rm $(docker ps -aq)
    • ប្រើសម្រាប់លុប container ចោលទាំងអស់ដោយប្រើ ID របស់ container សម្រាប់រាល់ containers ដែលត្រូវបានបញ្ឈប់។
    $ docker rm -f $(docker ps -aq)
    • ប្រើសម្រាប់លុប container ចោលទាំងអស់ដែរ តែអ្នកអាចលុបទាំង containers ដែលកំពុងតែត្រូវបានដំណើរការនិងមិនដំណើរការ។
  • ការដាក់ឈ្មោះទៅឲ្យ Container:

    $ docker run -d --name nginx-ms -p 9000:80 nginx:latest
    • ប្រើសម្រាប់កំណត់ឈ្មោះទៅតាមឈ្មោះអ្វីដែលអ្នកចង់ដាក់ --name គឺជាស្លាកតំណាងឲ្យការកំណត់ឈ្មោះ ចំណែកឯ nginx-ms គឺជាឈ្មោះរបស់ container ដែលអ្នកចង់ដាក់។
  • Volumes:

    $ docker run --name cambodia-website -d -p 9000:80 -v /home/mengsreang/Desktop/cambodia-website:/usr/share/nginx/html nginx:latest
    • ប្រើសម្រាប់​ដំណើរការ container ដោយមានកំណត់ជាលក្ខណៈ volumes ដែលធ្វើការភ្ជាប់ project ដែលមាននៅក្នុងកុំព្យូទ័ររបស់អ្នកទៅកាន់ server របស់ nginx ក្នុង docker។​ សម្រាយបន្តិច: ស្លាក -v គឺតំណាងឲ្យ volumes រីឯ /home/mengsreang/Desktop/cambodia-website គឺជាទីតាំង project របស់អ្នកនៅក្នុងកំព្យូទ័រ ហើយមួយទៀតគឺ /usr/share/nginx/html គឺជាទីតាំង project របស់ nginx server ហើយកុំភ្លេចដាក់សញ្ញា colon(:) នៅពីមុខផង។
    $ docker exec -it cambodia-website bash
    • ប្រើសម្រាប់បង្កើត bash ដើម្បីចូលទៅមើល project នៅក្នុង nginx server។​ សម្រាយបន្តិច exec គឺតំណាងឲ្យការ execute រីឯស្លាក -it គឺមានន័យថា execute bash ជាលក្ខណៈ interative mode