Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Tôi có thể sử dụng hình ảnh cơ sở khác cho ứng dụng Go của mình trong Docker không


Tôi có thể sử dụng hình ảnh cơ sở khác cho ứng dụng Go của mình trong Docker không


Có, bạn có thể sử dụng hình ảnh cơ sở khác cho ứng dụng Go của mình trong Docker. Dưới đây là một số lựa chọn và cân nhắc:

1. Hình ảnh Golang chính thức:
- Hình ảnh `golang` chính thức là điểm khởi đầu tốt và được nhóm Docker khuyên dùng.
- Nó cung cấp chuỗi công cụ Go cần thiết và các phần phụ thuộc để xây dựng và chạy ứng dụng Go của bạn.
- Ví dụ: `FROM golang:1.19-alpine`

2. Hình ảnh dựa trên dãy núi:
- Hình ảnh `golang:alpine` là một biến thể nhỏ hơn của hình ảnh `golang` chính thức, dựa trên bản phân phối Alpine Linux.
- Nó mang lại hình ảnh Docker cuối cùng nhỏ hơn, có lợi cho việc triển khai.
- Tuy nhiên, hình ảnh dựa trên Alpine có thể có vấn đề về khả năng tương thích với một số thư viện phụ thuộc vào glibc.
- Ví dụ: `FROM golang:1.19-alpine`

3. Hình ảnh không thể phân phối:
- Hình ảnh không phân phối là hình ảnh Docker tối thiểu, không dựa trên root, chỉ chứa ứng dụng của bạn và các phần phụ thuộc thời gian chạy của nó.
- Chúng được thiết kế nhỏ gọn và an toàn nhất có thể, không bao gồm trình quản lý gói, trình bao hoặc các thành phần không cần thiết khác.
- Ví dụ: `TỪ gcr.io/distroless/base-debian11`

4. Hình ảnh vết xước:
- Hình ảnh `scratch` là hình ảnh cơ sở trống, có nghĩa là nó không chứa hệ điều hành, thư viện hoặc bất kỳ phần phụ thuộc nào khác.
- Điều này dẫn đến hình ảnh Docker nhỏ nhất có thể, nhưng nó yêu cầu ứng dụng của bạn phải được biên dịch tĩnh và bao gồm tất cả các phần phụ thuộc cần thiết.
- Ví dụ: `TỪ đầu`

Khi chọn hình ảnh cơ sở, hãy xem xét các yếu tố sau:
- Kích thước hình ảnh: Hình ảnh nhỏ hơn thường được ưu tiên để triển khai nhanh hơn và giảm yêu cầu lưu trữ.
- Khả năng tương thích: Đảm bảo rằng ứng dụng của bạn và các phần phụ thuộc của nó tương thích với hình ảnh cơ sở mà bạn chọn.
- Bảo mật: Hình ảnh không phân phối và vết xước an toàn hơn vì chúng có bề mặt tấn công nhỏ hơn.
- Gỡ lỗi: Hình ảnh có hệ điều hành đầy đủ (ví dụ: `golang`) có thể dễ gỡ lỗi hơn vì bạn có thể truy cập vào trình bao và tiện ích của vùng chứa.

Việc lựa chọn hình ảnh cơ sở cuối cùng phụ thuộc vào các yêu cầu cụ thể của bạn, chẳng hạn như kích thước hình ảnh, tính bảo mật và độ phức tạp của ứng dụng Go của bạn. Người ta thường sử dụng hình ảnh `golang` chính thức để phát triển và thử nghiệm, sau đó chuyển sang hình ảnh tối giản hơn như `distroless` hoặc `scratch` để triển khai sản xuất.

Trích dẫn:
[1] https://stackoverflow.com/questions/47028597/choosing-golang-docker-base-image
[2] https://hub.docker.com/_/golang
[3] https://snyk.io/blog/containerizing-go-appluggest-with-docker/
[4] https://docs.docker.com/lingu/golang/build-images/
[5] https://dev.to/chseki/build-a-super-minimalistic-docker-image-to-run-your-golang-app-33j0