많은 블로그 게시물과 샘플에서 저는 단일 Couchbase Server 노드를 사용합니다. 쉽고 제가 시연하는 대부분의 작업을 단일 노드로 수행할 수 있기 때문입니다. 하지만 Couchbase Server는 일반적으로 프로덕션 환경에서 여러 노드(때로는 3개, 때로는 3000개)에서 실행됩니다. 이를 로컬에서 시뮬레이션하기 위해 몇 가지 경량 Docker 컨테이너를 사용할 수 있습니다.
이왕 하는 김에 Docker에서 실행되는 ASP.NET Core 웹사이트를 시작하는 방법도 보여드리겠습니다.
시작하기 위해 필요한 사항
- Windows용 도커. 모든 플랫폼에 Docker를 사용할 수 있지만 이 샘플에서는 Windows를 사용하고 있습니다.
- Visual Studio 2015(이상). ASP.NET Core 또는 Docker를 사용하기 위해 Visual Studio가 필요하지는 않지만, 저는 작업을 더 쉽게 하기 위해 Visual Studio 확장 프로그램을 사용하고 있습니다.
- NET Core VS 2015 툴링 미리보기 2 이상입니다. 이것은 Visual Studio용 .NET Core 도구입니다.
- Docker용 Visual Studio 도구 (미리 보기). 더 많은 VS 도구로 더 쉽게 작업할 수 있습니다.
위의 모든 것을 설치했으면 Docker에서 드라이브 공유를 사용 설정해야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다. "PrepareForLaunch" 작업이 예기치 않게 실패했습니다. 를 클릭합니다. (저는 C 드라이브와 D 드라이브 모두에서 공유를 사용하도록 설정해야 했지만 설정은 다를 수 있습니다).

Docker에서 Couchbase 서버 설정하기
먼저 Couchbase Docker 이미지를 실행합니다. ASP.NET Core 사이트는 Docker 내에서 실행되므로 포트 8091만 노출하면 됩니다(웹 브라우저에서 로컬 호스트:8091로 Couchbase 콘솔을 사용하려면).
도커 실행 -d --이름 db -p 8091:8091 카우치베이스
제가 이름을 지었습니다. db 하지만 원하는 이름을 지정해도 좋습니다. 저는 카우치베이스 를 이미지로 사용하며, 이 글을 작성하는 시점은 Couchbase Server 4.5.1입니다.
다음으로, Couchbase로 컨테이너를 하나 이상 더 실행하세요. 여기에는 포트를 매핑할 필요가 없습니다. 그냥 두 개만 생성하겠습니다:
도커 실행 -d --이름 DB2 카우치베이스
도커 실행 -d --이름 DB3 카우치베이스
다음을 사용하여 이 두 컨테이너의 IP 주소를 기록해 두세요. 도커 인스펙트 DB / 도커 인스펙트 DB2 / 등... 그리고 IP주소 를 출력에 입력합니다.
이제 웹 브라우저에서 localhost:8091 를 클릭하여 Couchbase 클러스터를 설정합니다. 이전에 이 작업을 수행한 적이 없는 경우 다음을 참조하세요. 카우치베이스 서버 설정에 대한 이 블로그 게시물 또는 카우치베이스 서버 설정 단계별 안내 동영상 보기.
버킷을 설정하고 만들 때(저는 'default'라는 이름의 버킷을 만들었습니다) 노드를 더 추가할 것이므로 복제를 활성화하세요.

서버 노드 탭으로 이동하여 "서버 추가"를 클릭합니다. db2의 IP 주소를 입력하고 "서버 추가"를 클릭합니다. db3 및 생성한 다른 노드에 대해 이 과정을 반복합니다. 이 시점에서 "보류 중인 재조정" 옆에 숫자가 표시되어야 합니다. 이는 노드가 클러스터의 일부가 될 준비가 되었음을 의미합니다.

'재조정'을 클릭합니다. 이 작업에는 약간의 시간이 걸리지만, 완료되면 Docker 내에서 모두 실행되는 Couchbase Server 클러스터를 갖게 됩니다. 재밸런싱 작업 중에도 클러스터는 계속 작동한다는 점에 유의하세요.

Couchbase 콘솔에 있는 동안 계속해서 기본 인덱스를 생성합니다. 실행 기본값에 기본 인덱스 만들기 을 클릭합니다. ASP.NET Core 앱에는 이 항목이 필요합니다.
ASP.NET Core 앱 만들기
Visual Studio에서 새 ASP.NET Core 앱을 만듭니다. 또는 이 예제를 위해 이미 준비한 ASP.NET Core 소스 코드는 GitHub에 있습니다.. 모든 선물을 나열하고 새로운 무작위 선물을 목록에 추가하는 두 가지 작업으로 구성된 매우 간단한 웹사이트입니다. (연말이 다가오니 선물이 생각나는군요!)

NuGet으로 CouchbaseNetClient 종속성을 추가합니다. 현재 개발자 프리뷰 버전인 .NET Core SDK를 사용할 것입니다. 따라서 다음 코드를 실행해야 합니다. 설치-패키지 카우치베이스넷클라이언트 -Pre 를 클릭합니다. 사용하지 않는 경우 -사전를 선택하면 NuGet이 .NET Core SDK 대신 .NET SDK를 설치하려고 시도합니다.
다음으로 프로젝트에 Docker 지원을 추가합니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭한 다음 추가를 클릭하고 "Docker 지원"을 클릭합니다. 그러면 프로젝트에 일부 Docker 파일이 추가됩니다. 이 옵션이 표시되지 않으면 다음을 설치해야 합니다. Docker용 Visual Studio 도구.

ASP.NET Core 앱에서 다음을 설정합니다. 클러스터 도우미 를 사용하여 db/db2/db3 컨테이너의 IP 주소 중 하나 이상을 사용하여 Couchbase 클러스터를 가리키도록 설정합니다.
|
1 2 3 |
var client = new ClientConfiguration(); client.Servers = new List {new Uri("couchbase://172.17.0.2")}; ClusterHelper.Initialize(client); |
특히 GitHub에서 전체 소스 코드를 확인하세요. HomeController.cs 그리고 Gift.cs. 다음은 색인 액션과 GetAllGifts 메서드를 호출합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public IActionResult Index() { var gifts = Gift.GetAllGifts(); return View(gifts); } public static List GetAllGifts() { var bucket = ClusterHelper.GetBucket("default"); var query = QueryRequest.Create("SELECT g.* FROM `default` g"); query.ScanConsistency(ScanConsistency.RequestPlus); return bucket.Query(query).Rows; } |
Docker 도구가 설치되었으므로 Docker용 배포 버튼이 새로 생겼습니다.

Docker에서 ASP.NET Core 앱을 실행하려면 이 버튼을 클릭합니다. 처음 실행할 때는 다운로드 중이므로 시간이 오래 걸릴 수 있습니다. aspnetcore 이미지에서 가져옵니다.
컨테이너가 배포되면 한 단계가 더 있습니다. 어떤 이유에서든 aspnetcore Docker 이미지는 '브리지' Docker 네트워크에 연결되지 않습니다. 따라서 ASP.NET Core 앱은 Couchbase 클러스터를 볼 수 없습니다. 'bridge'를 추가하려면 도커 네트워크 연결 브리지 도커넷코어_도커넷코어_1 (컨테이너 이름은 다를 수 있음). 이 작업을 수행하는 다른 방법이 있을 수 있습니다. 도커파일 또는 docker-compose.yml가 무엇인지 (아직) 모르겠습니다.
ASP.NET Core 앱을 다시 실행합니다(Docker 사용). 웹사이트가 브라우저에 표시되어야 합니다. 이 시점에서 Docker 호스트에서 4개의 컨테이너가 함께 실행되고 있습니다: ASP.NET Core를 실행하는 웹 서버와 3개의 Couchbase Server 노드.

요약
사이트가 실행 중이고 몇 가지 선물을 추가했으면 Couchbase 콘솔로 돌아가서 서버 노드 탭을 엽니다. "항목" 열을 살펴보고 활성/복제본 분할을 확인합니다. 선물을 추가할 때 문서가 노드 간에 자동으로 샤딩되고 복제본이 다른 노드에 저장되는 것을 확인할 수 있습니다.
재미로 시도해 볼 수 있는 다른 방법: 자동 장애 조치(설정 → 자동 장애 조치 → 사용)를 켠 다음 Couchbase 노드 중 하나를 종료합니다(도커 스톱 DB2 예를 들어). 그런 다음 노드가 다운되고 다른 노드가 보상 상태를 유지하는 것을 Couchbase 콘솔에서 지켜보세요. 마지막으로 노드를 다시 온라인 상태로 전환합니다(도커 시작 DB2)를 클릭하고 클러스터에서 노드를 다시 추가할 수 있는 몇 가지 옵션을 제공하는 것을 확인합니다.

저는 Docker와 ASP.NET Core를 모두 처음 사용하므로 팁이나 제안이 있으면 듣고 싶습니다. 댓글을 남기거나 트위터에서 @mgroves 찾기.