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
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:
@@ -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** và **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.
|
||||
- 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` là `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` là `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
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user