Câu hỏi ban đầu: Làm thế nào để sử dụng lệnh VOLUME trong Dockerfile?
Câu hỏi thực tế tôi muốn giải quyết là - làm thế nào để gắn khối lượng máy chủ vào các thùng chứa docker trong Dockerfile trong quá trình xây dựng, tức là có docker run -v /export:/export
khả năng trong khi docker build
.
Lý do đằng sau nó, đối với tôi, là khi xây dựng mọi thứ trong Docker, tôi không muốn những apt-get install
bộ đệm ( ) đó bị khóa trong một docker duy nhất, mà là để chia sẻ / tái sử dụng chúng. Đó là lý do chính tôi đang hỏi về câu hỏi này.
Cập nhật mới nhất:
Trước docker v18.09, câu trả lời đúng phải là câu bắt đầu bằng:
Có một cách để gắn kết âm lượng trong quá trình xây dựng, nhưng nó không liên quan đến Dockerfiles.
Tuy nhiên, đó là một câu trả lời kém, có tổ chức và được hỗ trợ. Khi tôi cài đặt lại docker của mình, tôi tình cờ gặp phải bài viết sau:
Dockerize một dịch vụ apt-cacher-ng
https://docs.docker.com/engine/examples/apt-cacher-ng/
Đó là giải pháp của docker cho câu hỏi này / của tôi, không trực tiếp mà là gián tiếp. Đó là cách docker chính thống gợi ý chúng ta làm. Và tôi thừa nhận nó tốt hơn cái tôi đang cố hỏi ở đây.
Một cách khác là, câu trả lời mới được chấp nhận , ví dụ: Buildkit trong v18.09.
Chọn bất cứ điều gì phù hợp với bạn.
Là: Đã có một giải pháp - rocker, vốn không phải từ Docker, nhưng bây giờ rocker đã bị ngưng, tôi hoàn nguyên lại câu trả lời là "Không thể" .
Cập nhật cũ: Vì vậy, câu trả lời là "Không thể". Tôi có thể chấp nhận nó như một câu trả lời vì tôi biết vấn đề đã được thảo luận rộng rãi tại https://github.com/docker/docker/issues/3156 . Tôi có thể hiểu rằng tính di động là một vấn đề tối quan trọng đối với nhà phát triển docker; nhưng là một người dùng docker, tôi phải nói rằng tôi rất thất vọng về tính năng bị thiếu này. Hãy để tôi kết thúc cuộc tranh luận của mình bằng một trích dẫn từ cuộc thảo luận đã nói ở trên: " Tôi muốn sử dụng Gentoo làm hình ảnh cơ bản nhưng chắc chắn không muốn> 1GB dữ liệu cây Portage ở bất kỳ lớp nào sau khi hình ảnh được tạo. có thể có một số thùng chứa nhỏ gọn nếu không phải là cây portage khổng lồ phải xuất hiện trong ảnh trong quá trình cài đặt."Có, tôi có thể sử dụng wget hoặc curl để tải xuống bất cứ thứ gì tôi cần, nhưng thực tế là chỉ xem xét tính di động hiện đang buộc tôi phải tải xuống> 1GB cây Portage mỗi khi tôi xây dựng hình ảnh cơ sở Gentoo không hiệu quả cũng không thân thiện với người dùng. hơn nữa, kho lưu trữ gói LUÔN LUÔN nằm dưới / usr / portage, do đó LUÔN LUÔN CÓ THỂ theo Gentoo. Một lần nữa, tôi tôn trọng quyết định, nhưng xin vui lòng cho phép tôi bày tỏ sự thất vọng của mình trong thời gian đó.
Câu hỏi gốc chi tiết:
Từ
Chia sẻ thư mục qua các tập
http://docker.readthedocs.org/en/v0.7.3/use/usiness_with_volume/
nó nói rằng tính năng khối lượng dữ liệu "đã có sẵn từ phiên bản 1 của Docker Remote API". Docker của tôi là phiên bản 1.2.0, nhưng tôi thấy ví dụ đưa ra trong bài viết trên không hoạt động:
# BUILD-USING: docker build -t data .
# RUN-USING: docker run -name DATA data
FROM busybox
VOLUME ["/var/volume1", "/var/volume2"]
CMD ["/usr/bin/true"]
Cách thích hợp trong Dockerfile để gắn các khối lượng gắn trên máy chủ vào các thùng chứa docker, thông qua lệnh VOLUME là gì?
$ apt-cache policy lxc-docker
lxc-docker:
Installed: 1.2.0
Candidate: 1.2.0
Version table:
*** 1.2.0 0
500 https://get.docker.io/ubuntu/ docker/main amd64 Packages
100 /var/lib/dpkg/status
$ cat Dockerfile
FROM debian:sid
VOLUME ["/export"]
RUN ls -l /export
CMD ls -l /export
$ docker build -t data .
Sending build context to Docker daemon 2.56 kB
Sending build context to Docker daemon
Step 0 : FROM debian:sid
---> 77e97a48ce6a
Step 1 : VOLUME ["/export"]
---> Using cache
---> 59b69b65a074
Step 2 : RUN ls -l /export
---> Running in df43c78d74be
total 0
---> 9d29a6eb263f
Removing intermediate container df43c78d74be
Step 3 : CMD ls -l /export
---> Running in 8e4916d3e390
---> d6e7e1c52551
Removing intermediate container 8e4916d3e390
Successfully built d6e7e1c52551
$ docker run data
total 0
$ ls -l /export | wc
20 162 1131
$ docker -v
Docker version 1.2.0, build fa7b24f
VOLUME ~/host_dir ~/container_dir
. Các cuộc thảo luận khá rộng rãi, si có một cách ngắn gọn để tóm tắt lý do là gì?