#! là gì?
#! (đọc là shebang) là một quy ước trên Unix, chủ yếu được dùng cho các ngôn ngữ script như Python hoặc Bash
- Giới thiệu một ví dụ sử dụng nó để đóng gói cách phân phối ứng dụng đa nền tảng và trên nhiều bản phân phối Linux thành một tệp duy nhất
- Dockerfile ví dụ cấu thành một máy chủ full-stack hoàn chỉnh, bao gồm backend, cơ sở dữ liệu và UI, tất cả trong một tệp duy nhất
- Tương tự Cosmopolitan Libc, nhưng dành cho việc đóng gói ứng dụng
Tại sao lại dùng?
Có an toàn không?
Có nên dùng không?
- Nếu muốn thì có thể dùng.
Hiệu năng có tốt không?
Có dễ bảo trì không?
Nó có hoạt động không?
Chạy như thế nào?
- Có thể chạy bằng lệnh sau:
chmod +x ./Dockerfile ./Dockerfile
- Sau đó truy cập địa chỉ http://127.0.0.1:8080.
Ý kiến của GN⁺
- Bài viết này giới thiệu một cách tiếp cận độc đáo: dùng
#! (shebang) để đóng gói một máy chủ full-stack vào trong một Dockerfile duy nhất.
- Nó khơi gợi sự tò mò về mặt kỹ thuật và đưa ra một hướng tiếp cận mới cho cách triển khai ứng dụng truyền thống.
- Dù không được khuyến nghị về mặt bảo trì và độ ổn định, cách làm này vẫn có thể là một lựa chọn thú vị cho các lập trình viên quan tâm đến những dự án mang tính thử nghiệm và đổi mới.
7 bình luận
Để dùng heredoc như
<<EOF, cần có# syntax = docker/dockerfile:1.4.0ở đầu Dockerfile. Điều đáng ngạc nhiên là cảsyntaxcũng được lấy từ Docker registry.Wow... đây là cú sốc tinh thần lớn nhất của tôi trong năm nay luôn đó hahahahaha
Một cách khá thú vị.
Haha... đúng là mới lạ thật.
Wow.. cái này thật mới lạ. Cảm giác như phát hiện ra sự kết hợp giữa thép cây và bê tông vậy.. nói thế thì hơi quá nhưng đúng là hay.
Hóa ra đúng lúc
#!trong Dockerfile lại hoạt động được nhờ#là ký tự chú thích, nên kiểu mẹo này mới dùng được..Từ giờ chắc phải đưa vào Dockerfile thay vì tách riêng các file kiểu
build-run-test.shnữa rồi.Cái này thú vị thật đấy. Haha. "Tại sao lại không nên dùng nhỉ?"
Ý kiến trên Hacker News
Ví dụ sử dụng shebang
nix-shellnix-shellđể tạo một script có thể thực thi, bao gồm mọi dependency cần thiết.chmod +x), nó sẽ trở thành một tệp thực thi với các dependency đã chỉ định.Tùy chọn
-S/--split-stringcủa/usr/bin/env-S, khả dụng từ GNU Coreutils 8.30.Docker và khả năng tương thích kiến trúc
Ý kiến về ứng dụng một tệp duy nhất
Nhắc đến Podman và bubblewrap như lựa chọn thay thế Docker
Dự án một tệp dùng heredoc
Phê phán sự ám ảnh với "một tệp duy nhất"
Mẫu script tự tiêu thụ
sedđể trích xuất script nằm giữa các thẻ.Cách dùng
guix shellở vị trí shebangguix shelllấy từ tài liệu hướng dẫn của Guix.Dockerfile tự build và tự chạy