Docker-Compose를 사용하는 경우 및 Docker-Swarm을 사용하는 경우


82

Docker-ComposeDocker-Swarm 의 차이점이나 유사점을 이해하려고합니다 .

문서를 읽음으로써 docker-compose가 단일 서비스로 서로 다른 컨테이너를 함께 바인딩하고 공동 작업하는 메커니즘을 제공한다는 것을 이해했습니다 ( 두 컨테이너를 연결하는 데 사용되는 --link 명령 과 동일한 기능을 사용하고 있다고 생각합니다 ).

또한 docker-swarm에 대한 나의 이해는 각기 일부 docker-images의 여러 컨테이너 인스턴스를 실행하는 서로 다른 docker-hosts 클러스터를 관리 할 수 ​​있다는 것 입니다. 떼의 서로 다른 컨테이너 사이의 오버레이 네트워크 로 연결을 정의 하여 (스웜의 두 도커 호스트를 가로 지르더라도)이를 하나의 단위로 연결할 수 있습니다.

내가 이해하려는 것은 docker-swarm이 docker-compose에 성공했으며 오버레이 네트워크는 컨테이너를 연결하는 새로운 (권장) 방법입니까?

또는 docker-compose는 여전히 전체 docker 제품군의 필수 부분이며 컨테이너를 연결하여 협업하는 데 사용하는 것이 예상되고 권장됩니다. 그렇다면 docker-compose는 떼의 여러 노드에서 컨테이너와 함께 작동합니까 ??

아니면 오버레이 네트워크가 떼의 다른 호스트에 걸쳐 컨테이너를 연결하기위한 것이고 docker-compose는 내부 링크를 생성하기위한 것입니까 ??

게다가 도커 문서에서 --links 는 더 이상 권장되지 않으며 곧 폐기 될 것이라고 언급되어 있습니다.

좀 혼란스러워 ???

고마워요!


9
귀하의 질문에 대한 답변이 없습니까? 그렇다면 확인란을 선택하여 대답 중 하나를 수락하십시오.
JoeG

답변:


102

몇 가지 정의부터 시작하는 것이 도움이 될 것입니다.

  • docker-compose : 관련 컨테이너 그룹을 구성하고 관리하는 데 사용되는 명령입니다. docker cli에서 사용하는 것과 동일한 API에 대한 프런트 엔드이므로 docker run.
  • docker-compose.yml : docker-compose 및 이제 swarm 모드에서 사용되는 컨테이너 그룹에 대한 정의 파일입니다.
  • swarm 모드 : Docker 엔진 그룹을 단일 엔티티로 관리하고 오케스트레이션을 제공하는 데 사용됩니다 (현재 상태와 대상 상태 간의 차이를 지속적으로 수정하려고 시도 함).
  • 서비스 : 스웜 내에서 동일한 이미지 및 구성에 대한 하나 이상의 컨테이너, 여러 컨테이너가 확장 성을 제공합니다.
  • stack : 스웜 내의 하나 이상의 서비스. DAB 또는 docker-compose.yml 파일을 사용하여 정의 할 수 있습니다.
  • 브리지 네트워크 : 여러 컨테이너가 서로 통신 할 수있는 단일 도커 엔진에 의해 관리되는 네트워크입니다. 엔진에 의해 관리되는 여러 네트워크가있을 수 있으며 컨테이너는 0 개 이상의 네트워크에 연결될 수 있습니다.
  • 오버레이 네트워크 : 브리지 네트워크와 유사하지만 여러 도커 엔진에 걸쳐 있습니다. 상태를 유지하려면 키 / 값 저장소가 필요합니다. Swarm 모드는이를 제공하지만 swarm 모드가 비활성화 된 경우 etcd, consul 또는 zookeeper를 사용할 수도 있습니다.
  • links : 브리지 된 네트워크보다 먼저 컨테이너를 연결하는 방법입니다. 더 이상 사용하지 않는 것이 좋습니다.
  • 클래식 스웜 : 컨테이너로 실행되는 통합 스웜 모드의 이전 버전으로 여러 엔진을 하나로 표시 할 수 있지만 오케스트레이션을 제공하지 않거나 자체 k / v 저장소를 포함하지 않습니다.

질문에 답하려면 :

docker-swarm이 docker-compose에 성공했으며 오버레이 네트워크는 컨테이너를 연결하는 새로운 (권장) 방법입니까?

또는 docker-compose는 여전히 전체 docker 제품군의 필수 부분이며 컨테이너를 연결하여 협업하는 데 사용하는 것이 예상되고 권장됩니다. 그렇다면 docker-compose는 떼의 여러 노드에서 컨테이너와 함께 작동합니까 ??

그들은 다른 기능을 제공하며 둘 다 계속해서 목적을 제공합니다. docker-compose는 swarm 모드 내에서 컨테이너를 시작할 수 없지만 docker-compose 자체를 사용하지 않고 swarm 모드에서 직접 스택을 정의하는 데 최신 버전의 docker-compose.yml 파일 (버전 3)을 사용할 수 있습니다. docker-compose는 스웜 모드 외부, 단일 도커 엔진 또는 클래식 스웜으로 컨테이너를 관리하는 데 필요합니다.

아니면 오버레이 네트워크가 떼의 다른 호스트에 걸쳐 컨테이너를 연결하기위한 것이고 docker-compose는 내부 링크를 생성하기위한 것입니까 ??

게다가 도커 문서에서 --links는 더 이상 권장되지 않으며 곧 폐기 될 것이라고 언급되어 있습니다.

yml 파일의 버전 2로 시작하는 docker-compose는 기본적으로 프로젝트 당 새로운 브리지 네트워크를 사용하여 여러 컨테이너를 연결합니다 (프로젝트의 기본값은 디렉토리 이름입니다). 클래식 스웜의 경우 기본적으로 외부 k / v 저장소를 사용하는 오버레이 네트워크로 설정됩니다. 그리고 스웜 모드 스택을 사용하면 오버레이 네트워크가됩니다.

Docker 네트워크를 사용하는 것이 컨테이너가 서로 통신하도록하는 데 선호되는 방법입니다. 나머지 Docker 환경에서 격리하려는 컨테이너 그룹당 네트워크가 필요합니다. docker-compose는이 네트워크 생성을 자동화하지만 명령 줄에서 docker networks create.

연결은 DNS 검색이 내장 된 도커 네트워크로 대체되었습니다. docker-compose.yml에서 링크를 제거 할 때 depends_on컨테이너 시작 순서를 적용하기 위해 해당 링크를 섹션으로 바꿔야 할 수 있습니다 . 그렇지 않으면 링크가 의미있는 시나리오가 거의 없으며 내가 본 모든 사용법은 오래된 문서를 따르는 사람의 것입니다.


3
이것은 도움이됩니다. 정의 해 주 DAB시겠습니까?
Matthew James Briggs

3
DAB는 결코 관심을 끌지 못한 실험적인 파일 형식이었습니다. 이제 기본적으로 v3 docker-compose.yml 파일입니다. docs.docker.com/compose/bundles/#bundle-file-format
BMitch

22

오버레이 네트워크 구성 또는 무리 또는 무리

랩톱에서 데모 이외의 작업을 수행하는 경우 위의 모든 것을 사용해야한다는 것을 알게 될 것입니다.

두 가지를 모두 사용할 필요가 없기 때문에 의도적으로 스웜 및 스웜 오버레이 네트워크를 분리했지만 그 아래에 스웜이 없으면 오버레이 네트워크를 얻을 수 없습니다.

Compose는 여러 컨테이너를 함께 가져 오기위한 것입니다. 이제 서로 관련되어 있지는 않지만 서로 관련되어 있다는 것이 이치에 맞습니다. 그러나 컨테이너가 서로 관련된 서비스를위한 일반적인 경우를 가정 해 보겠습니다. 그러면 컨테이너가 어떤 방식 으로든 서로 대화하되 네트워크를 사용하여 서로 대화하는 방법을 제어 할 수 있습니다. 예를 들어 웹 서버, appserver 및 db가있는 3 계층 앱을 사용합니다. 세 가지 구성 요소가 모두 고정되어 있고 compose를 사용하여 실행하는 대신 함께 가져오고 있다고 가정 해 보겠습니다.docker run..서로 다른 매개 변수 등으로 세 번. 세 가지 모두 표시되지만 서로 연결하는 방법을 제어하고 싶을 것입니다. 웹 서버가 appserver와 통신 할 수 있지만 db와는 직접 통신하지 않기를 원합니다. 그리고 appserver가 db 서버 컨테이너와 통신 (ping)하고 웹 서버에도 ping을 수행하기를 원할 것입니다. 모든 연결은 양방향이지만 서로 통신 할 수있는 서비스로만 제한됩니다. 이러한 배열의 경우 일반적으로 frontendbackend. 웹 및 앱 컨테이너는 프런트 엔드 네트워크에 연결됩니다. 앱 및 db 컨테이너는 백엔드 네트워크에 연결됩니다. db와 웹 컨테이너 사이에는 공통 네트워크가 없기 때문에 서로 접촉 (ping) 할 수 없습니다.

이제이 3 가지 서비스가 100 대의 머신 클러스터에서 실행될 수 있도록하고 이들을 통해 확장하려면 여러 호스트에 걸쳐있는 네트워크가 필요합니다. 이것이 바로 오버레이 네트워킹 (군집)이 등장하는 곳입니다. 오버레이 네트워킹은 VxLAN 기술을 기반으로 구축 된 멀티 호스트 네트워킹에 불과합니다. 거의 모든 최신 네트워킹 인프라에서 지원되는 표준 네트워크 토폴로지라는 점을 제외하고는 VxLAN에 대해 알 필요가 없습니다.

나는 그것이 명확하기를 바랍니다.

편집 : 나는 당신이 이미 대답을 얻지 못했다는 것을 보지 못했습니다!


1
@Anoop 감사합니다. 따라서 compose와 swarm 모두 .yaml 기반 서비스 설명을 사용하여 서비스를 시작하고 둘 다 이러한 서비스를 연결하기 위해 만든 사용자 정의 네트워크를 사용 한다고 말하면 옳다고 생각합니다 . 유일한 차이점은 compose는 단일 docker-host에서 실행되는 컨테이너 세트 용이고 swarm은 다중 호스트 플랫폼 용이라는 것입니다.
Shabirmean

예,하지만 혼합하여 일치시킬 수 있습니다. 즉, 단일 도커 호스트 대신 동일한 compose 파일을 사용하여 떼 클러스터를 대상으로 지정할 수 있습니다. 그런 식으로 매우 유연합니다.
Anoop

8

나는 당신이 각각에 대해 정확한 이해를 가지고 있다고 생각하지만 약간의 조정이 필요합니다.

당신은 올바른 docker-compose는 다중 컨테이너 응용 프로그램을 불러오는 것입니다. 이전에는 docker run ..모든 컨테이너를 시작 하는 데 사용했습니다 . 일반적으로 마이크로 서비스 패러다임을 수용하는 최신 애플리케이션은 수십 개의 서비스로 구성 될 수 있으며 사용 docker run ..은 곧 매우 지루해질 것입니다. 따라서 docker-compose를 사용하면 모든 컨테이너와 해당 속성을 표현하고 서로 연결하는 방법을 yaml또는 json파일로 표현할 수 있으므로 쉽게 관리 할 수 ​​있습니다.

따라서 docker-compose는 docker 생태계의 컨테이너 오케스트레이션 부분입니다.

링크 그들은 단지 고정 표시기-작성하거나의 일부, 다른 docker run명령과 찬성되지 않습니다 software defined networks그 중 overlay networks입니다 그들 중 하나.

Swarm은 Docker의 일정 구성 요소입니다. 스케줄링이란 무엇입니까-Docker 호스트 클러스터에서 컨테이너를 "배치"할 위치를 파악하는 것입니다. 수백 대의 서버 클러스터를 가질 수 있고, 컨테이너가 수백 개일 수 있으며, 각 컨테이너는 12 개의 서로 다른 애플리케이션에 대한 서비스를 캡슐화합니다. 이제 이러한 컨테이너가 수백 대의 서버 클러스터에 어떻게 분산되어야하는지, 일부 컨테이너는 특정 기준을 충족하기 때문에 특정 호스트에만 배치해야하거나, 어떤 식 으로든 관련이있는 다른 컨테이너에 더 가까워 야하거나 그렇지 않아야합니다. 이 모든 것은 docker Swarm이 수행하는 스케줄링 구성 요소의 일부입니다.

docker.com의 시작 설명서를 https://docs.docker.com/engine/getstarted-voting-app/ 에서 살펴볼 것을 제안합니다.


대단히 감사합니다. 나는 그 튜토리얼을 끝냈다. - 나는 연결 밀접하게 관련되어 컨테이너에 사용 될 필요가 무엇으로 고정 표시기 개발자 자체로 특정 권장 사항이 있는지 여부를 파악하기 위해 노력하고있어 작성 또는 떼 오버레이 네트워크 . 내가 가진 딜레마는 네트워크 를 통해 컨테이너를 연결하는 아이디어가 compose와 같은 것으로 연결하는 것과 같지 않다는 것입니다 (또는 동일합니까 ???). 컨테이너 바인딩과 같은 구성이 오버레이 네트워크 스타일 연결보다 더 안전합니까?
Shabirmean 2017 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.