ข้ามไปเนื้อหาหลัก

Docker Bake 101: เลิกใช้ Bash Script ย้ายมาสตรีมบิวด์ด้วย HCL

เจาะลึก Docker Bake ตอนแรกจากซีรีส์คู่มือปฏิบัติจริง เปลี่ยนสคริปต์ Bash ยาว 200 บรรทัดมาเป็นการบิวด์แบบ Declarative พร้อมตัวโค้ดและคำสั่งใช้งาน

เรียบเรียงโดย AI
Inewgen
12 Sep 2026ที่มา: Dev.to4 นาทีอ่าน (0 ครั้ง)
แชร์
Docker Bake 101: เลิกใช้ Bash Script ย้ายมาสตรีมบิวด์ด้วย HCL

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ขนาดตัวอักษร
  • Docker Bake เป็นเครื่องมือออร์เคสตรทานการบิวด์แบบ Declarative ช่วยจัดการหลายอิมเมจพร้อมกัน
  • แก้ปัญหา Bash script แตกต่างกันข้ามระบบปฏิบัติการ เช่น macOS ที่ยังติด Bash 3.2
  • ซีรีส์คู่มือนี้มีที่มาจากทักษะการบรรยายในงานประชุมฝรั่งเศสและโมร็อกโก
  • โค้ดตัวอย่างทั้งหมดเชื่อมโยงกับ GitHub repository ของผู้เขียนให้ทดลองรันได้ทันที

ซีรีส์คู่มือ Docker Bake ในทางปฏิบัติ ตอนที่ 1 นี้จะพาไปทำความรู้จักกับพื้นฐานสำคัญว่า Bake คืออะไร ทำไมจึงเกิดขึ้น และฟีเจอร์เด่นที่ทำให้คุ้มค่าต่อการใช้งาน โดยในตอนต่อไปจะพูดถึงการบูรณาการเข้ากับระบบ CI/CD ไม่ว่าจะเป็น Cloud Build, GitHub Actions, GitLab CI และ Dagger สำหรับเนื้อหาในบทความนี้ถอดบทเรียนมาจากการบรรยายของผู้เขียนที่เดินสายพูดคุยในงานประชุมทั่วฝรั่งเศสและโมร็อกโก เช่น DevLille, DevFest Toulouse, DevFest Lyon, Devoxx Morocco และ Cloud Native Days France ซึ่งมักจะได้ยินผู้เข้าร่วมงานอุทานเสมอว่าไม่เคยรู้มาก่อนว่า Bake ทำสิ่งเหล่านี้ได้ หรือกำลังเขียนสคริปต์ Bash ยาวกว่า 200 บรรทัดเพื่อทำหน้าที่เดียวกันพอดี

สำหรับผู้ที่ชื่นชอบรูปแบบวิดีโอ ผู้เขียนได้บันทึกการบรรยายในงาน Cloud Native Days France เป็นภาษาฝรั่งเศสไว้แล้ว และจะมีวิดีโอภาคภาษาอังกฤษตามมาบนช่อง YouTube ในเร็วๆ นี้ ส่วนผู้อ่านที่ต้องการศึกษาตามอัธยาศัยพร้อมกับโค้ดสนิปเป็ตที่สามารถคัดลอกไปวางได้ทันที บทความนี้พร้อมให้คุณใช้งานแล้ว โดยโค้ดตัวอย่างทั้งหมดอ้างอิงมาจาก repository ส่วนตัว ซึ่งแต่ละหัวข้อจะมีลิงก์ตรงไปยังไฟล์ที่เกี่ยวข้องเพื่อให้รันตัวอย่างตามได้จริง

ตัวอย่างคำสั่งพื้นฐานสำหรับการใช้งาน Docker Bake มีดังนี้:

  • บิวด์และพับบลิชอิมเมจในเครื่อง: docker buildx bake -f vars.hcl -f docker-bake-app-and-infra.hcl --push
  • ตรวจสอบค่าที่ถูกอินเทอร์โพเลตในคอนฟิก: docker buildx bake -f vars.hcl -f docker-bake-app-and-infra.hcl --print
  • รันการตรวจสอบลินเทอร์และเทสต์: docker compose -f compose_lint_and_test.yaml up

การทำความเข้าใจสถาปัตยกรรม 3 ชั้นของเครื่องมือ Docker ช่วยให้เห็นภาพชัดเจนขึ้นว่า BuildKit เปรียบเสมือนเครื่องยนต์เบื้องหลังที่คอยจัดการขนานงานและแคช, Buildx ทำหน้าที่เป็น CLI ปลั๊กอินเชื่อมต่ออินเทอร์เฟซ, และ Bake ทำหน้าที่เป็นตัวจัดการออร์เคสตราภาพรวม การเปลี่ยนผ่านจาก Bash มาเป็น HCL จึงช่วยลดความซับซ้อนและตัดปัญหาความแตกต่างของเวอร์ชันเชลล์ในแต่ละระบบปฏิบัติการได้อย่างเด็ดขาด

chromebook notebook computer office desk workspace

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง

ไม่อยากพลาดข่าวใหม่?

สมัครรับสรุปข่าวสารใหม่ทางอีเมล ไม่บ่อยจนรำคาญ

โฆษณา

ก่อนจะเริ่มต้นใช้งานไฟล์ HCL จำเป็นต้องทำความเข้าใจลำดับชั้นของเครื่องมือทั้งสามตัวที่มักถูกเรียกปะปนกัน ได้แก่ BuildKit ซึ่งเป็นเอนจินการบิวด์สมัยใหม่ที่เข้ามาแทนที่ระบบเก่าและเป็นค่าเริ่มต้นใน Docker Engine 23+, Buildx ซึ่งเป็นปลั๊กอิน CLI ที่ช่วยให้ใช้งานฟีเจอร์ของ BuildKit ได้ง่ายขึ้นผ่านคำสั่งอย่าง docker buildx build และตัวสุดท้ายคือ Bake ซึ่งเป็นคำสั่งย่อยของ Buildx ทำหน้าที่จัดการบิวด์หลายตัวพร้อมกันในรูปแบบ Declarative คล้ายกับ Docker Compose แต่เน้นไปที่งานบิวด์แทนที่จะเป็นการรันคอนเทนเนอร์

ในแง่ของการติดตั้ง หากผู้ใช้งานติดตั้ง Docker Desktop ในช่วงไม่กี่ปีที่ผ่านมาหรือใช้ Linux ที่รัน Docker Engine 23+ ตัว Buildx และ BuildKit จะถูกติดตั้งมาให้อย่างเสร็จสรรพพร้อมใช้งาน รวมถึงคำสั่ง Bake ที่พ่วงมาด้วยทันทีโดยไม่ต้องติดตั้งอะไรเพิ่มเติม ยกเว้นกรณีที่ใช้งานเวอร์ชันที่เก่ามากๆ เท่านั้น

เพื่อทำความเข้าใจว่าทำไม Bakeอาคารถือกำเนิดขึ้น ลองพิจารณาปัญหาความยุ่งยากเมื่อต้องบิวด์และพับบลิชอิมเมจสองตัว ได้แก่ แอปพลิเคชันและอินฟาเรด ที่รองรับหลายสถาปัตยกรรม (amd64 และ arm64) พร้อมกับระบบการรับรอง SBOM เมื่อเขียนด้วย Bash ธรรมดา มักจะต้องพึ่งพาลูปคำสั่งและอาร์เรย์เชื่อมโยง ซึ่งจำเป็นต้องใช้ Bash เวอร์ชัน 4 ขึ้นไป ทว่าระบบปฏิบัติการอย่าง macOS ยังคงกำหนดค่าเริ่มต้นเป็น Bash 3.2 ส่งผลให้สคริปต์เกิดความล้มเหลวแบบเงียบๆ บนเครื่อง Mac รุ่นใหม่ เว้นแต่ผู้พัฒนาจะทำการติดตั้ง Bash เวอร์ชันใหม่ผ่าน Homebrew ด้วยตนเอง กลายเป็นปัญหาคลาสสิกที่ว่าใช้งานได้บนเครื่องฉันคนเดียว (Works on my machine)

ที่มา: Dev.to

ความคิดเห็น

แสดงความคิดเห็น
0/2000

พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้