‫Vậy chúng ta phải làm gì với tệp này?
‫Thôi, hãy thoát ra ngoài. Chúng ta sẽ thấy trong thư mục này rằng chúng ta chỉ có một tệp này.
‫Nó chỉ có một kích thước nhỏ.
‫Rõ ràng là nó không có bất cứ thứ gì ngoài văn bản, nhưng đó là hướng dẫn về cách xây dựng hình ảnh
‫của chúng ta.
‫Lệnh from, khi tôi tạo hình ảnh này, sẽ thực sự kéo hình ảnh jessie debian đó từ Docker Hub xuống bộ
‫nhớ cache cục bộ của tôi. Và sau đó nó sẽ thực thi từng dòng một
‫trong số những khổ thơ đó bên trong công cụ docker của tôi và lưu vào bộ nhớ
‫cache từng lớp đó.
‫Hãy nhập xây dựng hình ảnh docker và chúng tôi sẽ gắn thẻ nó.
‫Hãy nhớ rằng, đó là tên mà chúng ta sẽ đưa ra một hình ảnh.
‫Vì tôi sẽ chỉ sử dụng hình ảnh này cục bộ nên tôi không phải sử dụng tên tài khoản Docker Hub của mình. Tôi có thể gọi nó bất cứ điều
‫gì tôi muốn.
‫Tôi sẽ gọi nó là nginx tùy chỉnh và tôi sẽ đặt một dấu chấm ở đây, về cơ bản nói rằng, xây
‫dựng tệp dockerfile trong thư mục này. Và bạn sẽ thấy khi bước qua
‫bước này, mỗi bước là một dòng trong tệp dockerfile mà nó đang thực thi bên trong hình ảnh này khi xây dựng nó.
‫Và sau đó, có một số băm nhỏ ở cuối, thực sự là hàm băm mà nó giữ
‫trong bộ đệm ẩn của bản dựng để lần sau chúng ta xây dựng thứ này, nếu dòng đó không thay
‫đổi trong tệp dockerfile, nó sẽ không chạy lại nó.
‫Đây là một trong những điều kỳ diệu tại sao Docker giúp cho việc triển khai và xây dựng phần mềm nhanh đến vậy bởi nó thực sự
‫đủ thông minh để lưu vào bộ nhớ cache các bước trong quá trình xây dựng.
‫Vì vậy, khá thường xuyên, sau khi bạn đã xây dựng hình ảnh lần đầu tiên và bạn thực sự chỉ ở đó thay
‫đổi mã nguồn tùy chỉnh của mình và không nhất thiết phải thay đổi ứng dụng, tất cả
‫những thứ cài đặt này đã xảy ra.
‫Vì vậy, bạn sẽ có thời gian xây dựng rất ngắn.
‫Được rồi, bây giờ chúng ta đang xây dựng xong. Điều đó mất khoảng một phút.
‫Nhưng, điều gì sẽ xảy ra nếu tôi quay lại tập tin đó? Tôi sẽ thêm một cổng tiếp xúc bổ sung.
‫Ví dụ, tôi sẽ làm 8080.
‫Bây giờ, điều đó không có nghĩa là nginx đủ thông minh để biết rằng tôi đang mở cổng này hoặc rằng nó
‫đang giao tiếp với nginx theo bất kỳ cách nào.
‫Chỉ là tôi cho phép vùng chứa nhận các gói tin trên cổng đó.
‫Để chắc chắn, hãy làm một hình ảnh docker ls. Chúng ta sẽ thấy ngay ở trên cùng rằng nó tự động gắn thẻ nó là
‫mới nhất, phải
‫không?
‫Bởi vì chúng tôi chỉ gọi nó với tên kho lưu trữ.
‫Chúng tôi đã không thực sự đặt cho nó một tên thẻ dấu hai chấm khi chúng tôi gắn thẻ nó.
‫Vì vậy, chúng ta hãy xây dựng nó một lần nữa.
‫Wow, nhanh quá, phải không?
‫Điều đó chỉ khiến chúng tôi mất vài giây. Và bạn sẽ nhận thấy rằng ở mỗi bước, nó sẽ thông báo bằng cách sử dụng bộ nhớ cache. Bắt đầu với Bước 2, nó sẽ thông
‫báo sử dụng
‫bộ đệm, sử dụng bộ đệm trên 3, sử dụng bộ đệm trên 4. Ở bước 5, nó nhận ra ở bước 5,
‫dòng đó khác.
‫Vì vậy, nó thực sự thực thi điều đó vào vùng chứa. Và sau đó, ở Bước 6, nó phải chạy lại dòng
‫đó vì mỗi phút một dòng thay đổi, mọi dòng sau đó bây giờ cũng phải được xây dựng lại.
‫Điều này đưa ra quan điểm về thứ tự các dòng trong Dockerfile của bạn. Bởi vì, nếu bạn làm mọi thứ không theo thứ
‫tự, chẳng hạn, nếu
‫bạn sao chép mã trong ... giả sử bạn đang xây dựng một trang web. Nếu bạn đang sao chép
‫mã phần mềm mà bạn đang tạo ở phần đầu của tệp, thì mỗi khi bạn thay đổi tệp
‫nguồn và xây dựng lại, bạn sẽ phải xây dựng lại toàn bộ Dockerfile.
‫Vì vậy, điều cực kỳ quan trọng đối với sự tỉnh táo và thời gian của bạn là bạn thường giữ những thứ ở
‫đầu Dockerfile ít thay đổi nhất và sau đó là những thứ thay đổi nhiều nhất ở cuối Dockerfile
‫của bạn.