لاگ روز ششم
۱۱ مرداد
خب امروز روی نوشتن
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)