Разница между ссылками и зависит от в docker compose.в формате YML
согласно Docker Compose compose-file documentation:
depends_on- выраженная зависимость между службами.
links- ссылка на контейнеры в другой сервис, а также выраженная зависимость между службами точно так же, как depends_on.
Я не понимаю цели привязки к другим контейнерам, поэтому разница между двумя вариантами все еще кажется довольно сложной для меня.
было бы намного проще, если бы был пример, но я не могу его найти.
Я заметил, когда я ссылку на контейнер б в контейнер, то контейнер б будут "обмениваться информацией" внутри контейнера в оболочке.
Я побежал ping B внутри контейнера, а bash и получил такой результат (просто для справки, изображение из интернета)
2 ответов:
этот ответ для docker-compose вариант 2 и он также работает на вариант 3
вы все еще можете получить доступ к данным при использовании depends_on.
если вы посмотрите на docker docs Docker Compose и Django, вы все еще можете получить доступ к базе данных такой:
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в чем разница между links и depends_on?
ссылки:
при создании контейнер для базы данных, например:
docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql docker inspect d54cf8a0fb98 |grep HostPortи
"HostPort": "32777"Это означает, что вы можете подключить базу данных с вашего локального порта 32777 (3306 в контейнере), но этот порт будет меняться каждый раз при перезапуске или удалении контейнера. Так что вы можете использовать ссылки, чтобы убедиться, что вы всегда будете подключаться к базе данных и не должны знать, какой порт.
web: links: - dbdepends_on:
я нашел хороший блог Джорджио Феррарис Docker-compose.yml: от V1 до V2
когда docker-compose выполняет файлы V2, он автоматически создает сеть между всеми контейнерами, определенными в файле, и каждый контейнер сразу же сможет ссылаться на другие, просто используя имена, определенные в docker-compose.yml-файл.
и
так что нам больше не нужны ссылки; ссылки были использованы для запуска сетевой связи между нашим контейнером БД и нашим контейнером веб-сервера, но это уже сделано docker-compose
обновление
depends_on
выраженная зависимость между службами, которая имеет два эффекта:
- docker-compose up запустит службы в порядке зависимости. В следующем примере db и redis будут запущены до web.
- docker-compose up SERVICE автоматически включает сервис зависимости. В следующем примере docker-compose up web также создаст и запустит db и redis.
простой пример:
version: '2' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgresПримечание: depends_on не будет ждать, пока db и redis будут "готовы" перед запуском веб - только до тех пор, пока они не будут запущены. Если вам нужно дождаться готовности службы, см. раздел Управление порядком запуска для получения дополнительной информации об этой проблеме и стратегиях ее решения.
[Update Sep 2016]: этот ответ был предназначен для docker compose file v1 (как показано в Примере compose file ниже). Для v2 см. другой ответ от @Windsooon.
[оригинальный ответ]:
это довольно ясно в документации.
depends_onрешает, зависимость и порядок создания контейнера иlinksне только это, но иконтейнеры для связанной службы будут доступны по адресу имя хоста, идентичное псевдониму, или имя службы, если псевдоним не указан.
например, предполагая следующее
docker-compose.ymlfile:web: image: example/my_web_app:latest links: - db - cache db: image: postgres:latest cache: image: redis:latestС
links, код внутриwebбудет иметь доступ к базе данных с помощьюdb:5432, предполагая, что порт 5432 открыт вdbизображения. Еслиdepends_onбыли использованы, это было бы невозможно, но порядок запуска контейнеров будет правильным.

Comments