# Docker OS Part 1

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FkBgO3Lr0grY4vc54l1Gi%2FqkBcdeig.png?alt=media&#x26;token=fe9ec70e-47fd-4218-89a7-0a4efcb67a7d" alt=""><figcaption><p>Docker AIC course : What is Docker </p></figcaption></figure>

## Introduction

Docker คือ แพลตฟอร์มที่ช่วยในการสร้าง และติดตั้งโปรแกรมซอฟต์แวร์รวมถึง OS และตัวจัดการต่างๆ โดยจะแยกออกจาก OS ที่เราใช้งานอยู่ ให้สามารถใช้งานในการพัฒนาได้ตามความต้องการของผู้ใช้ โดยที่มีองค์ประกอบพื้นฐานดังนี้

<div><figure><img src="http://19yw4b240vb03ws8qm25h366-wpengine.netdna-ssl.com/wp-content/uploads/Docker-API-infographic-container-devops-nordic-apis.png" alt=""><figcaption></figcaption></figure> <figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FfO5d7bbKrGh8tlMbENQt%2FDocker-API-infographic-container-devops-nordic-apis.png?alt=media&#x26;token=9590586a-1043-466c-a51e-b6364b23f77d" alt=""><figcaption><p>Repurposed from Docker flow diagram</p></figcaption></figure></div>

* **Docker daemon :** จะเป็นส่วนที่คอยติดต่อกับ Docker API และคอยจัดการ Docker Objects เช่น Images, Containers หรือ networks หรืออธิบายง่ายๆ Docker daemon จะเป็นตัวกลางที่ติดต่อกับ daemons อื่นๆ และคอยจัดการ Docker service.&#x20;
* **Docker clients :** ส่วนการทำงานหลักที่จะติดต่อกับ Docker โดยมีผู้ใช้คอยป้อนคำสั่งในการใช้งานและจัดการ Docker หรือใช้การ Remote API ด้วย application ที่รองรับ&#x20;
* **Docker Desktop :** เป็นแอพพลิเคชันที่คอยจัดการ Docker ซึ่งสามารถติดตั้งได้โดยลงบน OS Windows, Linux หรือ MacOS ซึ่งเราการจัดการผ่านแอพพลิเคชันจะเป็นการใช้งานผ่าน [micro service](https://www.borntodev.com/2020/05/22/microservices-%E0%B8%84%E0%B8%B7%E0%B8%AD%E0%B8%AD%E0%B8%B0%E0%B9%84%E0%B8%A3/) ที่ติดต่อผ่าน docker daemon &#x20;
* **Docker registry :** เปรียบเสมือนคลังเก็บของที่เก็บ Docker image ซึ่งสามารถดึงมาใช้งานจาก Docker hub ซึ่งเป็นคลังเก็บ Public registry และถ้าเราต้องการเก็บ image ของเราไว้แบบส่วนตัวสามารถที่จะสร้างและเก็บในรูปแบบ Private registry ได้
* **Docker objects :**&#x20;
  * **Docker File** → คือเอกสารบอกสูตร (การใช้งาน และคำสั่ง) เพื่อสร้าง Docker Image นั้นๆ
  * **Docker Image** → เป็นแบบแปลนที่จะใช้สร้างเป็น Docker Container ท่ีประกอบไปด้วยแอปพลิเคชันต่างๆที่จะทำงานเมื่อมีการเรียกใช้งานที่ Docker Container นั้นๆ รวมทั้งมีการตั้งค่า จำลองสภาพแวดล้อม (Environment) ที่จำเป็นสำหรับการทำงานของมันไว้ด้วย
  * **Docker Container** → เป็นที่บรรจุรวมไว้ทั้งแอปพลิเคชัน, สภาพแวดล้อมที่จำเป็นต่อการทำงาน และองค์ประกอบต่างๆ ที่จำเป็นต่อการทำงานของมัน ซึ่งเราได้สร้างมันมาจาก Docker Image ผ่านการกำหนดโครงสร้างของมันที่ Docker File
