Docker는 점점 더 인기를 얻고 있으며 저도 프로젝트에 천천히 도입하고 있습니다. 컨테이너를 어디에 배포하든 동일한 환경이 제공되므로 애플리케이션을 쉽게 배포할 수 있습니다. 다양한 변형이 있는 Docker와 Node.js를 사용하여 이것이 어떻게 작동하는지 살펴보겠습니다. 일반적으로 다음과 같이 작동합니다. 에 관계없이 웹 애플리케이션 시나리오에서는 Node.js 런타임을 사용할 때 실제로 확신할 수 없습니다.

사용자 정의 NoSQL 컨테이너와 함께 배포하고, 노드 및 도커를 사용하는 사용자 정의 웹 애플리케이션 컨테이너와 함께 필요한 카우치베이스 함수.

Node.js란 무엇인가요?

튜토리얼을 시작하기 전에 잠시 정의에 대해 알아보겠습니다. Node.js. Node는 브라우저 내에서 실행되는 대신 서버 환경에서 JavaScript를 실행하기 위한 오픈 소스이자 완전한 크로스 플랫폼 런타임입니다. 개발자는 Node.js를 사용하여 사용자에게 보이지 않게 작동하지만 현대 기업에서 중요한 기능을 제공하는 완전한 클라우드 애플리케이션을 만들 수 있습니다. Couchbase는 Node.js로 빌드된 애플리케이션을 실행하도록 최적화되어 있습니다. 이 튜토리얼에서는 Node.js와 Docker 컨테이너를 페어링하여 이 기능을 활용하는 방법을 보여드립니다.

처음 노출되는 경우 Docker 컨테이너를 통해 달성하고자 하는 목표를 세분화해 보겠습니다. Couchbase는 공식 Docker 이미지를 게시했습니다. 도커 허브 를 제공하지만 이미지가 사전 프로비저닝되어 있지 않습니다. 이는 나쁜 것은 아니며 데이터베이스 컨테이너에서 기대할 수 있는 기능입니다. 즉, 공식 이미지를 기반으로 사용자 정의 이미지를 생성해야 하며, 그렇지 않으면 Couchbase를 배포할 때 설정이 되어 있지 않을 것입니다. 우리는 Node.js로 애플리케이션을 작성하고 "도커라이즈"합니다. 를 컨테이너 패키지에 추가합니다. 이 두 개의 Couchbase 및 Node.js Docker 컨테이너는 서로 통신할 수 있습니다.

사용자 정의 카우치베이스 서버 도커 이미지 및 컨테이너 만들기

컴퓨터 어딘가에 디렉터리를 만들고 다음 두 파일을 포함하세요:

샘플 도커 파일 - 도커파일 - 은 사용자 정의 이미지를 나타내고 configure.sh 파일은 컨테이너를 배포할 때 사용하는 런타임 스크립트입니다.

열기 도커파일 파일을 열고 다음을 포함하세요:

사용자 정의 이미지는 공식 Couchbase 이미지를 기본으로 사용합니다. 빌드 시 구성 스크립트가 이미지에 복사됩니다. 실행되면 스크립트가 실행됩니다. 그 스크립트를 살펴보겠습니다.

열기 configure.sh 파일을 열고 다음을 포함하세요:

다시 말하지만 configure.sh 스크립트는 서버가 시작된 후 프로비저닝하는 것입니다. 이를 위해 Couchbase RESTful API를 사용할 수 있습니다. 구성에는 클러스터 생성, Couchbase 서비스 활성화, 관리 자격 증명 정의, 버킷 생성, 버킷에 N1QL 인덱스 생성 등이 포함됩니다.

구성 스크립트에서 여러 환경 변수가 사용되는 것을 볼 수 있습니다. $COUCHBASE_ADMINISTER_USERNAME 변수를 설정합니다. 이렇게 하면 잠재적으로 민감한 정보를 이미지에 하드코딩하지 않아도 됩니다. 대신 배포 시 이러한 변수를 정의할 수 있습니다.

이제 프로젝트에 대한 사용자 정의 Couchbase 이미지를 빌드해 보겠습니다. Docker 셸에서 다음을 실행합니다:

위의 명령에서 카우치베이스 커스텀 텍스트는 이미지의 이름이고 경로는 이미지의 도커파일 그리고 configure.sh 파일.

카우치베이스용으로 생성한 사용자 정의 이미지를 사용하여 다음 명령을 실행합니다:

위의 명령은 컨테이너를 배포하여 필요한 각 Couchbase 포트를 매핑하고 싶다고 말합니다. 환경 변수를 전달합니다. configure.sh 스크립트를 사용하여 컨테이너를 실행할 네트워크를 정의합니다. 컨테이너의 이름은 카우치베이스를 입력하면 컨테이너의 호스트 이름이 됩니다.

Node.js RESTful API 웹 애플리케이션 만들기

Couchbase를 실행하면 간단한 Node.js 애플리케이션을 개발할 수 있습니다. 컴퓨터 어딘가에 프로젝트를 나타내는 디렉터리를 만듭니다. 그 프로젝트 안에 app.js 파일로 이동합니다. Docker 컨테이너에 NPM을 사용하여 비공개 패키지를 설치하겠습니다. 명령 프롬프트 또는 터미널에서 다음을 실행합니다:

위의 명령은 매우 기본적인 package.json 파일에 Node.js 애플리케이션의 기초가 되는 파일을 생성합니다. 설치해야 하는 몇 가지 종속성이 있으므로 다음을 실행하여 이를 구해 보겠습니다:

우리는 다음을 사용할 것입니다. express API를 구축하는 데 도움을 주셨습니다, 카우치베이스 를 SDK로 사용하세요, 본문 파서 를 사용하여 POST 본문으로 작업하고 uuid 를 사용하여 문서 키를 나타내는 고유 ID 값을 생성할 수 있습니다.

애플리케이션 기반이 마련되면 애플리케이션 개발을 시작할 수 있습니다. 프로젝트의 app.js 파일을 열고 다음 코드를 포함하세요:

그렇다면 위의 코드에서 무슨 일이 일어나고 있을까요?

먼저 다운로드한 모든 종속성을 가져온 다음 Couchbase에 연결을 설정합니다. 우리가 사용하고 있는 것을 알 수 있습니다. process.env 를 코드 전체에 배치합니다. 이를 통해 환경 변수를 읽을 수 있습니다. Couchbase 이미지에서 본 것과 비슷한 접근 방식을 사용할 것입니다.

API에는 실제로 어떤 작업을 수행하는 두 개의 엔드포인트가 있습니다. 하나는 /저장 엔드포인트는 요청 본문에 있는 모든 내용을 삽입하고 /get 엔드포인트는 Couchbase에 저장된 모든 것을 쿼리합니다.

Node.js 웹 애플리케이션 컨테이너화하기

애플리케이션이 빌드되었으면 Docker로 쉽게 배포할 수 있도록 애플리케이션을 컨테이너화해야 합니다. 애플리케이션의 package.json 파일에 다음 두 파일을 추가합니다:

계획은 공식 Node.js Docker 이미지를 기반으로 사용자 정의 이미지를 만드는 것입니다. 내 도커파일 파일에 다음을 포함합니다:

이미지 빌드 시간 동안 프로젝트를 이미지 파일시스템에 복사하고 작업 디렉터리를 변경합니다. 그런 다음 모든 종속성을 설치합니다. package.json 파일로 이동합니다. 컨테이너가 배포되면 app.js 파일이 실행됩니다.

이미지를 빌드할 때 왜 설치를 하는지 궁금하실 것입니다. 이는 OS 및 아키텍처 비호환성이 있을 수 있으므로 종속성을 이미지에 복사하고 싶지 않기 때문입니다. 종속성을 제외하려면 node_modules 디렉토리의 이미지에 다음을 포함시킵니다. .dockerignore file:

이미지에서 제외할 항목은 무엇이든 해당 파일에 넣을 수 있습니다.

이 이미지를 빌드하려면 Docker 셸에서 다음을 실행합니다:

Node.js 애플리케이션의 이미지 이름은 다음과 같이 호출됩니다. nodejs-custom 가 포함된 디렉터리를 기반으로 하며, 이 디렉터리는 도커파일 파일에 저장합니다. 사용자 지정 Docker 이미지 빌드에 대한 자세한 내용은 다음 문서에서 확인할 수 있습니다. 이전 기사 제가 쓴 글입니다.

이미지를 사용할 수 있으므로 이미지를 실행해야 합니다. Docker 셸에서 다음을 실행합니다:

위의 명령은 Couchbase 배포에서 본 것과 비슷하게 보일 것입니다. 애플리케이션의 포트 매핑을 정의하고, 애플리케이션에서 사용되는 환경 변수를 전달하고 있습니다. app.js 파일을 생성하여 컨테이너 네트워크와 이미지 이름을 정의합니다.

웹 브라우저로 이동하여 웹 애플리케이션의 엔드포인트로 이동하면 정상적으로 작동합니다.

Docker 컨테이너 배포를 위한 작성 파일 사용하기

컨테이너를 배포하기 위해 모든 환경 변수와 명령어의 모든 내용을 기억해야 하는 것은 번거로울 수 있습니다. Compose 파일을 생성하면 훨씬 더 간단해질 수 있습니다.

두 개의 사용자 정의 이미지를 만든 후 다음을 수행합니다. docker-compose.yml 파일을 컴퓨터 어딘가에 저장합니다. 이 파일에는 다음이 포함되어야 합니다:

작성 기능을 사용할 때는 파일의 모든 항목이 동일한 네트워크에 있으므로 네트워크 정의에 대해 걱정할 필요가 없습니다. 컨테이너 중 하나를 실행하려면 다음을 실행하면 됩니다:

Couchbase에서는 준비가 완료되면 알려주는 방법이 없기 때문에 모든 것을 함께 스핀업할 수 없습니다. 이 때문에 Couchbase가 연결을 수락할 준비가 되기 전에 Node.js 애플리케이션이 연결을 시도할 수 있습니다.

위의 명령은 일반적으로 Compose 파일의 모든 컨테이너를 스핀업하지만 이 시나리오에서는 사용할 수 없습니다.

결론

Couchbase 웹 애플리케이션과 함께 Node.js를 배포하는 방법이 궁금하다면 Docker가 쉬운 해결책입니다. Couchbase 또는 Node.js의 이미지를 빌드한 후에는 Docker 엔진을 실행하는 모든 서버나 컴퓨터에서 동일하게 작동할 수 있습니다.

Couchbase Node.js SDK 사용에 대한 자세한 내용은 다음을 확인하세요. 카우치베이스 개발자 포털.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 하나

  1. [...] 너무 오래 전에 웹 애플리케이션을 빠르고 안정적으로 배포하는 것이 얼마나 쉬운지 보여드리기 위해 Node.js RESTful API와 Couchbase Server를 컨테이너화하는 방법에 대한 글을 쓴 적이 있습니다. 그 [...] 글에서

  2. [...] Couchbase 컨테이너를 사용하는 컨테이너화된 Node.js 웹 애플리케이션을 배포하는 데 관심이 있다면 이전에 작성한 이 글, Couchbase 웹 애플리케이션을 Docker 컨테이너로 Node.js 배포하기에서 확인해 보세요. [...]

댓글 남기기