Docker a vývoj na NAS Synology

Docker a vývoj na NAS Synology
« kdy: 30. 03. 2022, 14:00:01 »
Ahoj,

Kupil som si synology NAS a okrem ineho to ma v sebe aj docker. Tak som si myslel, ze by bolo vhodne si to odskusat a naucit. Docker sa len ucim a tak mam dotaz.

- spravil som image s node 14 => FROM node:14
- nasledne som image spustil a dal som mu pripojit volume, ktore mam na NASku ako sdilenu slozku s nazvom PROJEKTY, cize mapujem z NASka /volume1/PROJEKTY/testapp do /opt/testapp uvnitr dockeru
- dalej mam tuto sdilenu slozku z NASka, pripojenu na moj macbook a projekt testapp editujem cez visual studio code
- projekt v dockeri spustam cez pm2, takto => CMD [ "pm2-runtime", "app.json" ]

Problem nastava s npm install :) Bez nainstalovania node_modules mi samozrejme testapp bezat nebude. Predpokladam ze npm install musim pustat vo vnutri dockeru neviem jak to mam urobit. Alebo to takto nefunguje a moja predstava je naivna? Popripade ako spravne by som to mal robit? 

Diky za kazdu radu
« Poslední změna: 30. 03. 2022, 22:30:33 od Petr Krčmář »


hmmmw

Re:docker a vyvoj
« Odpověď #1 kdy: 30. 03. 2022, 14:12:43 »
Když děláš ten image, tak mezi FROM a CMD můžeš nacpat plno věcí, které se ti budou pak hodit. Viz tento postup:
https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

Kód: [Vybrat]
FROM node:16

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .

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

3ugeene

Re:docker a vyvoj
« Odpověď #2 kdy: 30. 03. 2022, 14:13:31 »
Kód: [Vybrat]
RUN npm install

v Dockerfile

Re:docker a vyvoj
« Odpověď #3 kdy: 30. 03. 2022, 15:29:48 »
Tam kde to bezi bys nemel sdilet ten zdrojak mezi hostem a dockerem. To delas lokalne pri vyvoji. Na runtime stroji jen hodis image a ten nastartujes (+ zasitujes, treba za nginx-proxy)
Děkuji za možnost editace příspěvku.

Re:docker a vyvoj
« Odpověď #4 kdy: 30. 03. 2022, 15:52:47 »
Tam kde to bezi bys nemel sdilet ten zdrojak mezi hostem a dockerem. To delas lokalne pri vyvoji. Na runtime stroji jen hodis image a ten nastartujes (+ zasitujes, treba za nginx-proxy)

a ked nechcem vyvijat na lokalu? to je vlastne mojim cielom, aby som kod pisal na macbooku ale kod sa vykonaval v dockeru na NAsku. Alebo to takto s dockerom nefunguje a neni docker na to urceny?


Re:docker a vyvoj
« Odpověď #5 kdy: 30. 03. 2022, 16:30:53 »
Docker je vždy runtime. Tj keď vyrobíš image, tak to samozrejme bude bežať na NASe.

Každopádne aj s Dockerom máš niekoľko možností ako na to.

Môžeš mať "source to image (s2i)" build kde docker file začne

Kód: [Vybrat]
FROM ...

COPY zdrojáky ...
RUN npm install && npm build && ...
...

Tj build aplikácie sa deje v dobe buildu image (a v tom istom kontajneri) a na konci (v posledných krokoch Dockerfilu) by si z toho mal ideálne tie zdrojáky zmazať.

Alternatívne ti môže bežať najprv build niekde na lokále alebo build serveri a potom v Dockerfile nepridávaš zdrojáky ale len výsledné artefakty

Kód: [Vybrat]
FROM ...

COPY ./build/... ...
...

Na konci Docker buildu by si ale v oboch prípadoch mal dostať image kde máš niečo spustiteľného.

Ten image sa uloží do Docker registry odkiaľ sa potom na NASe vyrobí inštancia daného kontajneru a spustí.

Re:docker a vyvoj
« Odpověď #6 kdy: 30. 03. 2022, 16:46:21 »
Docker je vždy runtime. Tj keď vyrobíš image, tak to samozrejme bude bežať na NASe.

Každopádne aj s Dockerom máš niekoľko možností ako na to.

Môžeš mať "source to image (s2i)" build kde docker file začne

Kód: [Vybrat]
FROM ...

COPY zdrojáky ...
RUN npm install && npm build && ...
...

Tj build aplikácie sa deje v dobe buildu image (a v tom istom kontajneri) a na konci (v posledných krokoch Dockerfilu) by si z toho mal ideálne tie zdrojáky zmazať.

Alternatívne ti môže bežať najprv build niekde na lokále alebo build serveri a potom v Dockerfile nepridávaš zdrojáky ale len výsledné artefakty

Kód: [Vybrat]
FROM ...

COPY ./build/... ...
...

Na konci Docker buildu by si ale v oboch prípadoch mal dostať image kde máš niečo spustiteľného.

Ten image sa uloží do Docker registry odkiaľ sa potom na NASe vyrobí inštancia daného kontajneru a spustí.
to znamena, to co chcem ja od dockeru je vlastne blbost, ak som spravne pochopil, tak docker je nieco co sa zostavi a pak sa uz len spusta a robi to co bolo zostavene, nepocita s tym ze by sa za behu v nom mohlo nieco menit ci?

pre mna by bola vhodnejsia asi nejaka klasicka virtualizacia, kde by som napriklad nainstaloval "plny" linux a v nom si len primapoval sdilenu slozku s mojim zdrojakom, v slozke by som na tom linuxe spustal pm2.
Nasledne na druhej strane by som mal tu istu sietovu slozku pripojenu na macbooku a editoval cez visualcode...

V momente ked upravim kod vo visual code a ulozim ho, sa aktivuje pm2, restartne mi nodejs proces a vykona sa novoulozeny kod v tom linuxe... tak?

Re:docker a vyvoj
« Odpověď #7 kdy: 30. 03. 2022, 16:59:42 »
můžeš měnit obsah z venku, tak jsi to i udělal, mountoval jsi do dockeru sdílenou složku, kterou jsi pak upravoval ze svého počítače. Horší to je ale se spuštěním nějakého příkazu uvnitř dockeru od tebe, to nejde jednoduše.

Pokud se přihlásíš na nasku, můžeš zavolat spustit npm install ručně z dockeru:

docker exec -ti <id> -w /cesta/k/aplikaci npm install

Musíš to ale udělat z nasky, jinak se do dockeru nedostaneš. Je také možnost volat npm install od sebe a přes sdílený adresář se to dostane do dockeru, tady ale chce dát pozor, abys to volal ze stejného OS jak ten, na kterém to běží, ne všechny node.js moduly jsou nezávislé na archiktetuře.

Re:docker a vyvoj
« Odpověď #8 kdy: 30. 03. 2022, 17:11:16 »
můžeš měnit obsah z venku, tak jsi to i udělal, mountoval jsi do dockeru sdílenou složku, kterou jsi pak upravoval ze svého počítače. Horší to je ale se spuštěním nějakého příkazu uvnitř dockeru od tebe, to nejde jednoduše.

Pokud se přihlásíš na nasku, můžeš zavolat spustit npm install ručně z dockeru:

docker exec -ti <id> -w /cesta/k/aplikaci npm install

Musíš to ale udělat z nasky, jinak se do dockeru nedostaneš. Je také možnost volat npm install od sebe a přes sdílený adresář se to dostane do dockeru, tady ale chce dát pozor, abys to volal ze stejného OS jak ten, na kterém to běží, ne všechny node.js moduly jsou nezávislé na archiktetuře.

ahaaa... hmm, tak ted premysliet co bude lepsie, kazdopadne dik za tip...

Pixe

Re:docker a vyvoj
« Odpověď #9 kdy: 30. 03. 2022, 20:01:18 »
a ked nechcem vyvijat na lokalu? to je vlastne mojim cielom, aby som kod pisal na macbooku ale kod sa vykonaval v dockeru na NAsku. Alebo to takto s dockerom nefunguje a neni docker na to urceny?

Existují speciální nástroje pro tento účel - https://devspace.sh/, https://skaffold.dev/,... ale pro začátek je to pro tebe zbytečná komplikace, většinou je to zaměřené na práci s kubernetes.

Pokud nechceš vyvíjet na lokálu, je IMHO nejjednodušší např. https://code.visualstudio.com/docs/remote/remote-overview (https://code.visualstudio.com/docs/remote/containers-tutorial), nebo https://www.jetbrains.com/help/idea/remote-development-a.html

NAS ale pro tohle není vhodný, vlastně by to byl krok zpět. Má to smysl používat až v případě, že potřebuješ vyšší výkon než má tvůj počítač, nebo nějaký specializovaný hardware