저는 팀과 함께 다양한 마이크로서비스를 만드는 프로젝트를 진행하고 있습니다. 이러한 마이크로서비스는
카우치베이스 서버 버킷에 우리가 선택한 간격의 데이터를 저장하고 AWS EC2 서버를 통해 작동합니다. 문제는 모든 사람이
우리 팀에는 선호하는 프로그래밍 언어가 있습니다. 이 서버에 모든 서버 측 언어를 설치하면 다음과 같이 될 것입니다.
비용이 많이 듭니다. 대신 각 마이크로서비스에 Docker 컨테이너를 사용하기로 결정했습니다. 간격을 두고 실행하기 때문에 다음과 같이 할 수 있습니다.
실행할 때마다 컨테이너를 제거하여 코어 서버를 가볍고 소프트웨어로 깔끔하게 유지합니다.

이 솔루션을 구현하기 위해 저희가 해온 몇 가지 작업을 살펴보겠습니다.

EC2 인스턴스에서 Docker 구성하기

현재 Ubuntu의 장기 지원 릴리스이기 때문에 Amazon EC2 호스트가 Ubuntu 14.04라고 가정해 보겠습니다. 로그인
를 실행하고 sudo 사용자로 다음을 실행합니다:

위의 방법은 Mac이나 Windows 환경에서와 같이 가상 머신이 아닌 호스트에 Docker를 설치하는 것입니다.

이 시점에서는 Docker를 사용할 수 있습니다. 저희의 의도는 빌드 스크립트를 사용하는 것이지만 수동으로도 사용할 수 있습니다. 다음과 같은 경우
EC2 인스턴스에 아직 Couchbase를 설치하지 않은 경우에도 설치할 수 있습니다. 최신 Debian 파일을 다운로드하세요.
카우치베이스 다운로드 섹션으로 이동하여 다음을 실행합니다:

또는 이미 카우치베이스 서버를 실행 중인 Amazon EC2 인스턴스를 스핀업하도록 선택할 수도 있습니다. 이에 대한 자세한 정보
주제를 찾을 수 있습니다. 여기.

빌드 스크립트 디자인

그리고 도커파일 는 Docker 이미지를 생성하기 위한 빌드 스크립트입니다. 이 스크립트에서는 사용할 운영 체제를 정의하고, 어떤 운영 체제가
다운로드할 패키지와 어떤 파일이 포함될지 결정합니다.

저는 Node.js를 더 좋아하기 때문에 이 프로젝트의 마이크로서비스는 Node.js입니다. 이 문서에서는 Java와 Python을 사용했지만 다른 일부 마이크로서비스는
는 특정 언어에 국한되지 않습니다. 제 마이크로서비스 중 하나의 빌드 파일은 다음과 같습니다:

위의 파일을 세분화하기 위해 모든 부분을 살펴보겠습니다.

먼저 이 이미지가 Ubuntu 14.04이며 비대화형임을 확인합니다. 이 이미지가 기본 이미지가 될 것이므로 시작하기 전에
종속성을 설치해야 하는 Node.js 프로젝트를 실행합니다. 운영 체제 리포지토리 목록을 업데이트하고 다음을 설치합니다. curl 왜냐하면
우분투는 기본적으로 제공되지 않으며 Node.js 리포지토리를 설치하려면 우분투가 필요합니다. 일단 curl 가 설치되어 있습니다.
Node.js 4.x 리포지토리를 추가하고 소프트웨어를 설치할 수 있습니다.

여기서부터 제 프로젝트에 대해 좀 더 구체적으로 설명하겠습니다. 제 프로젝트에는 다음과 같은 파일과 디렉터리가 있습니다:

  • models/
  • 경로/
  • package.json
  • app.js
  • config.json
  • mock_data.xml

그리고 도커파일 이 프로젝트 구조의 루트 내에 시트를 생성하고 있습니다.

이제 해야 할 일은 모든 것을 이미지에 복사하는 것입니다. 이 작업은 COPY 명령을 실행합니다. 한 번
모든 것이 복사되면 노드 패키지 관리자(NPM)에 모든 종속성을 설치하도록 지시할 수 있습니다.
package.json 파일을 만듭니다.

그리고 CMD 줄은 빌드된 이미지를 배포할 때 실행됩니다.

컨테이너 빌드 및 실행

현재로서는 도커파일 은 스크립트 또는 애플리케이션 파일과 같은 디렉터리에 있어야 합니다. 하지만
중요하지 않은, 내 애플리케이션 파일은 자동으로 실행되는 Node.js 프로젝트입니다.

컨테이너를 실행하기 전에 먼저 컨테이너의 청사진을 기반으로 컨테이너를 생성해야 합니다. 도커파일. 다음을 실행합니다.
도커 명령줄 인터페이스를 통해

위는 스크립트의 각 단계를 거쳐 이미지에 이름을 태그합니다. my_project. 일단 구축되면 언제든지
Docker 명령줄 도구에서 다음을 실행하여 이미지를 실행할 수 있습니다:

하지만 잠깐만요. 왜 우리가 --add-host="localhost:10.0.2.2"? 이 특정 예에서는 다음과 같은 가정을 가정합니다.
로컬 머신에서 다음과 같은 정보로 Couchbase를 실행 중입니다. localhost:8091. Node.js 애플리케이션에서 다음을 수행해 보겠습니다.
를 통해 카우치베이스 서버에 연결을 시도한다고 가정해 보겠습니다. http://localhost:8091. 기본적으로 도커는
를 다른 서브넷에 연결하면 불가능합니다. 로컬호스트는 여러분이 생각하는 것과는 다릅니다. 그래서 저희는 호스트에
매핑.

특정 시나리오에서는 다음과 같은 작업을 수행할 수도 있습니다. --net=host 대신 --add-host="localhost:10.0.2.2".
자세한 정보는 다음에서 확인할 수 있습니다.
공식 도커 문서.

전체 Node.js 프로젝트를 복사하고 다음을 추가했기 때문에 CMD ["node", "app.js"]를 클릭하면 이미지가 시작되면 명령이 실행됩니다.
그리고 app.js 에는 이론상으로는 Couchbase Node.js SDK를 통해 Couchbase Server와 인터페이스하는 로직이 포함됩니다. 동일한
는 모든 프로그래밍 언어와 Couchbase SDK에서 수행할 수 있습니다. 명령이 완료되면 컨테이너가 제거됩니다.

결론

방금 Ubuntu 서버에서 Docker를 실행하고 스크립트를 통해 컨테이너에서 프로젝트를 실행하는 방법을 살펴보았습니다. 이 방법은
모든 사람을 위한 것은 아니며, 주어진 프로그래밍 언어로 프로젝트를 실행할 수 있어야 한다는 우리의 요구를 수용합니다.
호스트 수준에서 실행되는 Couchbase Server에 데이터를 저장하도록 합니다.

작성자

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

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

댓글 남기기