Để trả lời câu hỏi của bạn - điều không thể với v3 - xem phần bên dưới. v3 sẽ không được sử dụng như một người kế thừa (cũng là một tuyên bố chính thức bởi docker) nó sẽ được sử dụng trong "trường hợp swarm". Tuy nhiên,
tuy nhiên, những gì bạn nên làm là sử dụng khối lượng được đặt tên.
Bạn có thể kết hợp nó với khối lượng máy chủ-mount như thế này
docker volume create --name volume1 -o type=none -o device=/home/$USER/projects/01 -o o=bind
Bạn có thể đơn giản hóa sử dụng này lâu cú pháp giới thiệu trong 3.2: https://docs.docker.com/compose/compose-file/#long-syntax-2 vì vậy bạn có thể xác định tên là khối lượng + bind trên host trong Docker-soạn tập tin dụ:
services:
full-tests:
volumes:
- type: volume
source: ../
target: /opt/project
- type: volume
source: ../../../ext-libs
target: /opt/ext-libs
hoặc trong ngắn hạn như bạn có
services:
full-tests:
volumes:
- ../:/opt/project
- ../../../ext-libs:/opt/ext-libs
Những gì bạn không thể làm, đặt cú pháp dài theo định nghĩa "khối lượng" cấp cao nhất để đặt tên cho tập đó và tái sử dụng nó trong phần khối lượng trong các dịch vụ - điều đó là không thể. Để làm như vậy, bạn sẽ sử dụng một
volumes:
project:
external: true
third-party:
external: true
Và sau đó sử dụng "khối lượng Docker tạo ra" cú pháp trên cli để tạo ra những khối lượng với một lựa chọn ràng buộc, như phác thảo trên
nhưng bạn sẽ không bao giờ có được những gì volumes_from đang làm cho bạn đây
không có tương đương với volumes_from trong v3, vì v3 không phải là một người kế nhiệm của v2, một sự thay thế của nó - xin vui lòng xem nhận xét của tôi và các nguồn đây https://github.com/rancher/rancher/issues/3316#issuecomment-310889283
Để tổng hợp - volume_from và khối lượng có một chồng chéo trong trường hợp volumes_from chỉ được sử dụng sai cách/trong trường sai.
a) Nếu bạn muốn dữ liệu được tiếp tục tồn trên chồng nâng cấp (xuống + lên), bạn chọn tên khối lượng - và bây giờ, nếu 2+ dịch vụ cần phải chia sẻ này, chỉ cần gắn tên khối lượng này sử dụng volumes:
.
b) Nếu bạn làm như vậy, hãy không muốn dữ liệu tồn tại lâu hơn nâng cấp ngăn xếp (ví dụ: vì mã nguồn và hình ảnh thực sự bao gồm nâng cấp) như trong một ứng dụng thông thường + httpd/proxy sẽ tạo ra một anon-volume cho ví dụ này /var/www
trong Dockerfile bằng cách sử dụng Volume /var/www
và sau đó sử dụng volumes_from để gắn nó trong dịch vụ httpd
.
điểm chính với b là, rằng trên stack nâng cấp, khối lượng anon sẽ được gỡ bỏ (`Docker-soạn xuống loại bỏ container anon, nhưng không có tên những người thân) và do đó việc nâng cấp các công trình như mong đợi, bạn có một codebase mới
đang cố gắng để làm điều tương tự với khối lượng đặt tên sẽ cho bạn một bất ngờ rất lớn về việc nâng cấp đầu tiên, kể từ khi đang trên một khối lượng được đặt tên và rằng sẽ overlay codebase vào hình ảnh "tươi"/mới container, do đó bạn sẽ chạy trên codebase cũ sau khi nâng cấp.
Một số gợi ý ở đây: https://github.com/moby/moby/issues/19990 – Borek
xin vui lòng viết công cụ của bạn theo một cách v2 thích hợp, không phải là một cách v1 –
@EugenMayer cập nhật. – Borek