Docker Compose와 Kubernetes의 차이점은 무엇입니까?


328

Docker, Google Cloud 및 Kubernetes에 뛰어 들었을 때 아직 세 가지를 모두 이해하지 못하면이 제품이 겹치지 만 호환되지 않는 것 같습니다.

예를 들어 docker-compose.yml앱을 Kubernetes에 배포 할 수 있도록 파일을 다시 작성해야합니다.

누군가 Docker, Docker Compose, Docker Cloud 및 Kubernetes가 겹치는 위치와 서로 의존하는 위치에 대한 대략적인 수준의 설명을 제공 할 수 있습니까?

답변:


479

도커 :

  • Docker는 애플리케이션을 컨테이너화 할 수있는 컨테이너 기술입니다.
  • Docker는 다른 기술을 사용하는 핵심입니다.

도커 작성

  • Docker Compose를 사용하면 여러 Docker 컨테이너를 구성하고 시작할 수 있습니다.
  • Docker Compose는 여러 Docker 컨테이너를 시작하고을 사용하여 개별적으로 시작하지 않으려는 경우 주로 도우미로 사용 docker run ...됩니다.
  • Docker Compose는 동일한 호스트 에서 컨테이너를 시작하는 데 사용됩니다 .
  • Docker Compose는 단일 docker 컨테이너를 빌드하고 실행할 때 모든 선택적 매개 변수 대신 사용 됩니다 .

도커 스웜

  • Docker Swarm은 여러 호스트에서 컨테이너를 실행하고 연결하기위한 것 입니다.
  • Docker Swarm은 컨테이너 클러스터 관리 및 오케스트레이션 도구입니다.
  • 여러 호스트에서 실행되는 컨테이너를 관리하고 스케일링, 충돌시 새 컨테이너 시작, 컨테이너 네트워킹 ...
  • Docker Swarm은 프로덕션에서 Docker입니다. 그것은이다 기본 부두 노동자의 오케스트레이션 도구 도커 엔진에 포함된다.
  • stack 파일이라는 Docker Swarm 파일은 Docker Compose 파일과 매우 유사합니다.

쿠 버네 티스

  • Kubernetes는 Google에서 개발 한 컨테이너 오케스트레이션 도구 입니다.
  • Kubernetes의 목표는 Docker Swarm의 목표와 매우 유사합니다.

도커 클라우드

  • 클라우드 서버 또는 로컬 서버에서 컨테이너를 빌드하고 실행할 수 유료 엔터프라이즈 도커 서비스입니다.
  • 웹 UI와 컨테이너를 실행하고 관리하는 중앙 제어판을 제공하는 동시에 사용자 친화적 인 웹 인터페이스에서 모든 Docker 기능을 제공합니다.

최신 정보:

Docker 클라우드가 "부분적으로"중단되었습니다

애플리케이션, 노드 및 스웜 클러스터 관리를 제공하는 Docker Cloud의 서비스는 5 월 21 일에 종료됩니다. [2020] ... 자동화 된 빌드 및 레지스트리 스토리지 서비스는 영향을받지 않으며 계속 사용할 수 있습니다.


마지막으로 "Docker 클라우드를 사용하면 컨테이너를 실행할 수 있습니다."실제로 클라우드에서 이러한 컨테이너를 실행하여 무엇을 할 수 있습니까? 공개적으로 액세스되는 엔드 포인트를 제공 할 수 있습니까? 본질적으로 도커 클라우드는 AWS와 같지만 도커 컨테이너 용입니까? (또는 그것은 단지 발견을위한 컨테이너 라이브러리
일뿐입니다

2
알았어 미안해. 나는 아직도 혼란스러워 생각합니다. 따라서 도커 작성은 컨테이너를 로컬로 조정하는 데 사용되며 로컬 개발에 더 편리하거나 Kubernetes보다 훨씬 크다는 점에서 Kubernetes와 비슷합니까?
Vipin Menon

6
1. docker-compose <> minikube 2. docker-swarm <> kubernetes cluster 3. docker-cloud <> 관리 kubernetes 클러스터 (GCP, AWS 등)
Anoop

1
"Docker swarm은 여러 호스트에서 컨테이너를 실행하고 연결하기위한 것입니다." : "연결하는"이란 무엇입니까? 네트워크 연결?
someone_ smiley 2014

1
@someone_smiley 예. 오버레이 네트워크를
OneCricketeer

135

@ yamenk 's 외에도 답변 Kubernetes를 이해하는 여행에 도움이 될 수있는 몇 가지 세부 정보를 여기에 추가하고 싶습니다.

짧은 답변:

  • docker-compose:는 다중 컨테이너 애플리케이션 을 설명하는 YAML 파일을 사용 하는 도구로 , 각 컨테이너에 대해 여러 명령 을 입력하지 않고도 모든 컨테이너 를 작성 , 시작 / 중지 , 제거 할 수 있습니다 .docker ...
  • Kubernetes: 컨테이너화 된 워크로드 및 서비스 를 관리하기 위한 플랫폼 으로 선언적 구성 및 자동화를 모두 용이하게합니다. 계속 읽고 계십니까 ...

도커 작성

(문서에서) : Compose는 다중 컨테이너 Docker 응용 프로그램을 정의하고 실행하기위한 도구입니다. Compose에서는 YAML 파일을 사용하여 응용 프로그램 서비스를 구성합니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 작성하고 시작합니다.

작성에는 애플리케이션의 전체 수명주기를 관리하는 명령이 있습니다.

  • 서비스 시작, 중지 및 재 구축
  • 실행중인 서비스 상태보기
  • 실행중인 서비스의 로그 출력 스트리밍
  • 서비스에서 일회용 명령 실행

쿠 버네 티스

( 소개에서 Kubernetes까지 ) : Kubernetes는 Docker Swarm, Mesos Marathon, Amazon ECS, Hashicorp Nomad 와 같은 컨테이너 오케 스트레이터 입니다. 컨테이너 오케 스트레이터는 호스트를 그룹화하여 클러스터를 형성하고 응용 프로그램을 확인하는 데 도움이되는 도구입니다.

  • 내결함성,
  • 확장 할 수 있으며 주문형으로 수행 할 수 있습니다.
  • 자원을 최적으로 사용하다
  • 다른 응용 프로그램을 자동으로 검색하고 서로 통신 할 수 있습니다.
  • 외부 세계에서 접근 가능
  • 다운 타임없이 업데이트 / 롤백 할 수 있습니다.

많은 사람들은 Kubernetes가 배우기가 어렵다고 주장합니다. 일련의 문제를 해결하고 사람들이 모든 전제 조건을 몰라도 이해하려고하기 때문입니다. 이것은 복잡합니다. 다음과 같은 개념 / 용어를 읽으면서 퍼즐 조각을 모으십시오. 이 프로세스는 Kubernetes가 해결하려는 문제의 종류를 이해하는 데 도움이됩니다.

  • 12 단계 앱,
  • 자동 빈 포장,
  • 자가 치유 메커니즘
  • 수평 스케일링,
  • 서비스 검색 및로드 밸런싱
  • 자동 롤아웃 및 롤백
  • 청록색 배포 / 카나리아 배포
  • 비밀 및 구성 관리
  • 스토리지 오케스트레이션

컨테이너와 그 관리에는 많은 다른 것들이 있기 때문에 Cloud Native 환경을 주시하십시오.

대화식 버전 : landscape.cncf.io/

여기에 이미지 설명을 입력하십시오

업데이트

2020 년 5 월 : 개방형 표준의 Docker Compose Specification

오픈 소스 커뮤니티의 AWS, Microsoft 및 기타 기관과 협력하여 기존 Compose 플랫폼 외에도 Kubernetes 및 Amazon ECS와 같은 클라우드 네이티브 플랫폼을 지원하도록 Compose Specification을 확장했습니다. 여기 더 : blog / compose-spec.io


이 답변은 구식입니다. docker.com/blog/…
OneCricketeer

1
감사합니다 @ cricket_007 이것에 대해 계속 살펴볼 것이지만, 2018 년의이 블로그 게시물은 일종의 "마케팅"이라고 생각합니다. 2020 년이며 Docker ComposeCompose 파일 버전 3 참조 에서 문서를 확인하면 Kubernetes에 대한 것이 없습니다.
tgogos


1
모든 kubernetes 구문을 추상화하는 작성 레이어가 있다는 것이 놀랍습니다! 감사합니다 @ cricket_007.
조지 카타 노스

28

동일한 호스트를 가진 컨테이너를 네트워킹하는 경우 docker compose 로 이동하십시오 .

여러 호스트에서 컨테이너를 네트워킹하는 경우 kubernetes 로 이동 하십시오 .


2
그것이 내가 기대했던 대답의 유형입니다! 좀 더 설명이 필요하지만 "tl; dr"부분이 실제로 핵심입니다. 실제로 다른 답변은 없습니다!
대부

8

첫 번째 차이점은 컨테이너 엔진과 컨테이너 오케 스트레이터입니다.

docker 컨테이너 엔진이므로 개발 목적으로 PC에서 로컬로 최대 하나의 컨테이너를 빌드하고 실행할 수 있습니다.

docker-compose 여러 컨테이너를 실행하고 Docker 엔진 기능을 통해 볼륨과 네트워킹을 공유하고 로컬에서 실행되어 서비스 구성을 에뮬레이션하고 클러스터에서 원격으로 실행하는 Docker 유틸리티입니다.

Kubernetes는 컨테이너 오케스트레이션 플랫폼으로, 컨테이너를 실행하고 엔진 기능을 향상시켜 복잡한 애플리케이션 (사용자 또는 클라우드 공급자가 관리하는 PaaS의 종류)을 제공하도록 컨테이너를 구성하고 확장 할 수 있습니다. 주요 Kubernetes 기능은 컨테이너를 사용하여 인프라와 애플리케이션을 분리하는 것이며 Docker가 rkt 또는 cri-o로 컨테이너를 실행할 수있는 다른 엔진에도 개방되어 있습니다.

Docker 클라우드는 PaaS 오퍼입니다. docker 엔진 API를 .

이제 요구 사항, 인프라 제어 수준 및 대상 청중에 따라 베어 메탈의 Kubernetes 또는 Azure ACS 또는 Google GKE 등을 사용할 수 있습니다.

이것이 도움이 되었기를 바랍니다 :)


1
나는 약간 혼란스러워 왜 보통 도커에서 하나의 컨테이너 만 실행합니까? Docker-compose가 더 나은 솔루션이라고 생각하지만 여러 컨테이너가 없으면 여러 컨테이너를 시작할 수 있습니다.
피터

오 예, 때로는 백그라운드에서 mysql을 실행 한 다음 httpd 및 nginx를 독립 실행 형 컨테이너로 시작합니다 ...하지만 모든 것을 자동화하려는 경우 종속성, 네트워크 등을 지정하는 docker-compose.yml을 확실히 작성합니다. ..
Francesco Gualazzi

6

Docker Compose 는 프로덕션 준비 도구가 아닙니다. PoC 또는 개발 환경에서는 훌륭하지만 심각한 프로덕션 용도로 사용되는 테이블 스테이크에는 많은 기능이 없습니다. Swarm은 더 생산 준비가되어 있지만 Greenfield 시나리오에서는 Swarm에 투자하지 않습니다. Kubernetes는 Docker Desktop에 포함되어 있으며 모든 주요 클라우드 제공 업체가 제공하는 것으로 입증되어 오케스트레이션 전투에서 승리했습니다. Kubernetes는 훨씬 더 유능하며 더 많은 커뮤니티 및 기업 지원을 제공합니다.

Pluralsight, Linux Academy 등에서 사용할 수있는 Kubernetes 튜토리얼에 대해 알아보고 선택한 클라우드 플랫폼 (EKS, AKS, GKE 등)에서 사용할 클러스터를 회전시키는 것이 좋습니다. 베어 메탈에서 스핀 업을 시도하는 경우 OpenShift를 살펴보십시오. 그러나이 설정에서 Kubernetes의 마법을 잃어버린다는 것을 인식하십시오.


k8s에 "원"(현재)이 있다고 동의했습니다. 그러나 Mesos는 이전에는 생산 클러스터골드 표준 으로 불 렸습니다 . DC / OS는 엔터프라이즈 기능을 널리 퍼뜨 렸지만 이제는 Mesos 환경 내에서 여러 k8s 클러스터를 실행하고 단일 벤더에 독립적 인 플랫폼에서 액세스 할 수 있습니다.
OneCricketeer

3

도커 작성 :

A의 docker-compose.yml파일의 각 항목은 선택적으로 얻을 수있는 docker-compose이미지를 구축 할 수 있습니다. 각 항목은 구축하려는 단일 컨테이너를 나타낼 수 있으며 각 항목은 네트워킹 요구 사항 또는 포트를 정의합니다.

쿠 버네 티스 :

Kubernetes는 모든 이미지가 이미 빌드 될 것으로 예상하고 개체 당 하나의 구성 파일이 생성되도록하고 모든 네트워킹을 수동으로 설정해야합니다.

따라서 이미지가 Docker Hub에서 호스팅되도록하고 컨테이너를 만들기위한 구성 파일 하나와 네트워킹을 설정하기위한 구성 파일 하나를 만듭니다.


1

Docker-Compose는 볼륨, 네트워킹, 실행 명령 등과 같은 환경으로 하나 이상의 컨테이너를 사전 정의한 배치 파일입니다.

반면 Kubernetes는 도커 컨테이너 및 기타 마이크로 서비스를 오케스트레이션하고 여러 노드에서 확장 가능하고 신뢰할 수있는 시스템입니다.


1

도커 작성 : 도커 컨테이너는 yaml 파일의 도움없이 직접 실행할 수 있습니다. 그러나 Docker compose의 도움으로 도구 컨테이너 속성을 docker-compose.yml 파일이라는 파일 안에 정의 할 수 있습니다. 자세한 내용은 아래 샘플 yml 파일을 찾으십시오.

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

yml 파일을 통해 이미지 이름, 복제 횟수 등을 구성 할 수 있습니다.

Kubernetes : Google이 빌드 한 Docker에서 실행되는 컨테이너 관리 플랫폼입니다. Docker swam은 docker 자체로 빌드 된 또 다른 컨테이너 관리 플랫폼입니다. Kubernetes는 또한 docker compose와 같은 yaml 파일에 포드 (docker의 컨테이너에 해당)와 관련된 구성을 저장하는 기능을 제공합니다. 예 yaml 파일

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

여기에는 이미지, 열 포트 및 포트 대 호스트 포트 매핑 등도 제공됩니다. docker compose와 같이 kubectl apply -f는이 파일을 실행하는 명령입니다.


차이점은 무엇입니까? =)
대부

docker compose는 docker 이미지를 실행하는 콘솔이며 kubernetes는 컨테이너 오케스트레이션 시스템과 다릅니다. 이 두 가지를 비교할 수없고 완전히 다를 수 없습니다. 그러나 kubernetes는 kubectl을 가지고 있으며 콘솔이며 도커 작성과 유사합니다.
Nalin Kularathna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.