Docker
Uruchamianie prostej aplikacji Node.js
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).
Przejdź do utworzenia katalogu, w którym będą się znajdować wszystkie działające pliki aplikacji. Utwórz plik
package.jsonw tym katalogu, który opisuje twoją aplikację, a także zależności. Twój plikpackage.jsonpowinien 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" } }
Jeśli musimy pracować z Node.js, zwykle tworzymy plik
server, który definiuje aplikację internetową. W tym przypadku używamy frameworkaExpress.js(wersja4.13.3nowsze). Podstawowy plikserver.jswyglą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);Dla osób zaznajomionych z Docker, można spotkać plik
Dockerfile. PlikDockerfileto 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:latestinstruuje demona Docker z jakiego obrazu chcemy zbudować. W tym przypadku korzystamy zlatestwersji oficjalnegonodeobrazu 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_appNastę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_appna obrazie. Robimy to przezCOPY package.json /usr/src/my_first_app/ RUN npm installNastępnie wpisujemy
COPY . /usr/src/my_first_appaby dodać wszystkie pliki aplikacji i kod źródłowy do katalogu roboczego na obrazie.Następnie używamy dyrektywy
EXPOSEaby poinstruować demona, aby port8080wynikowego kontenera był widoczny (poprzez mapowanie kontenera na hosta), ponieważ aplikacja wiąże się z portem8080.W ostatnim kroku instruujemy demona, aby uruchomił
node server.jskomendnode server.jswewnątrz obrazu, wykonując podstawowe polecenienpm start. Wykorzystujemy do tego dyrektywęCMD, która przyjmuje komendy jako argumenty.CMD [ "npm", "start" ]
Następnie tworzymy plik
.dockerignorew tym samym katalogu, coDockerfileaby zapobiec kopiowaniu naszych kopiinode_modulesi dziennikównode_modulesużywanych przez instalację systemu Node.js do obrazu Docker. Plik.dockerignoremusi mieć następującą treść:node_modules npm-debug.logZbuduj 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
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
Wydrukuj dane wyjściowe aplikacji, uruchamiając
docker psna 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
- Z danych wyjściowych
docker ps0.0.0.0:49160->8080/tcpuzyskane mapowanie portów to0.0.0.0:49160->8080/tcp. Dlatego Docker zamapował port8080wewną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