Docker 서비스, 스택 및 분산 애플리케이션 번들

docker-1.12

Docker 1.12의 첫 번째 릴리스 후보 를 통해 발표되었습니다. 2주 전. 몇 가지 새로운 기능은 다음과 같습니다.
이번 릴리스에서 계획된 것입니다.

이 블로그에서는 분산 애플리케이션 Docker Compose에서 번들을 생성하고 다음에서 Docker Stack으로 배포합니다. 도커 스웜 모드. 많은 분들께 감사드립니다. 프리즘 이러한 개념을 이해하는 데 도움을 주셨습니다.

먼저 기능을 살펴보겠습니다:

  • 기본 제공 오케스트레이션: 일반적인 애플리케이션은 Docker Compose 파일을 사용하여 정의됩니다. 이 정의는 여러 컨테이너로 구성되며 여러 호스트에 배포됩니다. 이렇게 하면 단일 장애 지점(SPOF)을 방지하고 애플리케이션을 안정적으로 유지할 수 있습니다.
    복원력. Docker Swarm, Kubernetes 및 Mesos와 같은 여러 오케스트레이션 프레임워크를 통해 이러한 애플리케이션을 오케스트레이션할 수 있습니다. 그러나 애플리케이션의 중요한 특성인 오케스트레이션을 위해 이제 Docker Engine에 오케스트레이션이 기본 제공됩니다.
    이 주제에 대한 자세한 내용은 추후 블로그에서 확인할 수 있습니다.
  • 서비스: 다음을 사용하여 복제, 분산 및 로드 밸런싱된 서비스를 쉽게 만들 수 있습니다. 도커 서비스 생성 명령을 실행합니다. 카우치베이스 컨테이너 3개 실행과 같은 애플리케이션의 '원하는 상태'가 제공되고
    자가 복구 Docker 엔진은 클러스터에서 많은 컨테이너가 실행되도록 보장합니다. 컨테이너가 다운되면 다른 컨테이너가 시작됩니다. 노드가 다운되면 해당 노드의 컨테이너는 다른 노드에서 시작됩니다. 이에 대한 자세한 내용은 나중에
    블로그.
  • 설정이 필요 없는 보안: Docker 1.12는 기본적으로 스웜에 참여하는 모든 노드의 통신에 인증, 권한 부여 및 암호화를 제공하는 상호 인증된 TLS와 함께 제공됩니다. 이에 대한 자세한 내용은
    나중에 블로그에서 확인할 수 있습니다.
  • 도커 스택 및 분산 애플리케이션 번들: 분산 애플리케이션 번들(DAB)은 여러 서비스에 배포할 수 있는 이미지 형식입니다. 자세한 내용은 자세히 읽어보세요.

지금까지는 도커파일 를 사용하여 이미지를 만들고 도커 빌드 명령을 사용합니다. 컨테이너는 다음을 사용하여 시작할 수 있습니다. 도커 실행 명령어를 사용하세요. 여러 개의 컨테이너를 쉽게 시작할 수 있습니다.
명령을 여러 번 실행하세요. 또는 Docker Compose 파일을 사용하여 컨테이너를 확장할 수도 있습니다. 도커-컴포즈 스케일 명령을 사용합니다.
docker-lifecycle

이미지는 단일 컨테이너의 이동 가능한 형식입니다. 분산 애플리케이션 번들또는 DAB는 Docker 1.12에 도입된 새로운 개념으로, 여러 컨테이너를 위한 이식 가능한 형식입니다. 각 번들은 다음과 같이 배포할 수 있습니다.
a 스택 런타임에.

docker-stack-lifecycle

DAB에 대해 자세히 알아보기 docker.com/dab. 간단히 설명하기 위해 비유를 들어보겠습니다:

도커파일 -> 이미지 -> 컨테이너

도커 컴포즈 -> 분산 애플리케이션 번들 -> 도커 스택

Docker Compose 파일을 사용하여 DAB를 생성하고, 이를 Docker Stack으로 배포해 보겠습니다.

이 기능은 1.12-RC2의 실험적 기능이라는 점에 유의하세요.

Docker Compose에서 분산 애플리케이션 번들 만들기

도커 컴포즈 CLI에 새로운 번들 명령어를 사용하세요. 자세한 내용은 여기에서 확인할 수 있습니다:

이제 Docker Compose 정의를 가져와서 DAB를 만들어 보겠습니다. 다음은 Docker Compose 정의입니다:

이 Compose 파일은 WildFly와 Couchbase 서버를 시작합니다. WildFly 서버에 미리 배포된 Java EE 애플리케이션이 Couchbase 서버에 연결되고 REST API를 사용하여 CRUD 작업을 수행할 수 있습니다. 이 파일의 소스는 다음 위치에 있습니다:
github.com/arun-gupta/oreilly-docker-book/blob/master/hello-javaee/docker-compose.yml. 이를 사용하여 애플리케이션 번들을 생성합니다:

depends_on 는 두 서비스 간에 종속성만 생성하고 특정 순서로 시작하도록 합니다. 이렇게 하면 Docker 컨테이너만 시작되지만 컨테이너 내의 애플리케이션은 시작하는 데 시간이 더 오래 걸릴 수 있습니다. 따라서 이 속성은
를 사용하면 문제가 부분적으로 해결됩니다. 컨테이너_이름 는 컨테이너에 특정 이름을 부여합니다. 특정 컨테이너 이름에 의존하는 것은 긴밀한 결합이며 컨테이너를 확장할 수 없습니다. 따라서 두 경고를 모두 무시할 수 있습니다,
를 사용하세요. 이 명령은 디렉토리 이름인 Compose 프로젝트 이름을 사용하여 파일을 생성합니다. 따라서 우리의 경우 hellojavaee.dsb 파일이 생성됩니다. 이 파일 확장자는 다음과 같이 이름이 변경되었습니다. .dab 를 생성합니다. 생성된
애플리케이션 번들의 모습입니다:

이 파일은 애플리케이션에 포함된 서비스에 대한 전체 설명을 제공합니다. 분산 애플리케이션 번들이 가장 적절한 이름인지 잘 모르겠습니다. #24250. It
에서 Rkt나 VM과 같은 다른 컨테이너 형식도 지원할 수 있다면 좋을 것 같습니다. 하지만 현재로서는 Docker만이 지원되는 유일한 형식입니다.

도커에서 스웜 모드 초기화하기

위에서 언급했듯이, 이제 "원하는 상태"는 Docker Swarm에 의해 유지됩니다. 그리고 이것은 이제 이미 Docker 엔진에 베이크되어 있습니다. 도커 스웜 개념도 발전했으며 다음에서 확인할 수 있습니다. 스웜 모드 주요 개념. A
이에 대한 자세한 내용은 추후 블로그에서 확인할 수 있습니다. 하지만 이 블로그에서는 새로운 명령어 도커 스웜 가 추가되었습니다:

도커 엔진에서 스웜 노드(관리자로)를 초기화합니다:

이 노드에 대한 자세한 내용은 다음을 사용하여 확인할 수 있습니다. 도커 노드 검사 자체 명령.

자세한 출력 내용은 장황하지만 관련 섹션은 다음과 같습니다:

출력은 노드가 매니저임을 보여줍니다. 단일 노드 클러스터의 경우 이 노드는 작업자 역할도 합니다.

클러스터에 대한 자세한 내용은 다음을 사용하여 얻을 수 있습니다. 도커 스웜 검사 명령을 사용합니다.

수락 정책 는 다른 worker 노드는 이 클러스터에 참여할 수 있지만 관리자의 명시적인 승인이 필요합니다.

도커 스택 배포

다음을 사용하여 스택을 만듭니다. 도커 배포 명령을 사용합니다:

명령 사용법은 다음에서 설명하는 것처럼 확실히 단순화할 수 있습니다. #24249. 서비스 목록을 참조하세요:

출력에는 두 개의 서비스, 즉 WildFly와 Couchbase가 실행되고 있음을 보여줍니다. 서비스 도 도커 1.12에 도입된 새로운 개념입니다. 이 개념은
"원하는 상태"를 설정하면 Docker 엔진이 이를 제공합니다. 도커 PS 는 실행 중인 컨테이너 목록을 표시합니다:

WildFly 컨테이너가 Couchbase 컨테이너가 실행되기 전에 시작됩니다. 즉, Java EE 애플리케이션이 Couchbase 서버에 연결을 시도하다가 실패합니다. 따라서 애플리케이션이 성공적으로 부팅되지 않습니다.

자가 치유 도커 서비스

Docker 서비스는 애플리케이션의 "원하는 상태"를 유지합니다. 이 경우 원하는 상태는 서비스에 대한 컨테이너가 하나만 실행되도록 하는 것입니다. 서비스가 아닌 컨테이너를 제거하면 서비스는 다음과 같이 됩니다.
컨테이너를 자동으로 다시 시작합니다. 컨테이너를 다음과 같이 제거합니다:

참고, 다음 사항을 제공해야 합니다. -f 컨테이너가 이미 실행 중이기 때문입니다. Docker 1.12의 자가 복구 메커니즘이 시작되어 컨테이너가 자동으로 다시 시작됩니다. 이제 컨테이너를 다시 나열하면

새 컨테이너가 시작되었음을 보여줍니다. WildFly 서비스를 검사합니다:

스웜은 서비스에 임의의 포트를 할당하거나 다음을 사용하여 수동으로 업데이트할 수 있습니다. 도커 서비스 업데이트 명령을 사용합니다. 이 경우 포트 8080 에 매핑된 컨테이너의 30004 포트에 연결합니다.

애플리케이션 확인

애플리케이션이 성공적으로 배포되었는지 확인합니다:

애플리케이션에 새 책을 추가합니다:

장부를 다시 확인합니다:

이 Java EE 애플리케이션에 대한 자세한 내용은 다음에서 확인하세요. github.com/arun-gupta/oreilly-docker-book/tree/master/hello-javaee.

이 블로그에서는 도커 컴포즈에서 분산 애플리케이션 번들을 생성하고 이를 도커 스웜 모드에서 도커 스택으로 배포하는 방법을 보여드렸습니다.

Docker 서비스 및 스택 참조

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Arun Gupta, 개발자 지원 부문 부사장, Couchbase

아룬 굽타는 Couchbase의 개발자 지원 담당 부사장입니다. 그는 Sun, Oracle, Red Hat에서 10년 이상 개발자 커뮤니티를 구축하고 이끌었습니다. 그는 콘텐츠, 마케팅 캠페인 및 프로그램의 전략, 계획 및 실행을 개발 및 실행하는 교차 기능 팀을 이끄는 데 있어 깊은 전문성을 보유하고 있습니다. 그 전에는 Sun에서 엔지니어링 팀을 이끌었으며 Java EE 팀의 창립 멤버입니다. Gupta는 기술에 관한 블로그 게시물을 2,000개 이상 작성했습니다. 40여 개국에서 수많은 주제에 대해 광범위한 강연 경험을 가지고 있으며, 3년 연속 JavaOne Rock Star로 선정되었습니다. 또한 미국에서 Devoxx4Kids 지부를 설립하여 어린이를 대상으로 한 기술 교육을 지속적으로 장려하고 있습니다. 기술에 관한 여러 권의 책을 저술했으며, 열렬한 마라토너이자 지구를 횡단하는 사람, Java 챔피언, JUG 리더, NetBeans 드림팀 멤버, Docker 캡틴이기도 한 그는 @arungupta에서 쉽게 만나볼 수 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.