Docker Container

2 Aug 2016

Share to:

สําหรับบทความนี้จะมีเนื้อหาเกี่ยวกับ Docker Container นะครับ เราจะมาดู และทําความเข้าใจกันว่า Docker Container มันคืออะไร และเกี่ยวข้องกับ Docker Image อย่างไร

ทําความเข้าใจ Docker Container

Image

หลังจากที่เราสร้าง Docker Image ขึ้นมา และเราก็นํา Docker Image นั้นมารัน Docker Engine ก็จะทําการสร้าง Docker Container ขึ้นมาอยู่ในเครื่องเราพร้อมทั้ง Start Container นั้นด้วย เราสามารถที่จะสั่ง Start, Stop Container ได้ การที่เราสั่ง Start หรือ Stop Container  Docker Container ก็ยังคงอยู่ในเครื่องเรา Container จะหายไปก็ต่อเมื่อเราสั่งลบมัน

ใน Docker Container มีอะไรบ้าง

สําหรับ Docker Container ให้เราจินาการว่ามันเป็นเครื่อง Server 1 เครื่อง ที่ถูกจําลองสภาพแวดล้อมขึ้นมาซึ่งภายในก็จะมีไฟล์ต่างๆที่ OS นั้นๆควรจะมี ไฟล์ต่างๆเหล่านี้จะเป็นไฟล์ที่อยู่ใน Container เท่านั้น จะไม่เกี่ยวข้องกับ Container อื่น หรือ ไฟล์ใน OS หลัก (OS ของ Server จริงๆ) ดังนั้นเมื่อไฟล์ หรือข้อมูลใน Container ใดๆ เกิดการเปลี่ยนแปลง จะไม่มีผลกับ Container อื่นๆ และก็จะไม่มีผลอะไรกับ OS หลักด้วย จากที่ผมบอกไปตอนต้นว่าไฟล์หรือข้อมูลต่างๆใน 1 Container จะไม่เกี่ยวข้องกับ OS หลัก แต่เราสามารถที่จะ Map path จากภายใน Container ออกมายัง path ของ OS หลักได้ ด้วย Data volumes ผมจะอธิบายในหัวข้อถัดไปครับ

Data volumes

Image

Data volumes จะถูกสร้างขึ้นมา เมื่อ Container ถูกสร้างขึ้น และเราสามารถที่จะ add หรือ map path ของ OS หลัก เข้ากับ path ของ Container ได้ อาจจะถามว่า แล้วเราจะ map เพื่ออะไร จากที่ผมบอกไปตอนต้นว่า Container จะถูกส้รางเมื่อ เรารัน Docker Image และข้อมูลภายใน Container จะไม่เกี่ยวข้องกับภายนอกเลย เมื่อใดที่ Container ถูกลบ ข้อมูลที่อยุ่ภายในก็จะหายด้วย ดังนั้นเราจึงต้อง map path ออกมาข้างนอกเพื่อเก็บข้อมูลที่สําคัญๆ เช่นข้อมูลของ database ฯลฯ ส่วนวิธีการ map path และการ run Container ผมจะบอกในหัวข้อถัดไป

Container จะถูกสร้างหรือ ลบเมื่อไรก็ได้ไม่สําคัญ สิ่งที่สัาคัญคือ Image และข้อมูลต่างๆ ดังนั้นเราไม่ควรเก็บข้อมูลต่างๆไว้ใน Container เพราะเมื่อ Container เราถูกลบ ข้อมูลของเราจะหายไปด้วย

วิธี Run Container

วิธีใช้คําสั่ง Run docker เพื่อสร้าง Container จาก Docker Image ใช้คําสั่งนี้

docker run <option> <image id/name> <command>

อธิบายการใช้งานคําสั่ง

  • คือ option เพิ่มเติมสําหรับการ Run เช่น -i หมายถึง ถ้ารัน application ของเราใน Container นั้นเสร็จ จะ Stop Container นั้นให้เอง
  • <image id/name> คือ ชื่อของ Docker Image หรือ ID ที่ต้องการ run
  • คือ Command ที่ต้องการให้ Execute หลังจาก Container Start แล้ว ในส่วนตรงนี้จะใส่หรือไม่ใส่ก็ได้ ถ้าในกรณีที่ image มีการ run Application บางอย่างเป็น default อยู่แล้วก้ไม่ต้องใส่

ตัวอย่าง ถ้าผมต้องการจะ Run node image ผมจะใช้คําสั่งนี้

docker run -t -d --name test_run_node -p 3000:8080 -v /home/pi:/usr/src/app node

รายละเอียดของคําสั่ง

  • -t คือ Allocate a pseudo-TTY
  • -d คือ ให้ run เป็น background
  • -p คือ ให้ map port 8080 ของ Container เข้ากับ port 3000 ของ OS หลัก
  • —name ชื่อของ Container ที่จะถูกสร้างขึ้น
  • -v คือ map path /usr/src/app ของ Container เข้ากับ /home/pi ของ OS หลัก
  • node ชื่อของ Docker Image

เมื่อใช้คําสั่งนี้ Docker จะหาว่าในเครื่องของเรามี Docker Image ที่เราระบุหรือป่าว ถ้าไม่มี Docker  จะไปค้นหาและโหลด Docker Image จาก hub.docker.com แล้วเราก็จะได้ Container ที่ชื่อว่า test_run_node ขึ้นมา 1 อัน

Option ของ docker run

Image

Suggestion blogs

ติดตั้ง Nginx เพื่อใช้งานร่วมกับ Apache2

ในปัจจุบันมี web server อยู่สองเจ้าที่ได้รับความนิยมคือ apache2 และ nginx สองเจ้านี้จะมีขอดีข้อเสียงต่างกัน nginx จะมีข้อดีคือ สามารถรองรับ user concurrent และ request static file ได้ดีกว่า apache2 ส่วน apache2 มีข้อดีคือ PHP ซึ่ง PHP ของ nginx นั้น จะทำงานผ่านโมดูล FastCGI อีกทีหนึ่ง  ซึ่งจะได้ Performance ที่ช้ากว่า mod_php ของ apache2 ที่ทำงานแบบ

เทคนิคการเขียน JavaScript แบบมืออาชีพ

สวัสดีครับ ในบทความนี้เราจะมาเรียนรู้เทคนิคการเขียน JavaScript แบบมืออาชีพกันครับ ซึ่งเป็นเทคนิคเล็กๆน้อยๆที่จะช่วยให้สามารถเขียน Code ได้กระชับ และอ่านง่ายมากยิ่งขึ้น

จัดการ Data flow ด้วย Redux ใน React

Redux เป็น Library ที่จะช่วยควบคุมการไหลของข้อมูลใน Application ของเราให้ดีขึ้น ซึ่งจะช่วยให้เราคาดการได้ว่าเมื่อเกิดเหตุการณ์ใดใน Component แล้วจะมีผลอะไรกับ Application ของเราบ้าง ถ้ายังนึกภาพไม่ออกให้ดูรูปนี้


Copyright © 2019 - 2024 thiti.dev |  v1.34.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Youtube channel   Telegram   Email contact   วงแหวนเว็บ