Dockerize vaše Node.js REST API pomocí technologie kontejnerizace Docker, která zjednodušuje proces nasazení a správy.

Proces nasazování a spouštění aplikací v různých prostředích může být obtížný, protože je třeba zvážit řadu faktorů jako je nastavení proměnných prostředí pro konfiguraci nezbytných závislostí a konkrétních verzí různých softwarových balíčků.

Využitím technologie kontejnerizace společnosti Docker však můžete nasadit aplikace v různých prostředích s minimálním úsilím se všemi nezbytnými závislostmi v obrazu dockeru. To znamená, že se nemusíte starat o žádnou konfiguraci. Díky tomu je proces nasazování a spouštění aplikací v různých prostředích hračkou.

Co je Docker?

Přístavní dělník je vývojová platforma, která poskytuje nástroje a prostředí pro balení aplikací jako přenosné obrazy, které lze spouštět jako samostatné spustitelné komponenty v kontejnerech.

Tyto kontejnery tvoří kód aplikace a požadované závislosti, aby aplikace úspěšně běžela v různých běhových prostředích bez jakýchkoli problémů.

instagram viewer

Než začnete, nainstalujte Docker na místní počítač. Zkontrolujte požadavky a pokyny k instalaci specifické pro platformu z oficiální dokumentace.

Vytvořte Node.js REST API

Začít, vytvořit webový server Node.js.

V něm najdete kód této aplikace úložiště GitHub.

Dále nainstalujte požadované balíčky pro tento projekt.

npm nainstalovat morgan pg knex

The str balíček se používá k navázání spojení s databází PostgreSQL. knex, na druhou stranu poskytuje jednoduché API pro interakci s PostgreSQL — využijete ho k psaní SQL dotazů.

Nakonec použijete morgan, middleware, který protokoluje požadavky a odpovědi HTTP na konzole, za účelem ladění a sledování vaší aplikace běžící v kontejneru Docker.

Nakonec otevřete index.js soubor a přidejte kód níže implementuje jednoduché REST API se třemi trasami.

konst vyjádřit = vyžadovat("vyjádřit")
konst morgan = vyžadovat("morgan")
konst app = express()
konst db = vyžadovat('./db')
konst PORT = process.env. PORT || 5000

app.use (morgan('dev'))
app.use (express.json())
app.use (express.urlencoded({ prodloužený: skutečný }))

app.get('/', (req, res) => req.send('Ahoj světe!' ))

app.get('/users', asynchronní (req, res) => {
konst uživatelé = čekat db.select().from('uživatelé')
res.json (uživatelé)
})

app.post('/users', asynchronní (req, res) => {
konst uživatel = čekat db('uživatelé').vložit({ název: req.body.name }).returning('*')
res.json (uživatel)
})

app.listen (PORT, () => řídicí panel.log(`Server nahoře na PORT:${PORT}`))

Nakonfigurujte připojení k databázi

Rozhraní REST API bude komunikovat s instancí PostgreSQL společnosti Docker, ale nejprve musíte nakonfigurovat připojení k databázi ve vaší aplikaci. V kořenovém adresáři složky projektu vytvořte a db.js soubor a přidejte kód níže.

konst knex = vyžadovat('knex')
modul.exports = knex({
klient: 'postgres',
připojení: {
hostitel: 'db',
uživatel: 'testUser',
Heslo: 'mojeheslo123',
databáze: 'testUser',

},
})

Nastavte soubory migrate.js a seed.js

Tyto dva soubory umožní vytvořit tabulku v databázi a naplnit ji testovacími daty přes API. Vytvořit novou složku, skripty, v kořenovém adresáři vašeho projektu a přidejte dva soubory: migrate.js a seed.js.

V migrate.js soubor, přidejte kód níže:

konst db = vyžadovat('../db');
(asynchronní () => {
Snaž se {
čekat db.schema.dropTableIfExists('uživatelé')
čekat db.schema.withSchema('veřejnost').createTable('uživatelé', (tabulka) => {
table.increments()
tabulka.string('název')
})
řídicí panel.log('Vytvořená tabulka uživatelů!')
process.exit(0)
} chytit (chyba) {
řídicí panel.log (chyba)
process.exit(1)
}
})()

Tento kód vytvoří a uživatelů tabulka s automaticky se zvyšujícím sloupcem id a a název sloupec v databázi.

Dále v seed.js soubor, přidejte kód níže:

konst db = vyžadovat('../db');
(asynchronní () => {
Snaž se {
čekat db('uživatelé').vložit({ název: 'Test User1' })
čekat db('uživatelé').vložit({ název: 'Test User2' })
řídicí panel.log('Přidáni falešní uživatelé!')
process.exit(0)
} chytit (chyba) {
řídicí panel.log (chyba)
process.exit(1)
}
})()

Tento kód implementuje asynchronní funkci, která vloží dva uživatele do databáze PostgreSQL.

Nakonec přidejte tyto příkazy do svého package.json soubor.

"skripty": {
"Start": "node index.js",
"migrovat": "node scripts/migrate.js",
"semínko": "node scripts/seed.js"

},

Vzhledem k tomu, že nemáte nakonfigurovaného klienta, k testování API budete muset spouštět dva soubory jako skripty vedle běh npm příkaz.

Nastavte Dockerfile

Dockerfile definuje pokyny vyžadované modulem Docker k vytvoření obrazu Dockeru. V kořenovém adresáři vašeho projektu vytvořte nový soubor a pojmenujte jej, Dockerfile. Poté přidejte následující pokyny k vytvoření bitové kopie Dockeru pro aplikaci Node.js.

Z uzel:16.3.0-alpský 3.13
WORKDIR /app
KOPÍROVAT balíček*.json ./
BĚH instalace npm
KOPÍROVAT. .
ODHALIT8000
CMD [ "uzel", "index.js" ]

Pojďme si to rozebrat:

  • Z - Tato instrukce nastavuje základní obraz pro aplikaci, což je obraz Node.js Alpine, odlehčená verze obrazu Node.js, který lze nalézt v registru Docker.
  • WORKDIR - sady /app adresář jako pracovní adresář.
  • KOPÍROVAT balíček*.json./ - Instruuje Docker, aby zkopíroval všechny soubory s tímto formátem názvu souboru z aktuálního adresáře do /app složku.
  • BĚH - spustí a vytvoří obraz.
  • KOPÍROVAT.. - zkopíruje zdrojové soubory do /app složku.
  • ODHALIT - to Instruuje Docker, aby vystavil port v kontejneru vnějšímu prostředí, v tomto případě hostitelskému počítači.
  • CMD - určuje příkaz, který se má provést při vytvoření kontejneru Docker z obrázku.

Vytvořte soubor Docker Compose File

Aby mohla aplikace Node.js interagovat s instancí PostgreSQL Dockeru, musí tyto dvě aplikace běžet v kontejnerech Docker ve stejném síťovém prostředí.

Z tohoto důvodu musíte definovat a sestavit jak image aplikace, tak instanci PostgreSQL pomocí Docker Compose — nástroj, který vám umožňuje vytvářet a spravovat více kontejnerů Docker.

Jednoduše řečeno, pomocí Docker Compose můžete definovat služby, které tvoří vaši aplikaci jako jeden celek, v tomto případě Node.js REST API a PostgreSQL databázi.

Vytvořte nový soubor, docker-compose.yml, v kořenovém adresáři a přidejte kód níže:

verze:'3.9'

služby:
server:
stavět:.
porty:
-'5000:5000'
záleží na:
-db
db:
obraz:'postgres'
porty:
-'4321:5432'
životní prostředí:
POSTGRES_PASSWORD:'mojeheslo123'
POSTGRES_USER:'testUser'
svazky:
-data:/var/lib/postgresql/data

svazky:
data:

Tento kód vytvoří a spustí dva kontejnery Docker. První kontejner, server, Docker Compose používá Dockerfile k vytvoření obrazu pro tento kontejner.

Také určuje, že kontejner serveru závisí na db kontejner. To znamená, server kontejner musí být spuštěn po db kontejner, který se s ním spojí.

Druhým kontejnerem je databázový kontejner PostgreSQL. Pro tento kontejner nemusíte zadávat Dockerfile, protože bude vytvořen z obrazu PostgreSQL v registru obrazů Dockeru.

Sestavte obrazy Docker

Pomocí příkazu Docker Compose vytvořte obrazy a spusťte dva kontejnery.

docker-compose up -d

Po úspěšném dokončení procesu byste měli vidět podobnou odpověď.

Otestujte REST API

Spusťte níže uvedený příkaz a otestujte REST API běžící v kontejneru Docker. Měl by vytvořit tabulku v databázi PostgreSQL.

docker exec docker_node-server-1 npm spustit migraci

Měli byste vidět podobnou odpověď.

Sdílení obrázků Docker

Posledním krokem je odeslání obrázku Docker pro vaši aplikaci Node.js do Docker Hub. Je to podobné, jako když posíláte své projekty na GitHub.

  • Zamiřte k Docker Hub a zaregistrujte si účet a přihlaste se do uživatelského panelu.
  • Dále klikněte na Vytvořte úložiště. Zadejte název svého úložiště a nastavte jeho viditelnost na kterýkoli z nich Veřejnost nebo Soukromé a poté klikněte Vytvořit.
  • Chcete-li odeslat obrázek Docker vaší aplikace do Docker Hub, musíte se nejprve přihlásit ke svému účtu prostřednictvím terminálu a poté zadat své uživatelské jméno a heslo.
přihlášení do dockeru
  • Dále aktualizujte název obrázku Docker tak, aby odpovídal tomuto formátu: /. Pro provedení této změny spusťte níže uvedený příkaz:
 docker tag /
  • Nakonec zatlačte svůj obrázek Dockeru.
 docker push /< název repo>

Použití Dockeru ve vývoji

Tato příručka se dotkla pouze zlomku potenciálu, který může Docker nabídnout. Nyní však můžete pomocí technologie kontejnerizace Docker zabalit jakoukoli aplikaci a všechny její závislosti jako obrazy, které lze nasadit v různých vývojových i produkčních prostředích, jako je cloud, bez jakýchkoliv škytavka.