Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Windows

Docker Containers: เร่งการพัฒนาและ Deployment สำหรับ DevOps

Docker แสดงตัวในปี 2013 และสร้างความบัลลังในวงการ IT ทั่วโลก โซลูชันที่พัฒนาจาก Container Technology ของ Docker กำลังเปลี่ยนวิธีการดำเนินงาน IT อย่างจริงจัง

ในบล็อกนี้ เราจะถอดรหัสเทคโนโลยีที่ Hot ที่สุดใน DevOps (Development Operation) pipeline วันนี้

ทำไม Docker จึงได้รับความนิยมสูง?

สมมติ คุณสร้างแอปพลิเคชันทำงานได้ดีบนเครื่องพัฒนา (development machine) แต่เมื่อ deploy ไป QA machine หรือ Production machine มันหยุดทำงาน ทำไม? บริษัทใหญ่ใช้ Container-based technology รันธุรกิจ Deploy มากกว่า 2 พันล้าน containers ข้าม Data centers ทุกสัปดาห์ เพราะช่วย: Continuous Integration, Delivery, Portability, Scalability ของแอปพลิเคชัน Docker เป็นเหตุผลที่ Containers ยอดนิยมอย่างกะทันหัน

Docker ช่วยสร้างแอปพลิเคชันในภาษาใดก็ได้ ใช้ Stack ใดก็ได้ รันบนอะไรก็ได้ ที่ไหนก็ได้ ช่วยลด Dependency (การพึ่งพา) บนองค์ประกอบต่างๆ เพื่อรันซอฟต์แวร์เฉพาะ ในกรณีข้างต้น แอปทำงานบน Dev machine แต่หยุดทำงานเมื่อ Deploy ไป Environment อื่น Docker แก้ปัญหานี้โดย pack, ship และ run แอปพลิเคชันใดๆ เป็น self-sufficient container ที่รันได้ทุกที่ ไม่ว่า Environment จะเป็นอย่างไร

เทคโนโลยีนี้ super-hot และจะเล่นบทบาทสำคัญในอนาคตของ Software Development

Docker คืออะไร?

Docker เป็น open-source container-based technology แยกแอปพลิเคชันออกจาก OS ที่รันอยู่ ดีเท่ากับ Virtual Machines (VM) ที่แยก OS ออกจาก Hardware ที่รันอยู่

ยังไม่เชื่อ? ใช้ Docker สร้างแอปต่างๆ รันบนเครื่องต่างๆ หรือ Host ต่างๆ และสื่อสารกันได้อย่างมีประสิทธิภาพและมีประสิทธิผล

มาตรฐานอุตสาหกรรมมักใช้ Virtual Machines (VM) รันแอปพลิเคชัน แต่วันนี้ Containers กำลังได้รับความนิยมและลดภาระนักพัฒนา ทำไม? เพราะเป็น open-source project ที่ให้คุณรวม code + configuration + dependencies ไว้ในแพ็กเกจเรียบร้อย - เรียกว่า Container ผ่าน Container นี้ คุณสร้าง Deploy และรันแอปพลิเคชันหลายตัวบน Server เดียวได้

Virtual Machines (VM) คืออะไร?

Virtual Machine จำลองระบบคอมพิวเตอร์ ประกอบ RAM, Processor ฯลฯ นอกจากแสดงลักษณะเหมือนคอมพิวเตอร์จริง ยังให้ฟังก์ชันรัน OS และแอปพลิเคชันต่างๆ บน VM เดียวได้ Configuration และ Resource ถูกสนับสนุนโดย Physical resources ของ Host system VM เรียกว่า Guest, OS บน VM เรียกว่า Guest OS, ระบบที่รัน VM เรียกว่า Host System

Docker Containers คืออะไร?

ก่อนจะไปที่ "Docker ทำงานอย่างไร" ต้องเข้าใจ Containers ให้ชัด Containers = โซลูชันสำหรับปัญหา: รันซอฟต์แวร์ได้อย่างน่าเชื่อถือเมื่อย้ายจาก Computing Environment หนึ่งไปอีก Environment หนึ่ง Container ประกอบด้วย: Application, Dependencies, Libraries, Binaries, Config files ที่จำเป็นต่อการรันซอฟต์แวร์ ทั้งหมดรวมในแพ็กเกจเดียว ทำให้นักพัฒนามั่นใจว่าแอปจะรันบนอะไรก็ได้ ที่ไหนก็ได้

Docker Containers ทำให้การรันแอปพลิเคชันบน Server ง่ายมาก ด้วย Docker Containers สามารถลด Deployment time เหลือวินาที เพราะ Containers ทำงานบนส่วนของแอปพลิเคชัน (parts of application) หมายถึง หากต้องซ่อม/อัปเดตส่วนใดส่วนหนึ่ง ไม่ต้องปิดทั้งแอป แต่ทำงานเฉพาะส่วนนั้นได้

Docker vs Virtual Machines

ทั้ง Docker Container และ VM มี isolation และ resource allocation benefits คล้ายกัน แต่ทำงานต่างกัน และมีข้อดีของตัวเอง มาเข้าใจ Use cases และว่าตัวไหนชนะตัวไหน

  • Ease of use (ความง่ายในการใช้งาน): VM ให้ Look & Feel ของ OS จริง พร้อม GUI เต็มรูปแบบ Tools ของ VM เรียบง่ายกว่า Docker มี Ecosystem ซับซ้อน ต้องปรับตัวกับ CLI (Command Line Interface)
  • Resource Usage: Docker Containers ไม่ต้องการ Hardware Hypervisor Docker Engine ทำหน้าที่ Hypervisor รันหลาย Containers บนมันได้ VM ต้องการ Resource มากกว่ามาก
  • Size & Speed: Docker Containers เล็กกว่า เบากว่า เร็วกว่า VM มาก VM ใช้เวลา Boot นาน Container ใช้ไม่กี่ Microseconds จาก Container Image
  • Portability: Docker Open Source Containers พกพาได้ง่ายใน Development Pipeline Compact และ Portable ทำให้แชร์ให้ทีมงานหลายคนทำ Parallel Development ได้
  • Enterprise Adoption: Docker ลดการใช้ VM ในองค์กรใหญ่ ด้วย Agile benefits: Speed, Efficiency VM ไม่ได้หายไป จะทำงานคู่ขนานกับ Docker

Docker Workflow (กระบวนการทำงาน)

วิธีอธิบาย Docker ที่ง่ายที่สุดคือ ไปตาม Workflow ของมัน ใช้ Docker Hub (ที่เชื่อถือได้ที่สุด)

เริ่มต้นกับ Docker:

  • ไปที่ Docker Hub: https://hub.docker.com/
  • หน้าหลัก: สร้าง Docker ID ฟรี หรือ Explore Docker Images และ Pull lightweight packages ตามต้องการ

Docker Image

Docker Image ใช้ launch Containers สร้าง Custom Image ได้ เอง เบา เพิ่ม Reusability ลด Disk Usage

Docker Container

Launch Container โดย Pull Docker Images จาก Docker Hub Package แอปต่างๆ ใน Container ต่างๆ ตามต้องการ

Docker Repositories

Docker Repositories จัดการ Images ไว้ที่เดียว สามารถเป็น Public หรือ Private Public: แชร์กับทุกคนใน Docker Build Community Private: แชร์กับเพื่อนร่วมงาน Parallel Development มี Option ตั้ง Public/Private/Delete ใน Settings

Dockerfile

Dockerfile = Text document ที่มี Instructions & Commands ว่า Container จะถูกสร้างอย่างไร Docker Engine อ่าน Dockerfile และ Build Container ตามคำสั่ง

ข้อดีของการใช้ Docker

  1. Segregated Development Environment (สภาพแวดล้อมพัฒนาที่แยกจากกัน): แต่ละ Container มี Resource ของตัวเอง Isolated จากกัน หากไม่ต้องการ Container ใด ลบออก Resource จะถูกปล่อยคืน Reallocate ให้ Container อื่นได้ Docker ทำ Clean Removal ลบ Host และ Config files หมด ทุก App มี Container แยก รันบน Stack แยกกัน Docker จัดสรร Resource ให้แต่ละ App ใช้ได้แค่ Resource ที่จัดสรร ช่วย Maintain Uptime หลีกเลี่ยง Performance Degradation
  2. Instant Deployments (การ Deploy ทันที): Containerized Platform ลด Deployment Time เหลือวินาที เพราะไม่ต้อง Boot OS จัดการ Workloads ที่ Portable สูง ด้วย Resource น้อย Dynamically รันบน Local System, VM ใน Data Center, Cloud Server หรือผสมผสานได้
  3. Rapid Development & Consistent Deliveries: Docker จัดการ Internal Configs และ Dependencies เอง ลด Manual Intervention ตลอด Development Process นอกจาก Isolation ยังให้ Effective Integration ระหว่าง Apps Continuous Integration = Consistent Deliveries
  4. Constant Testing & Version Control: Container-based Platform = Homogeneous Environment จาก Production ถึง Testing/QA Container สำหรับ Production ใช้ทีม Testing ได้อีก ทำให้ Constant Testing เมื่อหลาย Stream ทำงาน Parallel Version Control: Containers Track การเปลี่ยนแปลงทุกไฟล์ เรียก Version เก่าได้ Upgrade ระหว่าง Release Cycle: แก้ไข Docker Containers Test และ Implement ใน Container เดียวกัน หาก Upgrade พัง ทำ Rollback กลับ Version ก่อนได้
  5. Mitigate Dedicated Hardware Per App: Docker Containers = Lightweight & Faster Alternative ของ Hypervisor-based VMs VM ต้องการ Hypervisor (VirtualBox) Docker Engine รันหลาย Container ได้โดยไม่ต้อง Hypervisor เหมาะสำหรับ Small/Medium Deployments ที่มี Resource น้อย
  6. Multi-platform: Docker Containers Portable สูง Cloud Providers ใหญ่: AWS, GCP, Azure, OpenStack มี Docker Support ในตัว Docker เดิมเป็น Linux-only จนถึง Fall 2016 ถูกนำไป Windows ทั่วไป Tools, APIs, Image Formats ถูก Generalize สำหรับ Linux และ Windows (Heterogeneous Development)
  7. Cost-efficient สำหรับองค์กรระดับ Enterprise: ROI (Return on Investment) = Fundamental สำคัญที่สุด โซลูชัน Optimal = ลด Cost เพิ่ม Profit องค์กรใหญ่ = ต้องการ Infrastructure Resources มาก Docker ช่วย Cost-efficiency: ลด Infrastructure Resources สำหรับ Production ลด Server Cost และ Workforce รักษา Revenue ได้นาน
  8. Security & Reliability: Docker Containers Isolated จากกัน ให้ Total Control Over Traffic Flow และ Management Container หนึ่งไม่สามารถมอง Process ของ Container อื่นได้ นอกจาก Default Security ยังมี Security Tools/Plugins: Image Scanners (Clair) ป้องกัน Container Images ใน Docker Registries

Virtualization Drive กำลังบุ้มในอุตสาหกรรมองค์กร อาจมีข้อเสียในการย้ายสู่ Virtual Environment แต่มีข้อดีมากมาย: จากการประหยัดเงิน ถึง Business Continuity Docker เป็นหนึ่งในการค้นพบ Pioneer ของ Virtualization Drive นี้