Introduction to Container Technologies
Tags: docker
Published: 2021-02-13 06:05:39

อ้างอิงจาก [บทความที่แล้ว](https://dev.to/pradist/deploy-a-static-website-with-docker-and-nginx-31i1) ที่ไม่ได้บอกความเป็นมาของ Docker ก็เลยจะนำมาเล่า ในบนความนี้ ก่อนที่จะรู้จักกับ Docker จะขอเล่าถึงเรื่อง Container Technologies กันก่อน

ก่อนอื่นถ้าเป็นสาย developer ทุกคนคงเคยได้ยินกับคำพูดที่ว่า "Code นี้ Run ที่เครื่องผม Work นะครับ" แต่มันไม่ได้ Work กับทุก Environment เช่น ในเครื่องของ developer คนอื่น หรือบน Environment อื่นๆ และจะทำยังไงให้ Code ที่เขียนสามารถ Run แล้ว Work ในทุก Environment นี่เลยเป็นที่มาของ Software Container ผู้คิดได้เปรียบเทียบ Software กับการส่งสินค้าในรูปแบบของตู้ Container ซึ่งเราไม่ต้องรู้หลอกว่าของภายในเป็นอะไรลักษณะแบบใด จะต้องใช้อุณหภูมิปกติหรือต้องแช่แข็ง แต่วิธีการส่งคือส่งแบบเดียวกัน ใช้เคนยกขนาดเดียวกัน

#### Software Container 
เป็น concept ของการสร้างสภาพแวดล้อมเฉพาะให้ซอฟต์แวร์ทำงานได้โดยไม่กวนกับซอฟต์แวร์ตัวอื่นบนระบบปฏิบัติการเดียวกัน เราสามารถเอา Container ไปรันในคอมพิวเตอร์หรือ Server เครื่องไหนก็ยังทำงานได้เหมือนเดิม โปรแกรมใน Container ยังทำงานได้ปกติไม่ผิดเพี้ยนจากเดิม โดยจะมี Docker มาเป็นตัว Engine

#### Docker 
เป็น engine ตัวหนึ่งที่มีการทำงานในลักษณะจำลองสภาพแวดล้อมขึ้นมาบนเครื่อง server เพื่อใช้ในการ run service ที่ต้องการ มีการทำงานคล้ายคลึงกับ Virtual Machine เช่น VMWare, VirtualBox, XEN, KVM แต่ข้อแตกต่างที่ชัดเจนคือ Virtual Machine ที่รู้จักกันก่อนหน้านี้นั้น เป็นการจำลองทั้ง OS เพื่อใช้งานและหากต้องการใช้งาน service ใดๆ จึงทำการติดตั้งเพิ่มเติมบน OS นั้นๆ แต่สำหรับ docker แล้วจะใช้ container ในการจำลองสภาพแวดล้อมขึ้นมา เพื่อใช้งานสำหรับ 1 service ที่ต้องการใช้งานเท่านั้น โดยไม่ต้องมีส่วนของ OS เข้าไปเกี่ยวข้องเหมือน Virtual Machines

#### Docker products
[1] Community Edition (CE): ไม่มีค่าใช้จ่ายเหมาสำหรับผู้พัฒนา
[2] Enterprise Edition (EE): มีค่าใช้จ่ายโดยจะเสียค่า Licence แบบรายปี มี Support ตลอด 24 ชม. เหมาะสำหรับองค์กรใหญ่ ที่ต้องการใช้ feature ของ Docker ยกตัวอย่างเช่น Tool ที่เอาไว้ Monitoring ต่างๆเพื่ออำนวยความสะดวกกับผู้ใช้งานมากขึ้น

#### วิธี Install Docker CE
โดยสามารถติดตั้งได้ทั้ง [Linux](https://docs.docker.com/engine/install/), [Mac](https://docs.docker.com/docker-for-mac/install/) และ [Windows](https://docs.docker.com/docker-for-windows/install/)

วิธีตรวจสอบให้เข้าไปที่ Terminal ดังนี้แล้วพิมพ์คำสังนี้
```
$ docker version
```
จะแสดงรายละเอียดต่างๆ ของ Docker แสดงว่าคุณลง Docker ได้สำเร็จแล้ว

ถ้าเป็น Docker เวอร์ชันใหม่ๆ จะมี Dashboard มาให้ใช้ (Docker Desktop เวอร์ชัน 2.2.0 ขึ้นไป) เพิ่มความสะดวกให้กับผู้ใช้งานมากขึ้นในการ Monitoring

![image](https://dev-to-uploads.s3.amazonaws.com/i/kv7npate25e3dyfw9jp8.png)

โดยคลิกไปที่ Icon Docker แล้วเลือก Dashboard จากนั้นจะเห็นหน้าจอดังรูป

![image](https://dev-to-uploads.s3.amazonaws.com/i/jgcfzqmjadnhgpkcdwdf.png)

จากรูปจะแสดงให้เห็นว่าตอนนี้ Menu ซ้ายอยู่ที่ images จะบอกว่าในเครื่องของเรานั้นมี image อะไรอยู่บ้าง

![image](https://dev-to-uploads.s3.amazonaws.com/i/ulhcmkejpeb696exqlff.png)

เมื่อเลือก Menu Containers/Apps ก็จะแสดง Containers ทั้งหมดที่เราเคย Run ที่เห็นเป็นสีเขียวนั้นแสดงว่า Containers นั้นยัง Run อยู่ เราสามารถ Click เข้าไปดูได้แสดงดังรูปด้านล่าง

![image](https://dev-to-uploads.s3.amazonaws.com/i/itg9qjbh7xkjgcjrgmx7.png)

จะเห็นได้ว่าสามารถดู Logs Inspect และ Stats ต่างๆได้ว่าตอนนี้ Container ใช้ Resources ไปทั้งหมดเท่าไร

ส่วน Icon ต่างๆที่อยู่มุมด้านขวาบน
> Open In Browser: สามารถเปิดบน Browser ได้ในกรณีที่ Publish Port ออกมา
> Cli: สามารถเข้าไปใช้ Command Line ใน Container ได้
> Stop: Stop Containers
> Restart: Restart Containers
> Delete: Delete Containers

#### Photo
https://blog.kumina.nl/wp-content/uploads/2017/04/Benefits-of-container-technology-1200x627.jpg

#### References
https://blog.kumina.nl/2017/04/the-benefits-of-containers-and-container-technology/
https://medium.com/@rachatatongpagdee/docker-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3-%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99%E0%B8%AD%E0%B8%A2%E0%B9%88%E0%B8%B2%E0%B8%87%E0%B9%84%E0%B8%A3-7e77145967b6