수색…


컨테이너에서 Basic Node.js 애플리케이션 실행하기

여기서 논의 할 예제는 시스템에서 작동하는 Docker 설치와 Node.js 작업 방법에 대한 기본적인 이해가 있다고 가정합니다. Docker로 작업해야하는 방법을 알고 있다면 Docker에서 제공하는 node 이미지의 latest 버전을 사용하는 대신 Node.js 프레임 워크를 시스템에 설치할 필요가 없음이 분명해야합니다. 따라서 필요한 경우 docker pull node 명령을 사용하여 이미지를 미리 다운로드 할 수 있습니다. (명령은 자동으로 node 이미지의 최신 버전을 도커에서 pulls .)

  1. 모든 작업중인 응용 프로그램 파일이있는 디렉토리를 만듭니다. 응용 프로그램과 종속성을 설명하는 package.json 파일을이 디렉토리에 만듭니다. package.json 파일은 다음과 같아야합니다.

     {
       "name": "docker_web_app",
       "version": "1.0.0",
       "description": "Node.js on Docker",
       "author": "First Last <[email protected]>",
       "main": "server.js",
       "scripts": {
         "start": "node server.js"
       },
       "dependencies": {
         "express": "^4.13.3"
       }
     }
    
  1. Node.js로 작업해야하는 경우 일반적으로 웹 응용 프로그램을 정의하는 server 파일을 만듭니다. 이 경우 우리는 Express.js 프레임 워크 (버전 4.13.3 이상)를 사용합니다. 기본적인 server.js 파일은 다음과 같습니다.

     var express = require('express');
     var PORT = 8080;
     var app = express();
     app.get('/', function (req, res) {
       res.send('Hello world\n');
     });
     
     app.listen(PORT);
     console.log('Running on http://localhost:' + PORT);
    
  2. Docker에 익숙한 사용자라면 Dockerfile 입니다. Dockerfile 은 응용 프로그램에 맞게 조정 된 사용자 지정 이미지를 작성하는 데 필요한 모든 명령을 포함하는 텍스트 파일입니다.

현재 디렉토리에 Dockerfile 이라는 빈 텍스트 파일을 작성하십시오. Windows를 만드는 방법은 간단합니다. Linux에서는 응용 프로그램에 필요한 모든 파일이 들어있는 디렉토리에서 touch Dockerfile 를 실행할 수 있습니다. 텍스트 편집기로 Dockerfile을 열고 다음 줄을 추가하십시오 :

FROM node:latest
RUN mkdir -p /usr/src/my_first_app
WORKDIR /usr/src/my_first_app
COPY package.json /usr/src/my_first_app/
RUN npm install
COPY . /usr/src/my_first_app
EXPOSE 8080
  • FROM node:latest 는 Docker 데몬에게 빌드 할 이미지를 지시합니다. 이 경우 Docker 허브 에서 사용할 수있는 공식 Docker 이미지 nodelatest 버전을 사용합니다.

  • 이 이미지 안에 필요한 모든 파일이 들어있는 작업 디렉토리를 만들고 데몬이이 디렉토리를 우리 어플리케이션의 원하는 작업 디렉토리로 설정하도록 지시합니다. 이를 위해 우리는

      RUN mkdir -p /usr/src/my_first_app
      WORKDIR /usr/src/my_first_app
    
  • 그런 다음 이미지의 /usr/src/my_first_app 작업 디렉토리에 dependency를 포함한 app 정보를 지정하는 package.json 파일을 먼저 이동하여 응용 프로그램 종속성을 설치합니다. 우리는

      COPY package.json /usr/src/my_first_app/
      RUN npm install 
    
  • 그런 다음 COPY . /usr/src/my_first_app 를 입력 COPY . /usr/src/my_first_app 를 사용하여 모든 응용 프로그램 파일과 소스 코드를 이미지의 작업 디렉토리에 추가하십시오.

  • 그런 다음 EXPOSE 지시어를 사용하여 응용 프로그램이 포트 8080 바인드하므로 결과 컨테이너의 포트 8080 을 컨테이너 - 호스트 매핑을 통해 표시하도록 지시합니다.

  • 마지막 단계에서는 데몬이 기본 npm start 명령을 실행하여 이미지 내에 node server.js 를 실행하도록 지시합니다. 명령에 인수를 취하는 CMD 지시어를 사용합니다.

      CMD [ "npm", "start" ] 
    
  1. 우리는 다음 만들 .dockerignore 과 같은 디렉토리에있는 파일을 Dockerfile 우리의 복사본을 방지하기 위해 node_modules 도커 이미지에 복사되는 것을 우리 Node.js를 시스템에 설치하여 사용 로그를. .dockerignore 파일의 내용은 다음과 같습니다.

     node_modules
     npm-debug.log
    
  2. 이미지 빌드

들어있는 디렉토리로 이동 Dockerfile 하고 도커 이미지를 구축하려면 다음 명령을 실행합니다. -t 플래그를 사용하면 이미지에 태그를 지정하여 docker images 명령을 사용하여 나중에 쉽게 찾을 수 있습니다.

    $ docker build -t <your username>/node-web-app .

이제 이미지가 Docker에 표시됩니다. 아래 명령을 사용하여 이미지를 봅니다.

$ docker images

REPOSITORY                      TAG        ID              CREATED
node                            latest     539c0211cd76    10 minutes ago
<your username>/node-web-app    latest     d64d3505b0d2    1 minute ago
  1. 이미지 실행하기

이제 응용 프로그램 내용, node 기본 이미지 및 Dockerfile 사용하여 방금 만든 이미지를 실행할 수 있습니다. 이제 새로 생성 된 <your username>/node-web-app 이미지를 실행합니다. docker run 명령에 -d 스위치를 제공하면 분리 모드에서 컨테이너가 실행되므로 컨테이너가 백그라운드에서 실행됩니다. -p 플래그는 공용 포트를 컨테이너 안의 전용 포트로 재 지정합니다. 다음 명령을 사용하여 이전에 빌드 한 이미지를 실행하십시오.

$ docker run -p 49160:8080 -d <your username>/node-web-app
  1. 터미널에서 docker ps 를 실행하여 앱의 출력을 인쇄하십시오. 출력은 다음과 같아야합니다.

     CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS                     NAMES
     7b701693b294      <your username>/node-web-app   "npm start"         20 minutes ago       Up 48 seconds       0.0.0.0:49160->8080/tcp   loving_goldstine
    

docker logs <CONTAINER ID> 를 입력하여 응용 프로그램 출력을 가져 docker logs <CONTAINER ID> . 이 경우 docker logs 7b701693b294 입니다.

출력 : Running on http://localhost:8080

  1. docker ps 출력에서 얻은 포트 매핑은 0.0.0.0:49160->8080/tcp 입니다. 따라서 Docker는 컨테이너 내부의 8080 포트를 호스트 시스템의 포트 49160에 매핑했습니다. 브라우저에서 이제 localhost:49160 입력 할 수 있습니다.

curl 사용하여 앱을 호출 할 수도 있습니다.

$ curl -i localhost:49160

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 08 Jan 2017 14:00:12 GMT
Connection: keep-alive

Hello world      


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow