[docker] docker_compose.yml에서 링크와 depend_on의 차이점
Docker Compose의 작성 파일 문서 에 따르면 :
depends_on
-서비스 간의 의존성을 표현합니다.links
-다른 서비스의 컨테이너에 연결하고 depend_on 과 같은 방식으로 서비스 간의 종속성 을 표현 합니다.
다른 컨테이너에 연결하는 목적을 이해하지 못하므로 두 옵션의 차이점은 여전히 어려워 보입니다.
예가 있으면 훨씬 쉬울 것이지만 찾을 수는 없습니다.
컨테이너 B를 컨테이너 A와 연결하면 컨테이너 B가 컨테이너 A의 셸 내부에서 “핑 가능”하다는 것을 알았습니다.
ping B
컨테이너 A 내부에서 실행 bash
하여 다음과 같은 결과를 얻었습니다 (인터넷의 이미지 참조).
답변
links
옵션이 더 이상 사용되지 않으면 게시물을 업데이트해야합니다 .
기본적으로 links
환경 변수를 추가하여 다른 컨테이너가 컨테이너에 접근 할 수있게하는 기본 목적이에 포함되어 있기 때문에 더 이상 필요하지 않습니다 network
. 컨테이너가 동일한 네트워크에 배치되면 컨테이너 이름과 다른 별명을 호스트로 사용하여 서로 연결할 수 있습니다.
를 들어 docker run
, --link
도되지 않으며 사용자 정의 네트워크에 의해 교체해야합니다.
docker network create mynet
docker run -d --net mynet --name container1 my_image
docker run -it --net mynet --name container1 another_image
depends_on
시작 순서 (및 암시 적으로 이미지 당기기 순서)를 나타내며 이는 부작용입니다 links
.
답변
이 답변은 docker-compose 버전 2에 대한 것이며 버전 3 에서도 작동합니다.
depend_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
링크와 depend_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:
- db
depend_on :
Giorgio Ferraris Docker-compose.yml 에서 멋진 블로그를 찾았습니다 .V1에서 V2까지
docker-compose가 V2 파일을 실행하면 파일에 정의 된 모든 컨테이너간에 네트워크를 자동으로 구축하며 모든 컨테이너는 docker-compose.yml 파일에 정의 된 이름을 사용하여 다른 컨테이너를 즉시 참조 할 수 있습니다.
과
따라서 더 이상 링크가 필요하지 않습니다. 링크는 DB 컨테이너와 웹 서버 컨테이너 사이의 네트워크 통신을 시작하는 데 사용되었지만 이미 docker-compose에 의해 수행됩니다.
최신 정보
depend_on
서비스 간 특급 의존성 :
docker-compose up
종속성 순서대로 서비스를 시작합니다. 다음 예에서 db 및 redis는 웹보다 먼저 시작됩니다.docker-compose up SERVICE
SERVICE의 종속성이 자동으로 포함됩니다. 다음 예제에서 docker-compose up 웹은 db 및 redis를 생성하고 시작합니다.
간단한 예 :
version: '2'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
참고 : depend_on은 웹을 시작하기 전에 db 및 redis가 “준비”될 때까지 기다리지 않으며 시작될 때까지만 대기합니다. 서비스가 준비 될 때까지 기다려야하는 경우이 문제에 대한 자세한 내용 및 해결 전략은 시작 순서 제어를 참조하십시오.
답변
[2016 년 9 월 업데이트] :이 답변은 docker compose 파일 v1 (아래의 샘플 작성 파일에 표시)에 대한 것입니다. v2의 경우 @Windsooon의 다른 답변을 참조하십시오.
[원래 답변] :
문서에서 매우 분명합니다. depends_on
컨테이너 생성의 의존성과 순서를 결정하고 links
이것들뿐만 아니라
링크 된 서비스의 컨테이너는 별명과 동일한 호스트 이름 또는 별명이 지정되지 않은 경우 서비스 이름으로 도달 할 수 있습니다.
예를 들어 다음 docker-compose.yml
파일을 가정 합니다.
web:
image: example/my_web_app:latest
links:
- db
- cache
db:
image: postgres:latest
cache:
image: redis:latest
를 사용 하면 포트 5432가 이미지에 노출되어 있다고 가정 하고 links
내부 코드 web
가를 사용하여 데이터베이스에 액세스 할 수 있습니다 . 사용 된 경우 에는 불가능하지만 컨테이너의 시작 순서는 정확합니다.db:5432
db
depends_on