aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Docker ARG và ENV: phân biệt tham số build với cấu hình image

Suong Nguyen by Suong Nguyen
04/11/2026
in DevOps
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

Bạn truyền --build-arg APP_MODE=release nhưng ứng dụng khi chạy vẫn không đọc được biến môi trường mong muốn. Một build argument không tự trở thành biến runtime. Cần nhìn vào Dockerfile để biết giá trị ấy đã được dùng và lưu vào đâu.

Bài đọc Docker Build variables, Dockerfile reference và tài liệu scratch ngày 04/11/2026. Ví dụ được rà thủ công về instruction và kiểm cú pháp Bash của các lệnh. Chưa gọi Docker daemon, build image hoặc inspect image thật; các kết quả cần quan sát được mô tả như kế hoạch thử, không phải output đã thu.

Xác định nơi giá trị cần tồn tại

ARG cung cấp đầu vào để Dockerfile dùng trong quá trình build. Nó không tự xuất hiện trong môi trường container được tạo từ image. ENV ghi giá trị môi trường mặc định vào cấu hình image, đồng thời khả dụng cho các instruction tiếp theo trong stage theo tài liệu.

Một ARG vẫn có thể bị lưu thông qua LABEL, ENV, file hoặc metadata build. Vì vậy, “không tự thành biến runtime” không có nghĩa giá trị ấy không để lại dấu vết. Ví dụ chỉ dùng chuỗi demo không nhạy cảm; không dùng ARG hay ENV để giữ secret của pipeline.

Một Dockerfile chỉ để xem metadata

Tạo thư mục thử riêng và lưu file tên Dockerfile:

FROM scratch
ARG BUILD_NOTE=demo
ARG APP_MODE=local
LABEL net.aedev.demo.build-note=$BUILD_NOTE
ENV APP_MODE=$APP_MODE

scratch là điểm bắt đầu rỗng, không có shell hoặc chương trình trong image này. Dockerfile không có RUN, COPY hay CMD; mục đích là đọc cấu hình image, không tạo một ứng dụng chạy được. Cách chọn này cũng giúp ví dụ không phụ thuộc một tag Linux cụ thể đang thay đổi.

BUILD_NOTE được dùng để ghi label nên có chỗ xuất hiện trong image, dù bản thân ARG không tự tạo biến môi trường cùng tên. APP_MODE được nối rõ từ ARG sang ENV; đây mới là bước đưa giá trị build vào cấu hình môi trường mặc định.

Thử build và inspect trong môi trường có Docker

Trong đúng thư mục thử, các lệnh sau là cách kiểm chứng đề xuất:

docker build --build-arg BUILD_NOTE=sample --build-arg APP_MODE=release -t aedev-arg-env-demo .
docker image inspect --format '{{json .Config.Env}}' aedev-arg-env-demo
docker image inspect --format '{{json .Config.Labels}}' aedev-arg-env-demo

Khi bạn chạy thử, kiểm tra Env có cấu hình APP_MODE với giá trị release và label chứa build-note sample. Không kỳ vọng BUILD_NOTE tự xuất hiện trong Env. Bài chưa thực thi ba lệnh này, nên không báo image ID, thời gian build hoặc kết quả inspect cụ thể.

Không chạy docker run rồi kết luận ví dụ lỗi vì thiếu executable: image metadata này chủ ý không có ứng dụng. Với image ứng dụng thật, có thể kiểm tra thêm môi trường mà process nhận sau khi cấp các override runtime theo cấu hình triển khai.

Tránh nhầm các lớp cấu hình

Đổi --build-arg không thay đổi image đã được build từ trước. ENV trong Dockerfile là giá trị mặc định của image, còn cấu hình môi trường khi tạo container có thể ghi đè theo công cụ chạy. Khi điều tra một giá trị sai, ghi lại image đang dùng và nơi cung cấp giá trị, thay vì chỉ đọc một file env trên máy.

Trong multi-stage build, phạm vi ARG cũng cần được kiểm tra theo stage. Ví dụ này chỉ có một stage, không chứng minh một ARG khai báo ở mọi vị trí đều tự khả dụng ở các stage khác. Đừng mở rộng quy tắc từ fixture nhỏ mà bỏ qua scoping trong tài liệu.

Checklist kiểm tra một giá trị

Hỏi giá trị dùng để chọn cách build, được ghi vào image hay được cấp lúc chạy. Tìm instruction thực sự dùng nó. Sau đó inspect đúng image và quan sát đúng process trong môi trường thử nếu có ứng dụng.

Nếu chỉ cần tham số build, không tự thêm ENV để “cho chắc”. Nếu cần cấu hình runtime, biểu diễn điều đó rõ ràng trong Dockerfile hoặc cấu hình triển khai. Một đường đi dữ liệu nhìn thấy được giúp team sửa đúng lớp khi giá trị không giống mong muốn.

Nguồn tham khảo

  • Docker: build arguments, environment variables và scoping
  • Docker: Dockerfile reference
  • Docker: base image scratch

Tags: ConfigurationDockerDockerfile
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions GITHUB_ENV: giá trị mới dành cho step tiếp theo

by Suong Nguyen
03/11/2026
0

Phân biệt ghi environment file với cập nhật biến shell hiện tại bằng workflow thử hai step và một fixture Bash cục bộ.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions timeout-minutes: đặt giới hạn cho cả job và từng step

by Suong Nguyen
02/11/2026
0

Phân biệt timeout ở cấp job với step bằng workflow thử thủ công, rồi đọc đúng kết quả khi tác vụ bị dừng quá hạn.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Docker Compose: bind port vào loopback khi chỉ dùng trên host

by Suong Nguyen
01/11/2026
0

Đọc đúng host IP, host port và container port để tránh vô tình mở dịch vụ nội bộ ra các interface của máy.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Bash pipefail: tránh pipeline lỗi nhưng CI vẫn xanh

by Suong Nguyen
31/10/2026
0

Dùng pipeline giả lập để kiểm tra exit status, bật pipefail và phân biệt lỗi pipeline với chính sách dừng script.

Next Post
Minh họa phát triển ứng dụng mobile đa nền tảng với Flutter

Flutter ListView.separated: itemCount đếm dữ liệu, không đếm separator

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native ScrollView: tạo nút về đầu bằng ref và scrollTo
  • Array.isArray và instanceof: mảng từ realm khác được kiểm tra thế nào?
  • Android LayoutParams nhận pixel: đổi dp đúng một lần

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply