Category Container Technology

Optimize Container image size

Container ships

จาก Blog ตอนก่อนที่ไปพบว่า docker image มีขนาดใหญ่มาก และถ้าปล่อยไปนานๆ ไม่น่าจะดีแน่นๆ หลังจากแก้ปัญหาเรียบร้อยไป ผมขอสรุป Step การ Optimize Docker image ครับ //ดองไปหลายเดือนกว่าจะเขียนจนจบได้ Best Practice – Use Minimal Base Images พยายามเลือกใช้ Base Image ที่เล็กที่สุด และน่าเชื่อถือด้วยครับ ส่วนใหญ่จะเป็นพวกตระกูล ข้อสังเกตุ – Minimize the Number of Layers การ Run Command…

ทำให้ตัว ICONV support TIS-620

จาก Blog ตอนก่อน Interface แล้วได้ TextFile 0 bytes ตอนนั้นผมได้ตัดสินใจว่าจะ Lock Base Image ก่อน แต่ทว่าไม่มีวี่แววที่จะแก้ไข แล้วมีช่วงเวลานึงที่ว่างๆมั้ง เลยคิดว่า Issue นี้ควรจะเข้ามาดูเองแล้ว เลยตัดสินใจศึกษาข้อมูลเพิ่มพบว่า ตัว ICONV มัน On Top จากตัว GCONV ที่สามารถพัฒนาให้รองรับ Encoding ใหม่ๆได้ ดังนั้น สรุปได้ว่าจริงๆ แล้วทีม Maintainer ของ Image Rocky / AlmaLinux น่าต้องการ Optimize…

[Container] แก้ปัญหา docker image โต

cargo ship unloading colorful containers in port

จาก Blog ตอนก่อนที่มีความสงสัยว่าทำไมขนาด Image ของ Container มันโต จึงได้ลองด้วย Podman history เพื่อตรวจสอบไป docker history ก็ใช้งานได้นะ แล้วที่นี่มาเจอคำสั่งที่ทำให้ Layer มันเพิ่มขึ้นแบบงงๆ ตามรูปครับ มันเกิดอะไรขึ้น ? รีดไขมัน – ปัญหาที่ 1: คำสั่ง chown / chown มีเนื้อที่เพิ่มมาแบบงงๆ – ปัญหาที่ 2: คำสั่ง yum install มีเนื้อที่เพิ่มมาแบบงงๆ จากที่แก้ปัญหาที่ 1 และ…

[PODMAN] มาดูกันว่า Image มันมีอดีตอะไร ทำไมถึงบวม

พอดีได้ Image เก่าที่ใช้งานอยู่ตัวนึงครับ ซึ่งขนาดมันใหญ่ประมาณ 3 GB พอ Build แต่ละรอบ มันขนาดบวมขึ้นเรื่อยๆนะ ด้วยความสงสัยเลยอยากรู้เหมือนกันว่ามันเพิ่มจากอะไร เลยลอง Research ดูพบว่า Podman History/ Docker History มาส่องอดีตกันครับ Reference

Interface แล้วได้ TextFile 0 bytes

ระหว่างที่ใช้ให้น้องทดสอบ Container น้องแจ้งข่าวร้ายมาว่า TextFile มันออก แต่มันได้ 0 bytes !!!!! ผมเลยใช้ให้น้องไล่คำสั่งของ Shell มา พบว่า หลังจากรู้คำสั่งแล้วลองเข้าไปรันใน Container กันครับ จะได้รู้ว่า Error จริงมัน คือ อะไร ? เจอ Error กวนตีนอีกครับ iconv: failed to start conversion processing: No such file or directory แต่จริงๆมันมีไฟล์นะ เลยนึกเคสตอน Implement RedHat8…

[PODMAN] rootless container error “Disk quota exceeded”

วันนี้เป็นปัญหาที่น่าปวดหัวเหมือนกันหลังจากใช้ Podman ไป 1 ปีนิดๆครับ อยู่ลูกค้าแจ้งปัญหามาว่า Disk quota exceeded มาจากไหน ? เดี๋ยวต้องไปหาที่มาเพิ่ม Solution ตรวจสอบก่อนว่า maxkey มีค่าเท่าไหร่ ด้วยคำสั่ง ลองดูจำนวนปัจจุบันสิ มีค่าเท่าไหร่ (ต้อง Login เข้าไป และรันแยก User นะ เพราะ ตัวระบบมันเก็บค่าแยก Per User (Ref: sysctl – Is kernel.keys.maxkeys per user or per key?) ในกรณีที่ค่าของมันเกิน…

[PODMAN] java.security.KeyManagementException: FIPS mode: only SunJSSE TrustManagers may be used

วันนี้น่าจะวันซวย Run Image ขึ้นที่ Site ลูกค้า แล้วเจอ Error นี้ครับ Environment Host redhat 8.2 with FIPS mode enable podman 2.0.5 Container Image Base Image rockylinux:8.5.20220308 (Version 8.5.20220308) openjdk version “11.0.15” 2022-04-19 LTS Application Spring Boot 2.6.6 How to fix อ๋อ อย่าลืมตรวจสอบด้วย…

[PODMAN] /var/tmp เต็ม

Blog ตอนนี้เกิดจากว่า มีน้องชอบแจ้งว่า disk ที่ลอง app server มันเต็มบ่อยๆ เลยทำให้ load container ไม่สำเร็จบ่อยๆ ผมเลยใช้ dutree ช่วยส่องหา path ที่มีอะไรแปลก /var/tmp มันมีอะไรแปลกนะ ทำไมมันถึงเต็ม ปกติตัว Container ที่ถูกสร้างมาจาก docker ตัว podman เวลา load image เข้ามา มันจะเอา path /var/tmp มาใช้งานเป็น tmp ชั่วคราวครับ ถ้า Path นี้มีขนาดเล็ก เวลานำ…

บันทึกการ Implement RedHat 8 + Podman 2.0.5 หลังขึ้น Production ไปแล้ว 2 เดือน

วันนี้เป็นวันที่ได้นำระบบที่ใช้ RedHat 8 และมีการนำเทคโนโลยีใหม่อย่าง Container โดยใช้ Container Engine Podman ไปแล้ว 2 เดือนครับ ส่วนตัว Site นี้น่าจะเป็น Site แรกของไทยที่ได้ใช้ RedHat 8 และ Podman Container Engine บน Production ครับ ผมมีบันทึกประเด็นที่พบไว้ เผื่อจะเป็นประโยชน์กับท่านอื่นๆที่ Search เจอครับ RedHat 8 ไม่มี locale th_TH.tis620 ลองดู locale ที่เป็น tis620 ด้วยคำสั่ง[root@invsdevapp01…

Podman unshare ทำไมต้องไม่แบ่งปันหละ

สำหรับ Feature นี้ใช้ได้เฉพาะกรณีที่ run container แบบ rootless mode ครับ ถ้าใช้ root คำสั่งนี้จะไม่สามารถทำงานได้นะ แต่งาน Run Container แบบ Non-Root มีข้อดี และข้่อจำกัด ตาม Blog นีครับ ในเมื่อมันมีข้อจำกัดขนาดนี้ แล้ว unshare มาข่วยอะไรหละ ? unshare จริงๆแล้วงเป็น Feature ที่มากันตัว Linux Kernel ที่ช่วยให้เราแยก process ลูกให้มีอิสระจาก process แม่ (Parent Process)…