Saladpuk.com
🏆 เนื้อหาหลัก
🏆 เนื้อหาหลัก
  • 💖สลัดผัก
  • 📰มีอะไรใหม่บ้าง
    • 2020
      • 2020-11
      • 2020-10
      • 2020-09
      • 2020-08
      • 2020-03
      • 2020-02
      • 2020-01
    • 2019
      • 2019-12
      • 2019-11
      • 2019-10
      • 2019-09
      • 2019-08
  • 🤔อ่านเรื่องไรดี ?
  • มือใหม่หัดเขียนโค้ด
    • 👶เขียนโค้ดด้วยภาษา C#
      • เกิดมาไม่เคยเขียนโค้ดมาก่อนเบย
      • 👶พื้นฐาน
        • 1.โปรแกรมที่ต้องลง
        • 2.โครงสร้างของโค้ด
        • 3.ชนิดของข้อมูล
        • 4.การสร้างตัวแปร
        • 5.คำสั่งพื้นฐาน
        • 6.การแปลงข้อมูล
        • 7.การเปรียบเทียบค่า
        • 8.การตัดสินใจด้วย IF statements
        • 9.การตัดสินใจด้วย Switch statements
        • 10.การทำงานซ้ำๆด้วย While
        • 11.การทำงานซ้ำๆด้วย Do While
        • 12.การทำงานซ้ำๆด้วย For
        • 13.การแก้โจทย์จากรูป
        • 14.มารู้จักกับ Array กัน
      • 🧑ระดับกลาง
        • 15.Value type vs Reference type
        • 16.ลดงานซ้ำๆด้วย Method
        • 17.มารู้จักกับ Class & Field กัน
        • 18.มารู้จักกับ Constructor กันบ้าง
        • 19.มาเขียน Method ใน Class กัน
        • 20.มารู้จักกับ Property กัน
        • 21.ลองใช้คลาสแบบจริงจังบ้าง
        • 22.การสืบทอด Inheritance
        • 23.Polymorphism
        • 24.Abstract Class
        • 25.Interface
        • 26.Namespace
        • 27.Enum
        • 28.Exception handler
        • 29.ลงลึกกับ string
        • 30.StringBuilder เพื่อนคู่ string
      • 👨⏳ระดับสูง
        • Generic
        • Delegates
        • Action & Func
        • Lambda expression
        • LINQ
        • พระคัมภีร์การใช้คำสั่ง LINQ
      • 💡Tips
        • 💡C# version 8.0
        • 💡Boxing & Unboxing
    • 👶Algorithm
      • 👾Algorithm Big-O
      • 👽Algorithm P & NP
    • 👦OOP
      • 💖Abstraction
      • 💖Encapsulation
      • 🏆Abstraction & Encapsulation
      • 💖Inheritance
      • 💖Polymorphism
      • 🏆Inheritance & Polymorphism
      • 📝ลองเขียน OOP ดูดิ๊
      • 👑OOP + Power of Design
      • 🥰เทคนิคในการออกแบบ
    • 👶บทสรุปฐานข้อมูล
      • เก็บรูปในฐานข้อมูล
      • Database indexing
      • การลบข้อมูล
    • 👦Communication Patterns
    • 👦Design Patterns
      • 🤰Creational Patterns
        • 🏭Factory Method
        • 🏭Abstract Factory
        • ☝️ Singleton Pattern
        • 🏗️ Builder Pattern
        • 🎎Prototype Pattern
      • 🧱Structural Patterns
        • 🔌Adapter Pattern
        • 📪Proxy Pattern
  • Puzzle
    • 🧠Challenges
      • 🐴Google ม้า 25 ตัว
      • 🌉Amazon เสา 2 ต้น
      • 🥇ทองเก๊
      • 💊ยาต้านโควิด
      • 🎩CP หมวก 5 ใบ
      • 🧓Einstein's Riddle 01
  • พื้นฐานที่ควรต้องรู้
    • 🐳Docker
      • 📦Docker Containers
      • 🃏Docker Exercise 01
      • 🛠️ Docker Tools
      • 🗃️ Docker Registry
      • 🖼️ Container Image
      • 📢Docker Push
      • 🔄WSL
    • 👶Clean Code
      • 🧓Uncle Bob - Clean Code
      • 🧓Uncle Bob - Comments
      • 🧓Uncle Bob - Naming
      • 🧓Uncle Bob - Mindset
      • 🧓Uncle Bob - TDD
    • 👶Code Smells
    • 👶สิ่งที่คนเขียนโค้ดมักเข้าใจผิด
    • 👶AI พื้นฐาน
    • 👶Git พื้นฐาน
      • Git branching strategy
    • 👶Cloud พื้นฐาน
    • 👶UML พื้นฐาน
      • Activity Diagram
      • Class Diagram
      • Sequence Diagram
      • Use case Diagram
      • บทสรุปการใช้ UML
    • 👶Data Scientist
      • การเลือก Algorithms ให้ AI (1/5)
      • การเตรียมข้อมูลให้ AI (2/5)
      • หลักการตั้งคำถามให้ AI (3/5)
      • แฉความลับของ AI Model (4/5)
      • หัดเขียน AI จาก AI ของคนอื่น (5/5)
    • 👶DevOps พื้นฐาน
    • 👶Docker ขั้นพื้นฐาน
      • Image and Container
      • แชร์ Docker Image ที่สร้างไว้
    • 👶Microservices พื้นฐาน
      • Microservices ที่ดีมีลักษณะยังไง
      • Microservices Tips
      • จาก Monolith สู่ Microservices
    • 👶ความรู้พื้นฐานในการทำเว็บ
    • 👦Bottlenecks of Software
      • หัวใจที่สำคัญที่สุดของฐานข้อมูล
    • 👦Agile Methodology
      • Agile in a Nutshell
      • Software Development Life Cycle
      • Code Review
    • 👦Security พื้นฐาน
      • การเก็บรหัสผ่านที่ถูกต้อง
      • Security in actions
        • Hash function
      • Security Principles
      • 😎The Matrix 1
      • 😎The Matrix 2
      • HTTPS in a nutshell
    • 👦SOLID Design Principles
      • มารู้จักกับ SOLID กันดีกว่า
      • Single-Responsibility Principle
      • Open/Closed Principle
      • Liskov Substitution Principle
      • Interface Segregation Principle
      • Dependency-Inversion Principle
  • Cloud Computing
    • 👶Microsoft Azure 101
      • สมัคร Microsoft Azure
      • รู้จักกับ Resource Groups
      • สร้างเว็บตัวแรกกัน
      • สร้าง Virtual Machine กัน
      • ประเภทของคลาว์เซอร์วิส
      • มาสร้าง Logic App กัน
      • มาสร้าง Function App กัน
      • คลาว์คิดเงินยังไง ?
      • Cloud Native
      • Guideline for Cloud scaling
      • Auto Scaling
    • 👶Azure App Services
    • 👶App Service Plan
    • 👶Azure Storage
      • Blob storage
        • ลองสร้างที่เก็บไฟล์กันเลย
        • เข้าใจ Blob storage ให้มากขึ้น
        • ลองเขียนโค้ดอัพโหลดไฟล์กันบ้าง
        • สร้างเว็บจากที่ฝากไฟล์บนคลาว์
    • 👶Azure Bot Service
      • Bot เข้าใจเราได้ยังไงกันนะ
    • 👶Azure Cognitive Services
      • การสร้าง Cognitive Services
      • การ Login ด้วยใบหน้า
      • อ่านลายมือจากรูปเป็นตัวอักษร (OCR)
      • เขียน AI แยกของต่างๆทำยังไง?
      • เขียนแอพ ทายอายุ บอกเพศ ง่ายจิ๊ดเดียว
      • เขียนแอพให้ AI อธิบายรูปเป็นภาษาคน
    • 👶Machine Learning Studio
      • มาสร้าง AI ของแท้ตัวแรกของเรากัน
      • สร้าง AI ตัดสินใจอนุมัติบัตรเครดิต 💳
      • ลองเรียกใช้ AI ของเรากัน
    • 👶Azure Service Fabric
      • สร้าง Service Fabric กัน
    • 👶Blockchain
      • Blockchain ทำงานยังไง ?
      • Consensus Algorithm คืออะไร ?
      • สร้าง Blockchain ใช้เองกัน !
      • หัดเขียน Smart Contract กัน
    • 👶Power BI
    • 👶Azure Web App
      • เซิฟเวอร์บนคลาว์ ราคา? ต่าง?
    • 👶Azure DevOps
      • เล่น Azure DevOps กัน
      • เล่นกับ Repository
      • ลองทำ Continuous Integration (CI)
      • ลองทำ Continuous Delivery (CD)
      • เล่น Kanban Board
    • 🤠Cloud Playground
      • การป้องกันความลับหลุดตอนที่ 1
      • การป้องกันความลับหลุดตอนที่ 2
      • การป้องกันความลับหลุดตอนที่ 3
      • การป้องกันความลับหลุดตอนจบ
  • Software Testing
    • 👦Test-First Design
    • 👦Test-Driven Development
      • 1.มารู้จักกับ TDD กันดีกว่า
      • 2.Test cases เขาเขียนกันยังไงนะ
      • 3.เครื่องมือในการทดสอบ
      • 4.การใช้ Theory และ InlineData
      • 5.โค้ดที่ทดสอบได้
      • 6.Mantra of TDD
      • 7.Functional & None-Functional testing
      • 8.Manual vs Automation testing
      • 9.Automation Frameworks in .NET
      • 10.Mock Framework
      • 11.มาเรียนการใช้ Moq กันเถอะ
      • 12.สรุป
  • Web
    • 👦Web API
      • 1.Web API คืออะไร
      • 2.ติดตั้ง .NET Core SDK
      • 3.สร้าง Web API ตัวแรกกัน
      • 4.Verbs
      • 5.Swagger เพื่อคู่ API
      • 6.การใช้ Model
      • 7.เรียก Web API ผ่าน Postman
      • 8.มาจัดกลุ่ม API กัน (1/2)
      • 9.มาจัดกลุ่ม API กัน (2/2)
  • Software Design
    • 🤴Design Patterns
      • 🦈Creational patterns
        • Abstract Factory
        • Builder
        • Factory Method
        • Prototype
        • Singleton
      • 🦈Structural patterns
        • Adapter
        • Bridge
        • Decorator
        • Facade
        • Proxy
      • 🦈Behavioral patterns
        • Chain of Responsibility
        • Command
        • Iterator
        • Mediator
        • Memento
        • Observer
        • State
        • Strategy
        • Template Method
        • Visitor
Powered by GitBook
On this page
  • 🚨 เท้าความเดิม
  • 💝 Docker Engine
  • 🔥 Virtual Machine
  • 🔥 Docker Container
  • ⚔️ VM vs Container
  • 🐳 Container Image

Was this helpful?

Export as PDF
  1. พื้นฐานที่ควรต้องรู้
  2. Docker

Docker Containers

🐳 Docker ตอนที่ 2 กับสิ่งที่เรียกว่า คอนเทนเนอร์

PreviousDockerNextDocker Exercise 01

Last updated 4 years ago

Was this helpful?

🤠 จาก เราน่าจะรู้แล้วว่าเจ้าวาฬสีน้ำเงิน 🐳 Docker มันช่วยให้ขาเดฟทำงานสะดวกขึ้นได้ยังไง ดังนั้นบทความนี้เรามาลองซูมดูเบื้องหลังการทำงานที่ว่านั้นกันดีก่าาา

แนะนำให้อ่าน บทความนี้เป็นส่วนหนึ่งของคอร์ส ที่จะสอนตั้งแต่เรื่องพื้นฐานยันระดับ master กันไปเลย ซึ่งเนื้อหาทั้งหมดจะทำให้เพื่อนๆเข้าใจและใช้งาน Docker โดยใช้ Kubernetes เป็น และสามารถสร้าง Cluster เพื่อนำไปใช้งานบน Cloud Providers ต่างๆได้ และทั้งหมดที่พูดมานั้นอ่านได้ฟรีเลย ดังนั้นหากสนใจก็สามารถกดเจ้าวาฬสีน้ำเงินเพื่อไปอ่านตั้งแต่เริ่มต้นได้ครัช 🤠

🚨 เท้าความเดิม

จาก เราอยากได้ Environments แบบไหน (เช่น ลง .NET 4.8, PHP 8.0 Angular 9.0 เอาไว้) เราก็จะสร้างสิ่งที่เรียกว่า 🖼️ Docker Image ขึ้นมา แล้วเครื่องคอมพิวเตอร์เครื่องไหนก็ตามที่เอา Docker Image นั้นไปใช้ มันก็จะถูกจัด Environments ตามที่ Docker Image นั้นระบุไว้ ตามรูปด้านล่างเบย

แต่เราเคยสงสัยกันป่ะว่าเจ้า 🐳 Docker มันทำให้ Environments ของคอมพวกนั้นเหมือนกันได้ยังไง? 🤔 ... ดังนั้นเรามาดูหัวใจของมันที่ชื่อว่า Docker Engine กันดีก่า

💝 Docker Engine

Docker Engine คือตัวทำงานอยู่เบื้องหลังของ Docker โดยมันสามารถทำงานได้หลากหลาย OS (CentOS, Debian, Fedora, Oracle Linux, RHEL, SUSE, Ubuntu, Windows Server) หรือพูดง่ายๆคือ Windows กับ Linux นั่นเอง ซึ่งต้นตระกูลของ macOS มันก็คือ Linux ดังนั้น Docker Engine ก็เลยทำงานกับเครื่องแมคได้เลยนั่นเอง และเมื่อรองรับทุกระบบปฎิบัติการหลักอยู่ละ เลยทำให้ตัวมันเองก็สามารถไปทำงานบน Cloud Providers ได้ด้วย

โดยเจ้า Docker Engine มีหน้าที่ สร้างระบบจำลอง ให้มี Environments ตามที่ Docker Image ระบุไว้นั่นเอง

😳 หลายคนพออ่านถึงจุดนี้ก็อาจเอะใจคำว่า ระบบจำลอง ที่เจ้า Docker สร้างละว่ามันคือ Virtual Machine หรือ VM ที่เราชอบใช้กันหรือเปล่า? ดังนั้นเราจะลองซูมดูรายละเอียดกันอีกนิสสสนุง

🔥 Virtual Machine

รู้กันป่ะว่าคอมพิวเตอร์ที่เราใช้ๆกันอยู่นั้น เราสามารถสร้างคอมพิวเตอร์จำลองให้มันทำงานอยู่ภายในเครื่องคอมเราอีกทีได้ด้วยนะ ตามรูปด้านล่าง

ซึ่งการที่เราทำแบบนี้ได้ เราจะต้องใช้ Hypervisor (อีกชื่อคือ Hyper-V) เข้ามาช่วยสร้างเครื่องคอมจำลองขึ้นมา และเนื่องจากมันเป็นการจำลองเครื่องคอม ดังนั้นมันก็จะต้องมีการลง OS ให้กับเครื่องจำลองพวกนั้นด้วย (OS ที่เราลงให้คอมจำลองพวกนั้นเราเรียกมันว่า Guest OS) ตามรูปด้านล่าง

Virtual Machine 👍ข้อดีของการทำ Virtual Machine แบบนี้คือ มันเป็นเครื่องจำลองที่เหมือนเครื่องคอมจริงๆ เราต้องลง Windows ให้มันจริงๆ จะเปิดก็ต้องรอมันบูต จะปิดก็ต้องรอมัน shutdown จริงๆ และการแบ่ง RAM แบ่ง Storage ให้มันเท่าไหร่ มันก็จะใช้ได้เท่านั้นจริงๆ ดังนั้นคอมจริงๆทำอะไรได้ คอมจำลองพวกนี้ก็จะทำได้เช่นกัน 👎ส่วนข้อเสียคือ มันเปลืองทรัพยากรของเครื่องที่ใช้สร้าง VM ม๊ากกก เพราะเราต้องสละ RAM สละ CPU สละ Storage ส่วนหนึ่งไปใช้ในการจำลองนั่นเอง เพราะคอมจำลองพวกนั้นก็ถูกดูแลเสมือนเป็นคอมพิวเตอร์จริงๆอีกเครื่องเลย

🤠 แต่ในทางกลับกันบริษัทที่ทำ Docker กลับมองว่าเราไม่ต้องทำแบบนั้นก็ได้นิ และเสนอแนวคิดที่เรียกว่า Container มาจัดการ สร้างระบบจำลอง ขึ้นมา ดังนั้นเรามาลองดูฝั่ง Docker Container กันบ้าง

🔥 Docker Container

บริษัทที่สร้าง Docker นั้นมองว่า ถ้าเราสามารถควบคุม Environment ของระบบจำลองนั้นๆได้ การสร้าง Guest OS ก็ไม่จำเป็นต้องทำอีกต่อไป ... ดังนั้น Docker เลยสร้าง📦 กล่องขึ้นมา เราเรียกมันว่า 📦 Container แล้วยัดของที่เราอยากจะควบคุมให้อยู่แค่ภายในกล่องใบนั้น ตามรูปด้านล่าง

Docker Container 👍ข้อดีของการทำ Docker Container คือ มันไม่หนักเครื่อง และ เร็วม๊ากกกกก เพราะไม่ต้องไปสร้าง Guest OS โดยเครื่องนั้นใช้ OS อะไรก็ใช้ไป ตัว Docker แค่ไปสร้าง Container ให้มี Environments ตามแบบที่เราอยากได้ก็จบ ส่วนพวก RAM, CPU, Storage อะไรพวกนั้นก็แชร์ๆกันไปเลยไม่ต้องไปยุ่งอะไรกับมันเยอะ 👎ส่วนข้อเสียคือ มันเป็นแค่การจำลอง environment เท่านั้น ทำให้เราไม่สามารถทำงานมันได้เหมือนเป็นเครื่องคอมพิวเตอร์จริงๆ และก็เคยเกิดเหตุการณ์ที่ Java สามารถมองเห็นและเข้าถึงตัว OS หลักได้จากภายใน Container (bug นี้โดนแก้แล้ว) จะเกิดอะไรขึ้นถ้าสิ่งที่หลุดออกมาสามารถโจมตี OS หลักได้?

⚔️ VM vs Container

🐳 Container Image

เมื่อเราเข้าใจละว่า Docker มันสร้าง Environments ให้กับเครื่องคอมพิวเตอร์ต่างๆ โดยการสร้าง Container ขึ้นมา ดังนั้นเพื่อที่จะเข้าใจให้ถูก เลยต้องย้อนกลับไปว่า สิ่งที่ทีมสร้างมันคือ Image ของ Container นั่นเอง ซึ่งเราเรียกมันว่า Container Image ตามรูปด้าน

และเมื่อเราเอา Container Image มาทำงานที่คอมพิวเตอร์เครื่องไหนก็ตาม มันก็จะถูก Docker Engine เอาไปสร้างเป็น 📦 Container โดยภายใน container ก็จะมี Environments ตรงตามที่ Container Image ระบุไว้ ตามรูปด้านล่างเบย

และถ้าเราเอา Container Image หลายๆอันมาใช้ภายในคอมพิวเตอร์เครื่องเดียวกัน เจ้า Docker Engine ก็จะทำการสร้าง Container ตามที่ถูกกำหนดไว้ใน Container Image แต่ละตัวนั่นเอง ตามรูปด้านล่าง

จากที่ว่ามาทั้งหมด เราเลยจะเห็นโลโก้ของเจ้าวาฬน้ำเงิน 🐳 แบกตู้คอนเทนเนอร์ ตามรูปด้านล่างยังไงล่าา

🤠 เอาละ ดช.แมวน้ำ คิดว่าอธิบายทฤษฎีมาเยอะพอสมควรละ และหลายๆคนก็น่าจะเริ่มคันมืออยากลองเล่น Docker กันละ ดังนั้นในบทความถัดไปเราจะมาลองติดตั้งและใช้งาน Docker ตามทฤษฎีทั้งหมดที่ว่ามากันดีกว่า

ตัว VM กับ Container เป็นแนวคิดในการสร้าง Environment จำลองเหมือนกัน ซึ่งแต่ละตัวก็มี ข้อดี/ข้อเสีย ที่ไม่เหมือนกัน แต่สำหรับการพัฒนาซอฟต์แวร์นั้น สิ่งที่เราต้องการจริงๆคือ Environment เท่านั้น เราไม่ค่อยได้ไปยุ่งกับพวก OS หรือ Hardware มากนัก ดังนั้นเจ้า 📦 Docker Container เลยเหมาะสมกับการสร้างซอฟต์แวร์มากกว่า อีกทั้งมันไม่หนักเครื่องเลยทำให้ เวลาจะสร้าง เวลาจะลบก็เร็วดุจสายฟ้า แถมยังทำงานในลักษณะ หรือ ซึ่งเป็นที่นิยมในการทำ อีกด้วย เลยไม่น่าแปลกเลยที่เจ้าวาฬน้ำเงิน 🐳 Docker จะเป็นที่ถูกใจของขาเดฟทั่วโลก ( 💡 VM เราก็สามารถทำ IaC ได้เหมือนกันนะ )

อ่านแล้วชอบป๋มก็ขอฝากแชร์ หรือกดติดตามเพื่อจะได้ไม่พลาดบทความอื่นๆจาก ดช.แมวน้ำ ได้จากลิงค์นี้เบยครัช 😍

🐳
📦
Infrastructure as code
IaC
DevOps
🃏Docker Exercise 01
Saladpuk Fanclub
บทความที่ 1
🐳 Docker
บทความที่ 1
ช่องทางสนับสนุนค่าอาหารแมวน้ำกั๊ฟ 😘