저는 팀과 함께 다양한 마이크로서비스를 만드는 프로젝트를 진행하고 있습니다. 이러한 마이크로서비스는
카우치베이스 서버 버킷에 우리가 선택한 간격의 데이터를 저장하고 AWS EC2 서버를 통해 작동합니다. 문제는 모든 사람이
우리 팀에는 선호하는 프로그래밍 언어가 있습니다. 이 서버에 모든 서버 측 언어를 설치하면 다음과 같이 될 것입니다.
비용이 많이 듭니다. 대신 각 마이크로서비스에 Docker 컨테이너를 사용하기로 결정했습니다. 간격을 두고 실행하기 때문에 다음과 같이 할 수 있습니다.
실행할 때마다 컨테이너를 제거하여 코어 서버를 가볍고 소프트웨어로 깔끔하게 유지합니다.
이 솔루션을 구현하기 위해 저희가 해온 몇 가지 작업을 살펴보겠습니다.
EC2 인스턴스에서 Docker 구성하기
현재 Ubuntu의 장기 지원 릴리스이기 때문에 Amazon EC2 호스트가 Ubuntu 14.04라고 가정해 보겠습니다. 로그인
를 실행하고 sudo 사용자로 다음을 실행합니다:
1 2 3 4 |
sudo apt-get 업데이트 sudo apt-get 설치 도커.io |
위의 방법은 Mac이나 Windows 환경에서와 같이 가상 머신이 아닌 호스트에 Docker를 설치하는 것입니다.
이 시점에서는 Docker를 사용할 수 있습니다. 저희의 의도는 빌드 스크립트를 사용하는 것이지만 수동으로도 사용할 수 있습니다. 다음과 같은 경우
EC2 인스턴스에 아직 Couchbase를 설치하지 않은 경우에도 설치할 수 있습니다. 최신 Debian 파일을 다운로드하세요.
카우치베이스 다운로드 섹션으로 이동하여 다음을 실행합니다:
1 2 3 |
dpkg -i 다운로드-파일-이름.deb |
또는 이미 카우치베이스 서버를 실행 중인 Amazon EC2 인스턴스를 스핀업하도록 선택할 수도 있습니다. 이에 대한 자세한 정보
주제를 찾을 수 있습니다. 여기.
빌드 스크립트 디자인
그리고 도커파일 는 Docker 이미지를 생성하기 위한 빌드 스크립트입니다. 이 스크립트에서는 사용할 운영 체제를 정의하고, 어떤 운영 체제가
다운로드할 패키지와 어떤 파일이 포함될지 결정합니다.
저는 Node.js를 더 좋아하기 때문에 이 프로젝트의 마이크로서비스는 Node.js입니다. 이 문서에서는 Java와 Python을 사용했지만 다른 일부 마이크로서비스는
는 특정 언어에 국한되지 않습니다. 제 마이크로서비스 중 하나의 빌드 파일은 다음과 같습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
FROM 우분투:신뢰할 수 있는 관리자 Nic Raboy 환경 debian_frontend 비대화형 환경 debconf_noninteractive_seen true RUN apt-get 업데이트 RUN apt-get 설치 -yq libcurl3 curl RUN curl -sL https://deb.nodesource.com/setup_4.x | bash -. RUN apt-get 업데이트 && apt-get 설치 -yq nodejs COPY 패키지.json 앱.js 구성.json 모의 데이터.xml / COPY 모델 /모델 COPY 경로 /경로 RUN npm 설치 CMD ["node", "app.js"] |
위의 파일을 세분화하기 위해 모든 부분을 살펴보겠습니다.
먼저 이 이미지가 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 프로젝트입니다.
컨테이너를 실행하기 전에 먼저 컨테이너의 청사진을 기반으로 컨테이너를 생성해야 합니다. 도커파일. 다음을 실행합니다.
도커 명령줄 인터페이스를 통해
1 2 3 |
도커 빌드 -t my_프로젝트 . |
위는 스크립트의 각 단계를 거쳐 이미지에 이름을 태그합니다. my_project. 일단 구축되면 언제든지
Docker 명령줄 도구에서 다음을 실행하여 이미지를 실행할 수 있습니다:
1 2 3 |
도커 실행 --rm --추가-호스트="localhost:10.0.2.2" my_프로젝트 |
하지만 잠깐만요. 왜 우리가 --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에 데이터를 저장하도록 합니다.