마이크로서비스에 대한 많은 자료가 있습니다. 구글 잇! 몇 년 전 Devoxx 벨기에에서 모놀리스를 마이크로서비스로 리팩토링하는 것에 대한 프레젠테이션을 했는데, 좋은 평가를 받았습니다:

이 블로그에서는 Docker가 마이크로서비스의 생성 및 종료를 간소화하는 방법을 보여드립니다. 이 블로그에서 사용된 모든 코드는 github.com/arun-gupta/couchbase-javaee.

Compose를 사용한 마이크로서비스 정의

도커 1.13은 도커 컴포즈 v3. 구문의 변경 사항은 미미하지만 주요 차이점은 다음을 추가한 것입니다. 배포 어트리뷰트. 이 속성을 사용하면 컨테이너에 대한 복제본, 롤링 업데이트 및 재시작 정책을 지정할 수 있습니다. 마이크로서비스는 Java EE 애플리케이션이 사전 배포된 WldFly 애플리케이션 서버를 시작합니다. 이 애플리케이션은 Couchbase 데이터베이스와 통신하여 애플리케이션 데이터를 CRUD합니다. 다음은 Compose 정의입니다:

이 작성 파일에서:

  1. 이 컴포즈의 두 서비스는 다음과 같은 이름으로 정의됩니다. db 그리고 속성
  2. 다음을 사용하여 정의된 각 서비스의 이미지 이름 이미지 속성
  3. 그리고 아룽업타/카우치베이스:여행 이미지가 카우치베이스 서버를 시작하고 다음을 사용하여 구성합니다. Couchbase REST API및 로드 여행 샘플 버킷에 최대 32,000개의 JSON 문서가 있습니다.
  4. 그리고 아룽업타/카우치베이스-자바예:여행 이미지가 WildFly를 시작하고 다음에서 빌드한 애플리케이션 WAR 파일을 배포합니다. https://github.com/arun-gupta/couchbase-javaee. 자신만의 이미지를 만들려면 해당 프로젝트를 복제하세요.
  5. 환경 속성은 WildFly에 배포된 애플리케이션에서 액세스할 수 있는 환경 변수를 정의합니다. COUCHBASE_URI 는 데이터베이스 서비스를 나타냅니다. 이는 애플리케이션 코드에서 다음과 같이 사용됩니다. https://github.com/arun-gupta/couchbase-javaee/blob/master/src/main/java/org/couchbase/sample/javaee/Database.java.
  6. 포트 포워딩은 다음을 사용하여 수행됩니다. 포트 속성
  7. depends_on 속성을 사용하면 컨테이너 시작 순서를 보장할 수 있습니다. 그러나 애플리케이션 수준 시작은 컨테이너 내부에서 실행되는 애플리케이션이 보장해야 합니다. 저희의 경우, WildFly는 다소 빠르게 시작되지만 데이터베이스가 시작되는 데는 몇 초가 걸립니다. 이는 WildFly에 배포된 Java EE 애플리케이션이 데이터베이스와 통신할 수 없음을 의미합니다. 따라서 마이크로 서비스 애플리케이션을 구축할 때는 시작 순서를 가정하지 않고 방어적으로 코딩하고 애플리케이션 초기화에서 의존하는 마이크로 서비스가 시작되었는지 확인해야 한다는 모범 사례를 설명합니다. 이는 다음 데이터베이스 초기화 코드에 나와 있습니다. https://github.com/arun-gupta/couchbase-javaee/blob/master/src/main/java/org/couchbase/sample/javaee/Database.java. 다음 검사를 수행합니다:

    1. 버킷이 있음
    2. 카우치베이스의 쿼리 서비스가 실행 중입니다.
    3. 샘플 버킷이 완전히 로드되었습니다.

이 애플리케이션은 다음을 사용하여 시작할 수 있습니다. 도커-컴포지트 업 -d 명령을 실행할 수 있습니다. 또는 스웜 모드의 Docker 엔진 클러스터를 사용하여 도커 스택 배포 명령을 사용합니다.

도커 스웜 모드 설정

다음 명령을 사용하여 스웜 모드를 초기화합니다:

스웜 매니저가 시작됩니다. 기본적으로 매니저 노드는 워커이기도 하지만 매니저 전용으로 구성할 수 있습니다.
다음 명령을 사용하여 이 원노드 클러스터에 대한 몇 가지 정보를 찾습니다. 도커 정보 명령을 사용합니다:

이 클러스터에는 1개의 노드가 있으며 이 노드가 바로 매니저입니다. 또는 다음을 사용하여 멀티 호스트 클러스터를 쉽게 설정할 수 있습니다. AWS용 Docker.

마이크로서비스 배포

마이크로서비스는 다음 이름으로 시작할 수 있습니다:

출력 결과가 표시됩니다:

이 노드에서 WildFly 및 Couchbase 서비스가 시작됩니다. 각 서비스에는 단일 컨테이너가 있습니다. 여러 노드에서 스웜 모드가 활성화된 경우 컨테이너가 여러 노드에 분산됩니다.
새 오버레이 네트워크가 생성됩니다. 이를 통해 서로 다른 호스트에 있는 여러 컨테이너가 서로 통신할 수 있습니다.

다음을 사용하여 WildFly 및 Couchbase 서비스가 실행되고 있는지 확인합니다. 도커 서비스 ls:

서비스 로그는 다음을 사용하여 확인할 수 있습니다. 도커 서비스 로그 -f webapp_web:

마지막 로그 문이 표시될 때까지 기다리세요.

마이크로서비스 액세스

마이크로 서비스에서 10개의 항공사를 가져옵니다:

결과는 다음과 같이 표시됩니다:

Java 개발자를 위한 도커 워크샵 는 자기 주도형 실습 실습으로, Docker를 쉽게 시작할 수 있도록 도와줍니다. 단일 리소스 받기:

새 리소스를 만듭니다:

리소스를 업데이트합니다:

리소스를 삭제합니다:

이러한 각 명령의 자세한 출력은 다음 링크에서 확인할 수 있습니다. github.com/arun-gupta/couchbase-javaee.

마이크로서비스 삭제

마이크로서비스는 다음 명령을 사용하여 제거할 수 있습니다. 도커 스택 RM 웹앱:

Couchbase를 시작하고 싶으신가요? 다음을 살펴보세요. 카우치베이스 스타터 키트. 컨테이너에서 Couchbase를 실행하는 방법에 대해 자세히 알아보고 싶으신가요?

작성자

게시자 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에서 쉽게 만나볼 수 있습니다.

댓글 남기기