Spring boot & Docker EP.1 — ปฐมบท

Thirajade Lekkunlawat
Grean Developers Family
2 min readOct 23, 2018

อันนี้แค่อยากจะโน้ตไว้เวลาไปอ่านเกี่ยวกับ Spring boot ที่ใช้กับ Docker มาก็จะมาใส่ไว้ในนี้ เป็น EP ไปเรื่อยๆ EP ละสั้นๆก็พอ ยาวละขี้เกียจอ่าน(ขี้เกียจเขียนด้วย5555) กะว่าจะเรียบเรียงให้ดีๆหน่อยเผื่อมีคนเข้ามาอ่านจะได้ได้ความรู้กันไปด้วย ตรงไหนผิดพลาดยังไงคอมเม้น หรือทักมาบอกได้เลยนะครับ เพราะจริงๆก็คือเรียนรู้ไปด้วยเขียนไปด้วยเนี่ยแหล่ะ

EP นี้จะเน้นไปที่ความหมายของ Docker ซะเยอะหน่อย เดี๋ยว EP หน้า จะลงมือทำและ

Container คืออะไร

ตามรูปเลย

Container ไง

Container เปรียบเสมือนกล่องๆนึงที่ด้านในจะบรรจุ applications, libraries, dependencies, environments หรืออะไรก็แล้วแต่ที่ซอฟแวร์เราต้องการจะใส่ไว้ ก็ยัดๆเข้าไปเป็น container

ทำไมต้องรันบน Container ด้วย

สะดวก ปลอดภัย เสถียร เพราะ Container นั้นมีความพร้อมในการทำงานแทบจะทันที มีทุกอย่างพร้อมหมดแล้วในตัวมัน และจะไม่ได้รับผลกระทบจากพวก infrastructure ที่เปลี่ยนแปลงไปเรื่อยๆ ถ้ามี container image เอาไปรันเป็น container ก็ทำงานได้เลย

น่าจะเคยเจอปัญหาพวก

  • รันไม่ได้ Environment ไม่ครบ
  • มีใช้ Plugin อะไรก็ไม่รู้ด้วย ต้องมานั่งลงให้เหมือนกัน
  • ใช้ Tomcat คนละเวอร์ชัน
  • พัฒนากันมาใช้คนละภาษา กว่าจะมารันกันได้ ต้องเสียเวลา Setup ไปเท่าไหร่

ในบางครั้งมันก็เป็นปัญหาที่ไม่ควรจะมาเสียเวลาด้วยสักเท่าไหร่ container ก็เลยจะมาช่วยแก้ไขปัญหาเหล่านี้

ถ้าใช้ container แล้ว หน้าตาโครงสร้างของซอฟท์แวร์เราก็จะเป็นประมาณนี้ เพื่อให้แต่ละแอปพลิเคชั่นที่พัฒนามาใช้ด้วยกันได้ง่ายขึ้น

Architecture ตัวอย่าง

ทุกอย่างจะถูกเชื่อมกันโดย Docker ซึ่งก็จะต้องเจียดความพยายามนิ้ดหน่อยเพื่อ setup ให้แต่ละ container รู้จักกัน

ภาพรวมในการทำงานกับ Docker

เท่าที่เข้าใจ step การทำงานกับ Docker น่าจะเป็นประมาณนี้

  1. พัฒนาซอฟท์แวร์ของเราจนถึงตอนที่อยากจะรัน หรือ เทส หรืออะไรก็แล้วแต่
  2. สร้าง Dockerfile**
  3. Build docker image ขึ้นมา
  4. นำ image ที่ได้ไป run ขึ้นมาเป็น container ถ้ามีหลาย container จะให้มัน link กันได้ก็ปรับตรงคำสั่งที่ใช้ run เนี่ยแหล่ะ

**Dockerfile จะเป็นไฟล์ที่มีคำสั่งเกี่ยวกับการ Build docker image ขึ้นมา คิดว่าจะอธิบายใน EP ถัดไปครับ

บทสรุป

การพัฒนาแอปพลิเคชันและมารันใน container สามารถช่วยเพิ่มความสะดวกสบายในการรันเพื่อเทส หรือแม้แต่ตอนที่เราจะ deploy ก็ตาม จะได้ไม่ต้องมาเจอกับปัญหาซ้ำซากที่น่าเบื่อเกี่ยวกับการ setup environment ต่างๆของหลายๆแอปพลิเคชั่นที่จะนำมาใช้ร่วมกัน และ ทำให้เราโฟกัสมาที่การพัฒนาแอปพลิเคชั่นได้มากขึ้น สำหรับตอนหน้าจะเกี่ยวกับอะไรก็ติดตามกันได้นะครับ

--

--