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:
