DEV Community

Vobinax
Vobinax

Posted on

Summer Log #6 — Docker Under the Hood 🐳

لاگ روز ششم
۱۱ مرداد

خب امروز روی نوشتن
Dockerfile
پروژه وقت گذاشتم
داشتم سعی می‌کردم
Dockerfile
یه چیزی نباشه که فقط کار کنه دلم میخواد تمیز باشه، تیز باشه سبک باشه و تا جایی
که میشه پرفورمنسش هم خوب باشه

برای همین یه سری چیزایی که قبلا از کنارشون رد میشدم رو این بار نشستم با حوصله بررسی کردم
مهم‌ترینش
Multi-stage Build
بود
اینکه برنامه داخل
golang:alpine
بیلد بشه و خروجی آخر
بره داخل
scratch

یعنی آخر کار فقط همون چیزایی که واقعا لازمه داخل ایمیج میمونه نه ابزار اضافه نه پکیج اضافه فقط برنامه و والسلام

یه نکته دیگه هم این بود که برنامه با کاربر
nobody
اجرا بشه نه
root

طبیعتا چند خط بیشتر به
Dockerfile
اضافه میکنه ولی
خب از نظر امنیتی تفاوت داره

در مورد
CGO_ENABLED=0
هم بیشتر خوندم
باعث میشه خروجی یه باینری
Static
باشه و بدون وابستگی به کتابخونه‌های سیستم اجرا بشه
همینم باعث میشه اجرای برنامه داخل
scratch
ممکن بشه

یه نکته ریز ولی جالب هم درباره
ENTRYPOINT
بود برام
اگر به صورت رشته‌ای بنویسیم
Docker
شروع میکنه میگرده دنبال
/bin/sh
بازم میگرده
بازم میگرده
آخرش یادش میاد که اصلا داخل
scratch
چیزی به اسم
Shell
نداریم
و خب نمی دونه جه خاکی باید به سر کنه

برای همین باید

JSON
نوشته بشه
آخر سر هم یه مقدار درباره
Dependency
ها وقت گذاشتم
اینکه چه زمانی
go.mod
و
go.sum
کافی‌ان و چه زمانی بهتره
Dependency
رو
vendor
کنیم تا بیلد قابل
تکرارتر باشه

در کل امروز بیشتر از اینکه کد بزنم داشتم پشت صحنه
Dockerfile
های حرفه‌ای رو نگاه میکردم
اینکه چرا هر خطشون یه دلیل داره

روز بدی نبود

Top comments (0)