Tầm quan trọng của thứ tự lệnh trong Dockerfile
- Dockerfile được thực thi từ trên xuống dưới, theo thứ tự từng dòng lệnh.
- Một số lệnh phụ thuộc lẫn nhau ➜ nếu đặt sai thứ tự, Docker build sẽ thất bại.
- Các traps lỗi phổ biến thường gặp:
- Sử dụng USER trước khi tạo user ➜ lỗi “user not found”.
- Sử dụng USER không có quyền để thao tác thư mục hệ thống ➜ lỗi permission denied.
Ví dụ thực tế với CentOS và cloud_user
Sai thứ tự dẫn đến lỗi:
FROM centos:latest
USER cloud_user # cloud_user chưa tồn tại
RUN mkdir /etc/myconf # không đủ quyền vì đang là cloud_user
RUN echo "setting=prod" > /etc/myconf/conf.cfg
Docker build bị lỗi vì:
1. USER cloud_user: user chưa được tạo ➜ lỗi.
2. mkdir và echo yêu cầu quyền root ➜ permission denied.
Thứ tự đúng
FROM centos:latest
## Tạo user cloud_user trước
RUN useradd -ms /bin/bash cloud_user
## Các thao tác yêu cầu quyền root
RUN mkdir /etc/myconf
RUN echo "setting=prod" > /etc/myconf/conf.cfg
## Chuyển sang người dùng không đặc quyền
USER cloud_user
Docker build thành công vì các thao tác yêu cầu quyền cao được thực hiện trước khi chuyển sang non-root user.
Note
| Lệnh | Nên thực hiện khi | Lưu ý |
|---|---|---|
USER | Sau cùng | Sau khi xong lệnh cần root |
RUN mkdir, RUN echo | Khi còn root | Vì ghi vào /etc cần quyền |
RUN useradd | Trước khi USER | Tạo user trước khi dùng |
Tổng kết
- Dockerfile thực thi theo thứ tự từ trên xuống dưới.
- Các lệnh cần quyền root phải đặt trước khi dùng
USERđể chuyển sang user không đặc quyền. - Hãy kiểm tra kỹ thứ tự lệnh để tránh lỗi build.