Câu trả lời này dành cho phiên bản docker-compose 2 và nó cũng hoạt động trên phiên bản 3
Bạn vẫn có thể truy cập dữ liệu khi bạn sử dụng phụ thuộc.
Nếu bạn nhìn vào docker docs Docker Compose và Django , bạn vẫn có thể truy cập cơ sở dữ liệu như thế này:
version: '2'
services:
db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
Sự khác biệt giữa các liên kết và phụ thuộc là gì?
liên kết:
Khi bạn tạo một thùng chứa cho cơ sở dữ liệu, ví dụ:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql
docker inspect d54cf8a0fb98 |grep HostPort
Và bạn có thể tìm thấy
"HostPort": "32777"
Điều này có nghĩa là bạn có thể kết nối cơ sở dữ liệu từ cổng localhost 32777 (3306 trong container) nhưng cổng này sẽ thay đổi mỗi khi bạn khởi động lại hoặc gỡ bỏ container. Vì vậy, bạn có thể sử dụng các liên kết để đảm bảo rằng bạn sẽ luôn kết nối với cơ sở dữ liệu và không phải biết đó là cổng nào.
web:
links:
- db
phụ thuộc:
Tôi tìm thấy một blog đẹp từ Giorgio Ferraris Docker-compose.yml: từ V1 đến V2
Khi docker-compose thực thi các tệp V2, nó sẽ tự động xây dựng một mạng giữa tất cả các container được xác định trong tệp và mọi container sẽ ngay lập tức có thể tham chiếu đến các tệp khác chỉ bằng cách sử dụng các tên được xác định trong tệp docker-compose.yml.
Và
Vì vậy, chúng tôi không cần liên kết nữa; các liên kết đã được sử dụng để bắt đầu giao tiếp mạng giữa bộ chứa db và bộ chứa máy chủ web của chúng tôi, nhưng điều này đã được thực hiện bởi docker-compose
Cập nhật
Thể hiện sự phụ thuộc giữa các dịch vụ, có hai tác dụng:
docker-compose up
sẽ bắt đầu dịch vụ theo thứ tự phụ thuộc. Trong ví dụ sau, db và redis sẽ được khởi động trước web.
docker-compose up SERVICE
sẽ tự động bao gồm các phụ thuộc của DỊCH VỤ. Trong ví dụ sau, web soạn thảo docker cũng sẽ tạo và bắt đầu db và redis.
Ví dụ đơn giản:
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Lưu ý: Dep_on sẽ không đợi db và redis trở thành sẵn sàng trước khi bắt đầu web - chỉ cho đến khi chúng được khởi động. Nếu bạn cần đợi một dịch vụ sẵn sàng, hãy xem Kiểm soát thứ tự khởi động để biết thêm về vấn đề này và các chiến lược để giải quyết nó.
--link
lá cờ hiện nay là một tính năng di sản NỮA của Docker và tài liệu cho thấy "Nó cuối cùng có thể được gỡ bỏ" Docker: liên kết chứa Legacy . Bạn không nên sử dụng tính năng mạng Docker hoặc phương thức soạn thảo docker. Tôi cho rằng điều này sẽ hữu ích cho bất cứ ai ở đây tìm hiểu về tính năng này.