
Docker & Containerization
Dockerfile, multi-stage build, tối ưu hóa image, docker-compose, điều phối container
1Lý do chính để sử dụng multi-stage build cho một ứng dụng Go là gì?
Lý do chính để sử dụng multi-stage build cho một ứng dụng Go là gì?
Câu trả lời
Multi-stage build tách môi trường biên dịch khỏi image cuối cùng. Stage build chứa toàn bộ Go SDK (vài trăm MB), trong khi image cuối cùng chỉ chứa binary đã biên dịch. Điều này giảm đáng kể kích thước image (từ ~800MB xuống còn vài MB) và giảm thiểu bề mặt tấn công bằng cách loại bỏ các build tool không cần thiết trong môi trường production.
2Base image nào được khuyến nghị cho ứng dụng Go trong production để giảm thiểu kích thước và bề mặt tấn công?
Base image nào được khuyến nghị cho ứng dụng Go trong production để giảm thiểu kích thước và bề mặt tấn công?
Câu trả lời
Image scratch là một image rỗng không có hệ điều hành. Go biên dịch thành các binary tĩnh không cần libc hay các phụ thuộc hệ thống khác, nên có thể dùng scratch. Điều này tạo ra image nhỏ nhất có thể (vài MB) và mang lại bảo mật tốt nhất vì không có công cụ hay shell nào có thể bị khai thác. Distroless và alpine là các lựa chọn thay thế hợp lệ nhưng kém tối ưu hơn.
3Những flag biên dịch Go nào cần thiết để tạo một binary tương thích với image scratch?
Những flag biên dịch Go nào cần thiết để tạo một binary tương thích với image scratch?
Câu trả lời
CGO_ENABLED=0 vô hiệu hóa cgo, buộc Go sử dụng các triển khai thuần Go cho các package như net và os/user. Nếu không có nó, binary sẽ có các phụ thuộc động vào libc. GOOS và GOARCH chỉ định nền tảng đích. Sự kết hợp các flag này tạo ra một binary hoàn toàn tĩnh không có phụ thuộc bên ngoài, lý tưởng cho scratch.
Làm thế nào để tối ưu hóa caching layer Docker khi build một ứng dụng Go?
Lợi ích của việc sử dụng image Google Distroless cho Go so với scratch là gì?
+17 câu hỏi phỏng vấn
Các chủ đề phỏng vấn Go khác
Kiến thức cơ bản về Go
Cấu trúc dữ liệu Go
Interface trong Go
Xử lý lỗi
Cơ bản về Goroutine
Channels
Go Modules
Máy chủ HTTP
HTTP Client
Mã hóa JSON
Database/SQL
Gói context
Testing
Các mẫu Concurrency
Primitive đồng bộ hóa
Framework web Go
Thiết kế API REST
gRPC
Reflection
Quản lý bộ nhớ
Tối ưu hóa hiệu năng
Generics
Go Design Patterns
Microservices
Bảo mật và Xác thực
Kubernetes Basics
Go Nâng cao
Phát triển CLI
Nắm vững Go cho lần phỏng vấn tiếp theo
Truy cập tất cả câu hỏi, flashcards, bài kiểm tra kỹ thuật, bài tập code review và mô phỏng phỏng vấn.
Bắt đầu miễn phí