V úvodním příspěvku Dockerfile jsem představil jednoduchý příklad Node.js Dockerfile:
FROM node:14
WORKDIR /usr/src/app
COPY package*.json app.js ./
RUN npm install
EXPOSE 3000
CMD ["node", "app.js"]
POZNÁMKA:používejte dvojité uvozovky v
CMD
čára. Jednoduché uvozovky způsobí chybu.
Použijme tento Dockerfile k vytvoření obrazu a poté spusťte kontejner.
Tento soubor vytvořím v dev/docker/examplenode
složka. Vytvořím jednoduchou aplikaci Node.js v app.js
pomocí Express:
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Server ready'))
Super jednoduché, ale máme jednu závislost. Potřebuji jej přidat do package.json
soubor, tak spustím
npm init -y
npm install express
Nyní můžete spustit node app.js
a ujistěte se, že to funguje:
Zastavte tento proces a pojďme z něj vytvořit Docker Image.
Vše, co potřebujete, je app.js
, package.json
a package-lock.json
soubory.
A Dockerfile. Vytvořte Dockerfile
soubor ve stejné složce, bez přípony (nikoli Dockerfile.txt).
node_modules
můžete libovolně smazat složku, která nyní obsahuje knihovnu Express a její závislosti, ale můžete také vytvořit .dockerignore
a přidejte node_modules
uvnitř, aby Docker tuto složku zcela ignoroval.
Funguje to jako .gitignore
v Gitu.
Spusťte příkaz
docker build -t examplenode .
Stažení obrazu Node a spuštění npm install
bude chvíli trvat , pak dostanete úspěšnou zprávu.
Je důležité si uvědomit, že po prvním stažení základního obrázku, jako je node
ten, který zde používáme, bude ukládán do mezipaměti lokálně, takže jej nemusíte znovu stahovat a proces vytváření obrazu bude mnohem rychlejší.
Nyní můžeme spustit kontejner z obrázku:
docker run -d -p 3000:3000 --name node-app examplenode
Nyní můžete vidět obrázek spuštěný v Docker Desktop:
A kliknutím na tlačítko „Otevřít v prohlížeči“ otevřete aplikaci běžící na portu 3000:
Jako předtím! Až na to, že nyní aplikace běží ve svém vlastním kontejneru, zcela izolovaně, a v kontejneru můžeme spouštět jakoukoli verzi Node, kterou chceme, se všemi výhodami, které nám Docker poskytuje.
Můžete například odstranit kontejner a spustit jej na portu 80 namísto 3000 pomocí:
docker run -d -p 80:3000 --name node-app examplenode
Obrázek se nemusí měnit, vše, co změníte, je mapování portů. Zde je výsledek: