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**
|
- **git**
|
||||||
- **python v3.11**
|
- **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
|
## 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`
|
- Thêm một Dockerfile mới cho image `node-go`
|
||||||
- Giữ base image đồng nhất với repo: `node:lts-slim`
|
- Giữ base image đồng nhất với repo: `node:lts-slim`
|
||||||
- Cài Go từ tarball chính thức thay vì `apt`
|
- 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
|
- 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
|
- 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:
|
Ư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`
|
- 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
|
- 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`
|
- cài `ca-certificates`, `curl`, `git`
|
||||||
- khai báo `GO_VERSION`
|
- khai báo `GO_VERSION`
|
||||||
- xác định kiến trúc hiện tại từ `dpkg --print-architecture`
|
- 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/`
|
- tải Go tarball phù hợp từ `https://go.dev/dl/`
|
||||||
- giải nén vào `/usr/local/go`
|
- giải nén vào `/usr/local/go`
|
||||||
- thêm `/usr/local/go/bin` vào `PATH`
|
- 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:
|
5. Dùng `dpkg --print-architecture` để map:
|
||||||
- `amd64` -> `linux-amd64`
|
- `amd64` -> `linux-amd64`
|
||||||
- `arm64` -> `linux-arm64`
|
- `arm64` -> `linux-arm64`
|
||||||
6. Tải tarball Go tương ứng, giải nén vào `/usr/local`
|
6. Nếu `GO_VERSION` là `major.minor`, map sang `.0` để tạo version tải cụ thể
|
||||||
7. Xóa file tạm và cache `apt`
|
7. Tải tarball Go tương ứng, giải nén vào `/usr/local`
|
||||||
8. Khai báo `PATH=/usr/local/go/bin:${PATH}`
|
8. Xóa file tạm và cache `apt`
|
||||||
9. Giữ `WORKDIR /app`
|
9. Khai báo `PATH=/usr/local/go/bin:${PATH}`
|
||||||
|
10. Giữ `WORKDIR /app`
|
||||||
|
|
||||||
### README
|
### 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ệ
|
- 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`
|
- 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
|
## 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