Szukaj…


Uruchamianie aplikacji Basic Node.js w kontenerze

Przykład, który omówię, zakłada, że masz instalację Dockera, która działa w twoim systemie, i podstawową wiedzę na temat pracy z Node.js. Jeśli wiesz, jak musisz pracować z Dockerem, powinno być oczywiste, że framework Node.js nie musi być zainstalowany w twoim systemie, raczej użyjemy latest wersji obrazu node dostępnej z Dockera. Dlatego w razie potrzeby możesz wcześniej pobrać obraz za pomocą docker pull node poleceń. (Polecenie automatycznie pulls najnowszą wersję obrazu node z okna dokowanego).

  1. Przejdź do utworzenia katalogu, w którym będą się znajdować wszystkie działające pliki aplikacji. Utwórz plik package.json w tym katalogu, który opisuje twoją aplikację, a także zależności. Twój plik package.json powinien wyglądać mniej więcej tak:

     {
       "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. Jeśli musimy pracować z Node.js, zwykle tworzymy plik server , który definiuje aplikację internetową. W tym przypadku używamy frameworka Express.js (wersja 4.13.3 nowsze). Podstawowy plik server.js wyglądałby mniej więcej tak:

     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. Dla osób zaznajomionych z Docker, można spotkać plik Dockerfile . Plik Dockerfile to plik tekstowy zawierający wszystkie polecenia wymagane do zbudowania niestandardowego obrazu dostosowanego do Twojej aplikacji.

Utwórz pusty plik tekstowy o nazwie Dockerfile w bieżącym katalogu. Metoda jego utworzenia jest prosta w systemie Windows. W systemie Linux możesz wykonać touch Dockerfile w katalogu zawierającym wszystkie pliki wymagane dla twojej aplikacji. Otwórz plik Docker w dowolnym edytorze tekstu i dodaj następujące wiersze:

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 instruuje demona Docker z jakiego obrazu chcemy zbudować. W tym przypadku korzystamy z latest wersji oficjalnego node obrazu Docker dostępnego w Docker Hub .

  • Wewnątrz tego obrazu kontynuujemy tworzenie katalogu roboczego zawierającego wszystkie wymagane pliki i instruujemy demona, aby ustawił ten katalog jako żądany katalog roboczy dla naszej aplikacji. W tym celu dodajemy

      RUN mkdir -p /usr/src/my_first_app
      WORKDIR /usr/src/my_first_app
    
  • Następnie przystępujemy do instalowania zależności aplikacji, najpierw przenosząc plik package.json (który określa informacje o aplikacji, w tym zależności) do katalogu roboczego /usr/src/my_first_app na obrazie. Robimy to przez

      COPY package.json /usr/src/my_first_app/
      RUN npm install 
    
  • Następnie wpisujemy COPY . /usr/src/my_first_app aby dodać wszystkie pliki aplikacji i kod źródłowy do katalogu roboczego na obrazie.

  • Następnie używamy dyrektywy EXPOSE aby poinstruować demona, aby port 8080 wynikowego kontenera był widoczny (poprzez mapowanie kontenera na hosta), ponieważ aplikacja wiąże się z portem 8080 .

  • W ostatnim kroku instruujemy demona, aby uruchomił node server.js komend node server.js wewnątrz obrazu, wykonując podstawowe polecenie npm start . Wykorzystujemy do tego dyrektywę CMD , która przyjmuje komendy jako argumenty.

      CMD [ "npm", "start" ] 
    
  1. Następnie tworzymy plik .dockerignore w tym samym katalogu, co Dockerfile aby zapobiec kopiowaniu naszych kopii node_modules i dzienników node_modules używanych przez instalację systemu Node.js do obrazu Docker. Plik .dockerignore musi mieć następującą treść:

     node_modules
     npm-debug.log
    
  2. Zbuduj swój wizerunek

Przejdź do katalogu zawierającego Dockerfile i uruchom następujące polecenie, aby zbudować obraz Docker. Flaga -t pozwala oznaczyć obraz, dzięki czemu łatwiej go później znaleźć za pomocą polecenia docker images:

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

Twoje zdjęcie będzie teraz wyświetlane przez Docker. Przeglądaj obrazy za pomocą poniższego polecenia:

$ docker images

REPOSITORY                      TAG        ID              CREATED
node                            latest     539c0211cd76    10 minutes ago
<your username>/node-web-app    latest     d64d3505b0d2    1 minute ago
  1. Uruchamianie obrazu

Możemy teraz uruchomić obraz, który właśnie utworzyliśmy, używając zawartości aplikacji, obrazu podstawowego node i pliku Dockerfile . Teraz przystępujemy do uruchamiania naszego nowo utworzonego obrazu <your username>/node-web-app . Zapewnienie przełącznika -d komendy docker run kontener w trybie odłączonym, dzięki czemu kontener działa w tle. Flaga -p przekierowuje port publiczny do portu prywatnego w kontenerze. Uruchom wcześniej utworzony obraz za pomocą tego polecenia:

$ docker run -p 49160:8080 -d <your username>/node-web-app
  1. Wydrukuj dane wyjściowe aplikacji, uruchamiając docker ps na swoim terminalu. Wynik powinien wyglądać mniej więcej tak.

     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
    

Uzyskaj dane wyjściowe aplikacji, wprowadzając docker logs <CONTAINER ID> . W tym przypadku są to docker logs 7b701693b294 .

Dane wyjściowe: Running on http://localhost:8080

  1. Z danych wyjściowych docker ps 0.0.0.0:49160->8080/tcp uzyskane mapowanie portów to 0.0.0.0:49160->8080/tcp . Dlatego Docker zamapował port 8080 wewnątrz kontenera na port 49160 na komputerze-hoście. W przeglądarce możemy teraz wpisać localhost:49160 .

Możemy również zadzwonić do naszej aplikacji za pomocą 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow