- Dockerfile là gì?
Dockerfile là tệp mô tả cấu trúc của một hình ảnh Docker.
- Tác dụng của Dockerfile?
Dockerfile được sử dụng để xây dựng hình ảnh Docker tùy chỉnh.
- Cách tạo hình ảnh thông qua Dockerfile
a. Tạo một tệp Dockerfile ở vị trí mong muốn.
b. Xây dựng hình ảnh từ Dockerfile:
docker build -t ten_hinh_anh:version .
- Quá trình xây dựng hình ảnh từ Dockerfile
Lưu ý: Cần ghi các tệp và thư mục không cần thiết vào dockerIgnore, vì Docker mặc định sẽ gửi tất cả tệp trong thư mục chứa Dockerfile đến engine Docker, làm chậm quá trình xây dựng. Trong quá trình này, các hình ảnh tạm thời sẽ được tạo ra và lưu trong bộ nhớ đệm, cuối cùng sẽ tạo ra hình ảnh cuối cùng.
- Các lệnh trong Dockerfile
FROM Chỉ định hình ảnh cơ sở
MAINTAINER Thông tin liên hệ của người duy trì
RUN Thực thi lệnh trong quá trình xây dựng
EXPOSE Khai báo cổng mở cho container
WORKDIR Đặt đường dẫn làm việc mặc định
ENV Đặt biến môi trường
ADD Sao chép tệp từ máy chủ đến hình ảnh và tự động giải nén nếu cần
COPY Sao chép tệp từ máy chủ đến hình ảnh
VOLUME Định nghĩa volume cho dữ liệu bền vững
CMD Lệnh mặc định khi khởi chạy container
ENTRYPOINT Định nghĩa lệnh khởi chạy chính cho container
- Lưu ý khi xây dựng Dockerfile
- Tên tệp nên là Dockerfile.
- Tất cả các từ khóa phải viết hoa và có ít nhất một tham số.
- Dấu # dùng để chú thích.
- Mỗi lệnh tạo một lớp mới trong hình ảnh.
- Chi tiết về các lệnh Dockerfile
WORKDIR: Nếu thư mục không tồn tại, nó sẽ tự động được tạo. Có thể đặt nhiều WORKDIR trong Dockerfile, chúng sẽ được áp dụng theo thứ tự.
Ví dụ:
WORKDIR /apps
WORKDIR data
# Đường dẫn cuối cùng sẽ là /apps/data
ENV: Đặt biến môi trường.
ENV key value hoặc key=value
VOLUME: Định nghĩa volume cho dữ liệu bền vững. Nếu không khai báo, vẫn có thể sử dụng -v khi chạy container.
VOLUME /root/data/
CMD & ENTRYPOINT:
- Cả hai đều chỉ định lệnh mặc định khi khởi chạy container.
- CMD: Chỉ định lệnh mặc định, có thể bị thay thế bởi các tham số sau
docker run. - ENTRYPOINT: Chỉ định lệnh cố định, khó thay đổi hơn CMD.
Cách sử dụng:
CMD: redis-server
CMD: ["redis-server"] # Phương pháp này được khuyến nghị
Khác biệt:
- Thay đổi lệnh CMD:
docker run ten_hinh_anh:version lenh_moi - Thay đổi lệnh ENTRYPOINT:
docker run --entrypoint=lenh_moi ten_hinh_anh:version tham_so
Sử dụng CMD và ENTRYPOINT kết hợp:
ENTRYPOINT ["ls"]
CMD ["/root/data"]
- Ví dụ về Dockerfile
1. Tạo một dự án Django
2. Phát triển tính năng đơn giản, kết nối với cơ sở dữ liệu
3. Kiểm thử mã nguồn
4. Viết Dockerfile để tạo hình ảnh dự án
5. Chạy hình ảnh