programing

docker_compose.yml의 링크와 dependent_on 간의 차이

yellowcard 2023. 8. 13. 09:39
반응형

docker_compose.yml의 링크와 dependent_on 간의 차이

도커 컴포지트의 컴포지트 파일 문서에 따르면:

  • depends_on서비스 간의 종속성을 나타냅니다.
  • links다른 서비스의 컨테이너에 연결하고 dependent_on과 동일한 방식으로 서비스 간의 종속성을 표현합니다.

나는 다른 컨테이너와 링크하는 목적을 이해하지 못해서 두 가지 옵션의 차이가 여전히 나에게는 꽤 어려운 것 같습니다.

예시가 있다면 훨씬 쉬울 텐데, 찾을 수가 없어요.

저는 B 컨테이너를 A 컨테이너와 연결하면 B 컨테이너가 A 컨테이너의 셸 내부에서 "핑 가능"하게 된다는 것을 알게 되었습니다.

도망친ping BA 용기 bash그리고 다음과 같은 결과를 얻었습니다(참고로, 인터넷 이미지).

enter image description here

게시물은 다음 이후 업데이트가 필요합니다.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 순서 순서를 표현하는데, ▁effect▁side▁of),▁good▁expresses▁pulling▁order를▁a▁start▁(▁was▁order그다▁which시작and니(ly습부의 좋은 부작용이었습니다.links.

이 답변은 도커 합성 버전 2를 위한 것이며 버전 3에서도 작동합니다.

depends_on을 사용해도 데이터에 액세스할 수 있습니다.

도커 문서 도커 컴포지트장고를 보면 여전히 다음과 같이 데이터베이스에 액세스할 수 있습니다.

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

링크와 의존_의 차이점은 무엇입니까?

링크:

데이터베이스에 대한 컨테이너를 작성할 때 예를 들어 다음과 같습니다.

docker run -d --name=test-mysql --env="MYSQL_ROOT_PASSWORD=mypassword" -P mysql

docker inspect d54cf8a0fb98 |grep HostPort

그리고 당신은 찾을지도 모릅니다.

"HostPort": "32777"

즉, 로컬 호스트 포트 327777(컨테이너 내 3306)에서 데이터베이스를 연결할 수 있지만 이 포트는 컨테이너를 다시 시작하거나 제거할 때마다 변경됩니다.따라서 링크를 사용하여 데이터베이스에 항상 연결하고 데이터베이스가 어떤 포트인지 알 필요가 없는지 확인할 수 있습니다.

web:
  links:
   - db

의존_:

Giorgio Feraris Docker-compose.yml: V1부터 V2까지 멋진 블로그를 찾았습니다.

Docker-compose가 V2 파일을 실행하면 파일에 정의된 모든 컨테이너 간에 네트워크가 자동으로 구축되며, 모든 컨테이너는 Docker-compose.yml 파일에 정의된 이름만 사용하여 다른 컨테이너를 즉시 참조할 수 있습니다.

그리고.

따라서 링크는 더 이상 필요하지 않습니다. 링크는 DB 컨테이너와 웹 서버 컨테이너 간의 네트워크 통신을 시작하는 데 사용되었지만, 이는 이미 도커 합성에 의해 수행되었습니다.

갱신하다

에 의존하는

서비스 간의 종속성을 표현합니다. 두 가지 효과가 있습니다.

  • docker-compose up서비스를 종속성 순서로 시작합니다.다음 예제에서는 db 및 redis가 웹보다 먼저 시작됩니다.
  • docker-compose up SERVICESERVICE의 종속성이 자동으로 포함됩니다.다음 예제에서는 도커 합성 웹도 db 및 redis를 만들고 시작합니다.

간단한 예:

version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

참고: depends_on은 웹을 시작하기 전에 db 및 redis가 "ready"될 때까지 기다리지 않습니다.서비스가 준비될 때까지 기다려야 하는 경우 이 문제와 해결 방법에 대한 자세한 내용은 시작 순서 제어를 참조하십시오.

[2016년 9월 업데이트]:이 답변은 아래 샘플 작성 파일에 표시된 것처럼 도커 작성 파일 v1을 대상으로 했습니다.v2의 경우 @Windsoon의 다른 답변을 참조하십시오.

[원문답]:

그것은 문서에서 꽤 명확합니다.depends_on 의존성과 컨테이너 생성 순서를 결정하고 이것들뿐만 아니라

연결된 서비스의 컨테이너는 별칭과 동일한 호스트 이름으로 연결하거나 별칭이 지정되지 않은 경우 서비스 이름으로 연결할 수 있습니다.

를 들어,과 같이 하면, 다 과 같 가 합 니 정 다 이 들 어 음 예docker-compose.yml파일 이름:

web:
  image: example/my_web_app:latest
  links:
    - db
    - cache

db:
  image: postgres:latest

cache:
  image: redis:latest

와 함께links 내부의 web는 를사하여데액수있할습다니세스에를 수 있습니다.db:5432포트 트포어가있정다니합다고에 합니다.db이미지. 만약에depends_on사용되었지만, 이것은 불가능하지만, 컨테이너의 시작 순서는 정확합니다.

에 대한 0에 을 기반으로 생각합니다. v1.27.0의 긴 할 수 있게 . 이제는 다음과 같은 긴 형식을 허용합니다.depends_on:

https://github.com/compose-spec/compose-spec/blob/master/spec.md#long-syntax-1

이 긴 형식으로 서비스가 시작되거나 정상 상태이거나 완료될 때까지 기다리도록 지정할 수 있습니다.

도커 컴포지트는 당신이 생산한다면 서비스가 정상이라는 것을 알고 있습니다.health_check해당 서비스에서:

https://github.com/compose-spec/compose-spec/blob/master/spec.md#healthcheck

자세한 내용은 설명서의 예제를 참조하십시오. 위의 링크를 참조하십시오!

다음은 통합 테스트를 위해 작성 파일에서 사용한 내용입니다.

services:
  cloud-broker:
    image: my.docker.registry/activemq-artemis:latest
    healthcheck:
      test: ["CMD-SHELL", "wget http://localhost:8161/ --delete-after --tries=3 2> /dev/null"]
      interval: 10s
      timeout: 5s
      retries: 5

  postgresql:
    image: postgres
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      POSTGRES_PASSWORD: "<my-secret>"
      POSTGRES_USER: "postgres"
      POSTGRES_DB: "postgres"
  
  # This service calls a script to create an empty database and the service-user
  postgresql-setup:
    image: postgres
    depends_on:
      postgresql:
        condition: service_healthy
    restart: "no"
    volumes:
      - "./scripts:/scripts"
    environment:
      PGPASSWORD: "<my-secret>"
    entrypoint: "psql -U postgres -d postgres -h postgresql -f /scripts/create-db.sql"

  my-business-service:
    image: my.docker.registry/my-business-service:latest
    depends_on:
      cloud-broker:
        condition: service_healthy
      postgresql-setup:
        condition: service_completed_successfully

언급URL : https://stackoverflow.com/questions/35832095/difference-between-links-and-depends-on-in-docker-compose-yml

반응형