dockerfmt - Trình định dạng Dockerfile
(github.com/reteps)- Là công cụ thay thế hiện đại cho
dockfmt, tự động sắp xếp Dockerfile và chuẩn hóa code style - Bên trong sử dụng
buildkitđể phân tích cú pháp Dockerfile vàmvdan/shđể định dạng script shell trong lệnhRUN - Giúp duy trì code style nhất quán và có thể hữu ích trong quá trình code review cũng như môi trường CI
Cách sử dụng
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- Các lệnh chính:
- completion: tạo script tự động hoàn thành cho shell
- help: trợ giúp lệnh
- version: hiển thị phiên bản
- Các cờ chính:
- -c, --check: chỉ kiểm tra xem đã được định dạng hay chưa
- -i, --indent: thiết lập số khoảng trắng thụt lề (mặc định 4)
- -n, --newline: thêm ký tự xuống dòng ở cuối tệp
- -s, --space-redirects: thêm khoảng trắng sau toán tử chuyển hướng
- -w, --write: ghi đè nội dung đã thay đổi vào tệp gốc
Thiết lập hook pre-commit
- Có thể tích hợp dưới dạng hook pre-commit
- Ví dụ tệp .pre-commit-config.yaml:
repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
Các hạn chế hiện tại
- Trong lệnh RUN, dấu chấm phẩy (
;) hoặc nhóm lệnh vẫn chưa được hỗ trợ - Chưa có tính năng tự động xuống dòng cho các lệnh JSON dài
- Không hỗ trợ directive
# escape=X
Giới thiệu tính năng
-
Sử dụng mvdan/sh khi định dạng lệnh RUN
-
Hỗ trợ heredoc cơ bản:
RUN <<EOF echo "hello" echo "world" EOF -
Hỗ trợ chú thích bên trong lệnh RUN:
RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
Công cụ cố gắng gắn chú thích đúng vào vị trí đã được định dạng, nhưng điều này khó thực hiện vì chú thích bị loại bỏ ở bước parser
JS binding
- JS binding được bao gồm trong thư mục js
- Có thể xem cách sử dụng trong
js/README.md
Ghi chú khác
- Vì vẫn là phiên bản trước 1.0.0 nên chưa khuyến nghị sử dụng trong môi trường production
1 bình luận
Ý kiến trên Hacker News
RUNkhông hỗ trợ nhóm lệnh hoặc dấu chấm phẩy trong câu lệnhRUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etcRUNkhông hỗ trợ nhóm lệnh hoặc dấu chấm phẩy trong câu lệnh, nhưng ví dụ lại cho thấy nó hỗ trợ&&. Tôi thắc mắc vì sao lại có sự khác biệt đóRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMđể các stage rõ ràng hơn. Tôi nghĩ việc không làm vậy cũng giống như không thụt lề phần thân hàm trong các ngôn ngữ khác