node-go
docker-node image / build (arm64) (push) Successful in 32s
docker-node image / build (amd64) (push) Successful in 55s
node-python image / build (arm64) (push) Successful in 1m2s
docker-node image / amend-manifest (push) Successful in 12s
node-python image / build (amd64) (push) Successful in 1m45s
node-python image / amend-manifest (push) Successful in 9s

This commit is contained in:
2026-04-28 00:03:58 +07:00
parent cdaf343fc0
commit f7ebfffddb
3 changed files with 48 additions and 7 deletions
+10
View File
@@ -20,6 +20,16 @@ Kho lưu trữ này cung cấp các Docker base image cho nhiều mục đích s
- **git**
- **python v3.11**
- **node-go**
- `git.thuanle.me/public/base:node-go-latest`
- Dockerfile: [node-go.Dockerfile](node-go.Dockerfile)
- Các gói/phần mềm đã cài đặt:
- **Node.js** kèm theo **npm****yarn**
- **git**
- **Go 1.26**
- Ghi chú:
- `GO_VERSION` hiện được giữ ở mức `1.26` và sẽ nâng thủ công khi cần
## Update
- Repo được update hàng tuần.
@@ -14,6 +14,7 @@ Mục tiêu của thay đổi này là bổ sung thêm một base image mới ch
- Thêm một Dockerfile mới cho image `node-go`
- Giữ base image đồng nhất với repo: `node:lts-slim`
- Cài Go từ tarball chính thức thay vì `apt`
- Giữ `GO_VERSION` ở mức dễ đọc theo nhánh chính như `1.26`
- Giữ image tối giản, chỉ cài thêm các gói hệ thống thật sự cần thiết
- Cập nhật `README.md` để công bố image mới và các thành phần đi kèm
@@ -42,7 +43,7 @@ Nhược điểm:
Ưu điểm:
- Kiểm soát version Go rõ ràng bằng biến môi trường
- Kiểm soát nhánh version Go rõ ràng bằng biến môi trường
- Cập nhật nhanh hơn so với `apt`
- Phù hợp hơn cho image nền dùng lại nhiều nơi
@@ -61,6 +62,7 @@ Image mới sẽ:
- cài `ca-certificates`, `curl`, `git`
- khai báo `GO_VERSION`
- xác định kiến trúc hiện tại từ `dpkg --print-architecture`
- nếu `GO_VERSION``major.minor`, tải bản `.0` tương ứng trong nhánh đó
- tải Go tarball phù hợp từ `https://go.dev/dl/`
- giải nén vào `/usr/local/go`
- thêm `/usr/local/go/bin` vào `PATH`
@@ -82,10 +84,11 @@ Tạo file `node-go.Dockerfile` với cấu trúc gần giống các Dockerfile
5. Dùng `dpkg --print-architecture` để map:
- `amd64` -> `linux-amd64`
- `arm64` -> `linux-arm64`
6. Tải tarball Go tương ứng, giải nén vào `/usr/local`
7. Xóa file tạm và cache `apt`
8. Khai báo `PATH=/usr/local/go/bin:${PATH}`
9. Giữ `WORKDIR /app`
6. Nếu `GO_VERSION``major.minor`, map sang `.0` để tạo version tải cụ thể
7. Tải tarball Go tương ứng, giải nén vào `/usr/local`
8. Xóa file tạm và cache `apt`
9. Khai báo `PATH=/usr/local/go/bin:${PATH}`
10. Giữ `WORKDIR /app`
### README
@@ -113,7 +116,7 @@ Sau khi implement:
- URL tải Go hoặc naming của tarball có thể đổi nếu `GO_VERSION` không hợp lệ
- Mapping kiến trúc cần xử lý rõ để tránh build fail trên `arm64`
- Nếu không pin `GO_VERSION`, output build có thể thay đổi theo thời gian; vì vậy nên khai báo version tường minh
- Nếu cần patch mới hơn trong cùng nhánh, phải nâng thủ công trong Dockerfile
## Open Decisions Resolved
+28
View File
@@ -0,0 +1,28 @@
FROM node:lts-slim
ARG GO_VERSION=1.26
ENV DEBIAN_FRONTEND=noninteractive \
PATH=/usr/local/go/bin:${PATH}
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates curl git; \
arch="$(dpkg --print-architecture)"; \
case "${arch}" in \
amd64) go_arch='linux-amd64' ;; \
arm64) go_arch='linux-arm64' ;; \
*) echo "Unsupported architecture: ${arch}" >&2; exit 1 ;; \
esac; \
case "${GO_VERSION}" in \
*.*.*) download_go_version="${GO_VERSION}" ;; \
*.*) download_go_version="${GO_VERSION}.0" ;; \
*) echo "GO_VERSION must be major.minor or major.minor.patch: ${GO_VERSION}" >&2; exit 1 ;; \
esac; \
curl -fsSL "https://go.dev/dl/go${download_go_version}.${go_arch}.tar.gz" -o /tmp/go.tgz; \
rm -rf /usr/local/go; \
tar -C /usr/local -xzf /tmp/go.tgz; \
rm -f /tmp/go.tgz; \
rm -rf /var/lib/apt/lists/*
WORKDIR /app