Mục đích của việc xây dựng docker --pull là gì?


17

Khi xây dựng một hình ảnh docker bạn thường sử dụng docker build ..

Nhưng tôi đã thấy rằng bạn có thể chỉ định --pull, vì vậy toàn bộ lệnh sẽ giống nhưdocker build --pull .

Tôi không chắc về mục đích của --pull. Tài liệu chính thức của Dockers cho biết "Luôn cố gắng kéo phiên bản mới hơn của hình ảnh" và tôi không chắc điều này có nghĩa gì trong bối cảnh này.

Bạn sử dụng docker buildđể xây dựng một hình ảnh mới, và cuối cùng xuất bản nó ở đâu đó lên một sổ đăng ký container. Tại sao bạn muốn kéo một cái gì đó chưa tồn tại?

Tôi mong muốn một cái gì đó "đơn giản" như điều này có thể dễ dàng tìm thấy trên web, nhưng dường như không ai có câu hỏi tương tự như câu hỏi này. Cú đánh thực sự duy nhất trên google đề cập đến các tài liệu chính thức của Dockers, điều mà tôi (như đã nêu ở trên) không hiểu.

Cảm ơn bạn đã giúp đỡ!

Câu trả lời:


17

nó sẽ lấy phiên bản mới nhất của bất kỳ (các) hình ảnh cơ sở nào thay vì sử dụng lại bất cứ thứ gì bạn đã gắn thẻ cục bộ

ví dụ như một hình ảnh dựa trên một thẻ di chuyển (chẳng hạn như ubuntu:bionic). ngược dòng thực hiện thay đổi và xây dựng lại định kỳ này nhưng bạn có thể có một hình ảnh cũ vài tháng tại địa phương. Docker sẽ vui vẻ xây dựng chống lại căn cứ cũ. --pullsẽ kéo theo như một hiệu ứng phụ để bạn xây dựng dựa trên hình ảnh cơ sở mới nhất

đó thường là cách tốt nhất để sử dụng nó để sửa lỗi bảo mật ngược dòng càng sớm càng tốt (thay vì sử dụng các hình ảnh cũ, có khả năng bị tổn thương). mặc dù bạn phải đánh đổi các thay đổi (và nếu bạn sử dụng các thẻ không thay đổi thì điều đó sẽ không tạo ra sự khác biệt)


Đây là một lời giải thích rất tốt với ubuntu:bionichình ảnh, vì nó (rõ ràng) không có phiên bản đính kèm, nhưng vẫn sẽ khác nhau mỗi khi họ xuất bản một hình ảnh mới. Tất cả đều có ý nghĩa. Cảm ơn!
Jim Aho

1
Nếu hình ảnh cơ sở là ubuntu:0.1.0ví dụ, và họ đã xuất bản một hình ảnh mới nhưng với cùng một phiên bản tức là ubuntu:0.1.0- điều này có nghĩa là docker build --pullsẽ tải lại toàn bộ hình ảnh mới một lần nữa? (đó sẽ là điều mà hầu hết mọi người ưa thích tôi đoán)
Jim Aho

Tôi hy vọng ai đó sẽ làm rõ câu hỏi cuối cùng từ @JimAho vì đó cũng là điều tôi muốn hiểu rõ hơn. Nếu hình ảnh vừa được đẩy, và không có gì khác thay đổi, thì đó có phải là trường hợp không được xây dựng lại không?
learning2learn

2
@ learning2tìm hiểu câu trả lời là có, thẻ của hình ảnh docker chỉ là một chuỗi nên "0.1.0" không khác gì ví dụ trong câu trả lời "bionic"
Anthony Sottile

@AnthonySottile Cảm ơn bạn. rất nhiều.
learning2learn

1

Câu trả lời đơn giản. docker buildđược sử dụng để xây dựng từ một dockerfile cục bộ. docker pullđược sử dụng để kéo từ trung tâm docker. Nếu bạn sử dụng docker build mà không có tập tin docker thì nó sẽ báo lỗi.

Khi bạn chỉ định --pullhoặc :latestdocker sẽ cố tải xuống phiên bản mới nhất (nếu có)

Về cơ bản, nếu bạn thêm --pull, nó sẽ cố gắng kéo phiên bản mới nhất mỗi khi nó được chạy.


Nếu bạn có hình ảnh xếp lớp - nó sẽ kéo tất cả chúng luôn chứ?
Jim Aho

Nếu bạn có các lớp hình ảnh, một số sẽ được lưu vào bộ nhớ cache trên máy (các lớp cũ hơn) và bất kỳ lớp mới nào sẽ được kéo.
DuDoff

0

Docker cho phép chuyển  --pull cờ đến  docker build, vd  docker build . --pull -t myimage. Đây là cách được đề xuất để đảm bảo rằng bản dựng luôn sử dụng hình ảnh container mới nhất mặc dù phiên bản có sẵn tại địa phương. Tuy nhiên, một điểm đáng nói thêm:

Để đảm bảo rằng bản dựng của bạn được xây dựng lại hoàn toàn, bao gồm kiểm tra hình ảnh cơ sở để cập nhật, hãy sử dụng các tùy chọn sau khi xây dựng:

--no-cache - Điều này sẽ buộc xây dựng lại các lớp đã có sẵn.

Lệnh đầy đủ do đó sẽ trông như thế này:

docker build . --pull --no-cache --tag myimage:version

Các tùy chọn tương tự có sẵn cho docker-compose:

docker-compose build --no-cache --pull


Trong sử dụng bình thường, bạn không cần --no-cache. Nếu hình ảnh cơ sở được cập nhật (và --pullcó phiên bản mới) sẽ tự động làm mất hiệu lực bộ đệm; tương tự nếu bạn COPYkhác mã sẽ làm mất hiệu lực bộ đệm. Điều duy nhất điều này thường sẽ ảnh hưởng là nếu bạn đang làm một cái gì đó giống như apt-get installgói được lưu trữ trên mạng, trong trường hợp đó --no-cachesẽ khiến nó kiểm tra phiên bản mới hơn ngay cả khi hình ảnh cơ sở chưa được cập nhật.
Mê cung David
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.