Nightscout i Docker

Temat dla bardziej zaawansowanych 馃檪

Nie wiesz co to jest docker? Zapraszam na oficjaln膮 stron臋 www.docker.com. Docker to narz臋dzie (w wielkim skr贸cie), kt贸re pozwala nam na systemie stworzy膰 kontenery, kt贸re dostarczaj膮 艣rodowisko pracy, ale jednocze艣nie s膮 odseparowane od systemu operacyjnego, dzi臋ki czemu聽 kontener nie wp艂ywa na w 偶aden spos贸b na nasz g艂贸wny system. Jest to wygodne rozwi膮zanie, 艂atwe w utrzymaniu i zarz膮dzaniu. Aktualizacja obraz贸w jest szybka i zawsze prosta do odwr贸cenia w przypadku niepowodzenia.

Do uruchomienia Nightscout na Dockerze b臋dziemy potrzebowa膰:

Wymagane obrazy:

Nightscout (zbudujemy go sami) + MongoDB

Obraz dla Nightscout zbudujemy sami, poni偶ej zawarto艣膰 pliku Dockerfile, kt贸ry nale偶y utworzy膰 w pustym katalogu:

FROM node:carbon-alpine
MAINTAINER Michal Terbert <[email protected]>

RUN apk add --no-cache git #nodejs
RUN mkdir -p /opt/app

WORKDIR /opt/app
RUN git clone git://github.com/nightscout/cgm-remote-monitor.git /opt/app
RUN cd /opt/app && git checkout ${DEPLOY_HEAD-master}
RUN cd /opt/app && npm install
RUN cd /opt/app && npm run postinstall
RUN cd /opt/app && npm run env
EXPOSE 1337

CMD ["node", "server.js"]

Jest to najmniejszy obraz z Nightscout jaki uda艂o mi si臋 zbudowa膰 馃檪聽 Powy偶sz膮 zawarto艣膰 nale偶y skopiowa膰 do pliku Dockerfile i wykona膰 komend臋:

docker build . -t alpine-ns:latest

Post臋p budowania obrazu mo偶emy 艣ledzi膰 jak na poni偶szym zrzucie ekranu:

Pozytywne zbudowanie obrazu b臋dzie poprzedzone poni偶szymi komunikatami:

Nast臋pnym krokiem jest stworzenie nowej wirtualnej seci dockerowej oraz uruchomienie obrazu z baz膮 danych mongodb.

Sie膰 stworzymy poni偶sz膮 komend膮 (tworzymy sie膰 o nazwie ns):

docker network create ns

A obraz z baz膮 MongoDB uruchomimy:

docker run -d --name mongo -p 127.0.0.1:27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=mongoadmin \
-e MONGO_INITDB_ROOT_PASSWORD=secret \
-v /opt/mongo/db:/data/db \
--network=ns \
mvertes/alpine-mongo

Baza zostanie uruchomiona tylko lokalnie, nie b臋dzie mo偶liwo艣膰 dostania si臋 do bazy „z internetu”. Zmienne MONGO_INITDB_ROOT_USERNAME i MONGO_INITDB_ROOT_PASSWORD nale偶y dostosowa膰 pod siebie (w艂asny u偶ytkownik i has艂o). Kolejnym krokiem jest ustawienie parametr贸w w obrazie Nightscout i uruchomienie go. Korzystamy tutaj z wcze艣niej zbudowanego obrazu Nightscout oraz zmiennych聽MONGO_INITDB*, kt贸re nale偶y wpisa膰 w聽MONGO_CONNECTION=mongodb://u偶ytkownik:has艂[email protected]/baza.

Wa偶ne aby ustawi膰 zmienn膮 API_SECRET, jest to has艂o, kt贸rym mo偶emy si臋 zautoryzowa膰 w aplikacji Nightscout.

docker run -d \
-e "API_SECRET=twoj_tajny_kod_api_12345" \-e 'MONGO_CONNECTION=mongodb://mongoadmin:[email protected]/baza' \
--name=ns1 \
--network=ns \
-p 1337:1337 \
alpine-ns:latest


Po ca艂ym zabiegu mo偶emy sprawdzi膰 czy nasze kontenery Dockerowe s膮 uruchomione:

docker ps

Powinni艣my zobaczy膰 co艣 podobnego do poni偶szego zrzutu obrazu:

Jak mo偶na zauwa偶y膰 Nightscout i baza dzia艂aj膮 (kolumna STATUS) oraz kontener Nightscout – ns1聽ma wyeksponowany port zewn臋trzny 1337. Teraz uruchamiaj膮c przegl膮dark臋 internetow膮 mo偶emy sprawdzi膰 jak dzia艂a Nightscout na porcie 1337 wpisuj膮c w pasku przegl膮darki adres ip naszego serwera i port czyli np. 10.0.0.100:1337.

Je偶eli chcemy uruchomi膰 aplikacj臋 Nightscout na innym porcie musimy nieco zmodyfikowa膰 polecenie do uruchamiania kontenera z Nightscout:

docker run -d \
-e "API_SECRET=twoj_tajny_kod_api_12345" \-e 'MONGO_CONNECTION=mongodb://mongoadmin:[email protected]/baza' \
--name=ns1 \
--network=ns \
-p 80:1337 \
alpine-ns:latest

Powy偶szy przyk艂ad pozwoli nam uruchomi膰 aplikacj臋 na porcie 80. Nale偶y pami臋ta膰 aby na naszym serwerze nie dzia艂a艂a, 偶adna us艂uga na porcie 80. W kolejnym artykule przedstawi臋 jak uruchomi膰 aplikacj臋 Nightscout zabezpieczon膮 certyfikatem SSL (za darmo, prawie) 馃檪