Dockerize uw Node.js REST API met behulp van de containerisatietechnologie van Docker, die het implementatie- en beheerproces vereenvoudigt.
Het proces van het implementeren en uitvoeren van applicaties in verschillende omgevingen kan een gedoe zijn, omdat er een aantal factoren zijn waarmee rekening moet worden gehouden zoals het instellen van de omgevingsvariabelen tot het configureren van de benodigde afhankelijkheden en specifieke versies van verschillende softwarepakketten.
Door gebruik te maken van de containerisatietechnologie van Docker, kunt u echter met minimale inspanning applicaties in verschillende omgevingen implementeren met alle noodzakelijke afhankelijkheden in de docker-image. Dit betekent dat u zich geen zorgen hoeft te maken over het maken van een configuratie. Dit maakt het implementeren en uitvoeren van applicaties in verschillende omgevingen een fluitje van een cent.
Wat is Docker?
Dokwerker is een ontwikkelingsplatform dat de tools en omgeving biedt om applicaties te verpakken als draagbare afbeeldingen die kunnen worden uitgevoerd als zelfstandige uitvoerbare componenten in containers.
Deze containers vormen de code van de applicatie en de vereiste afhankelijkheden om de applicatie probleemloos op verschillende runtime-omgevingen te laten draaien.
Voordat u begint, installeert u Docker op uw lokale computer. Controleer de platformspecifieke vereisten en installatie-instructies in de officiële documentatie.
Maak een Node.js REST API
Starten, maak een Node.js-webserver.
U kunt de code van deze applicatie vinden in de bijbehorende GitHub-opslagplaats.
Installeer vervolgens de vereiste pakketten voor dit project.
npm installeer morgan pg knex
De blz pakket wordt gebruikt om een verbinding tot stand te brengen met een PostgreSQL-database. knex, aan de andere kant, biedt een eenvoudige API voor interactie met PostgreSQL - u zult deze gebruiken om SQL-query's te schrijven.
Als laatste ga je gebruiken morgan, een middleware die HTTP-verzoeken en -antwoorden op de console registreert, om uw applicatie die in een Docker-container draait te debuggen en te controleren.
Open ten slotte de index.js bestand en voeg de onderstaande code toe implementeert een eenvoudige REST API met drie trajecten.
const uitdrukken = vereisen("nadrukkelijk")
const morgan = vereisen("morgan")
const app = uitdrukken()
const DB = vereisen('./db')
const PORT = proces.env. HAVEN || 5000app.gebruik (morgan('dev'))
app.gebruik (express.json())
app.gebruik (express.urlencoded({ verlengd: WAAR }))app.get('/', (req, res) => res.send('Hallo Wereld!' ))
app.get('/gebruikers', asynchroon (req, res) => {
const gebruikers = wachten db.select().from('gebruikers')
res.json (gebruikers)
})app.post('/gebruikers', asynchroon (req, res) => {
const gebruiker = wachten DB('gebruikers').invoegen({ naam: req.body.name }).returning('*')
res.json (gebruiker)
})
app.listen (PORT, () => troosten.log(`Server op bij PORT:${PORT}`))
Configureer de databaseverbinding
De REST API werkt samen met de PostgreSQL-instantie van Docker, maar u moet eerst de databaseverbinding in uw toepassing configureren. Maak in de hoofdmap van uw projectmap een db.js bestand en voeg onderstaande code toe.
const knex = vereisen('knex')
moduul.export = knex({
cliënt: 'postgres',
verbinding: {
gastheer: 'db',
gebruiker: 'testGebruiker',
wachtwoord: 'mijnwachtwoord123',
databank: 'testGebruiker',
},
})
Stel de migratie.js- en seed.js-bestanden in
Deze twee bestanden maken het mogelijk om een tabel in de database te maken en deze via de API te vullen met testgegevens. Maak een nieuwe folder, scripts, in de hoofdmap van uw project en voeg twee bestanden toe: migreren.js En zaad.js.
In de migreren.js bestand, voeg onderstaande code toe:
const DB = vereisen('../db');
(asynchroon () => {
poging {
wachten db.schema.dropTableIfExists('gebruikers')
wachten db.schema.withSchema('openbaar'.createTable('gebruikers', (tabel) => {
tabel.incrementen()
tabel.tekenreeks('naam')
})
troosten.log('Aangemaakte gebruikerstabel!')
verwerken.afsluiten(0)
} vangst (fout) {
troosten.log (fout)
verwerken.afsluiten(1)
}
})()
Deze code maakt een gebruikers tabel met een automatisch oplopende id-kolom en een naam kolom in de database.
Vervolgens in de zaad.js bestand, voeg onderstaande code toe:
const DB = vereisen('../db');
(asynchroon () => {
poging {
wachten DB('gebruikers').invoegen({ naam: 'Testgebruiker1' })
wachten DB('gebruikers').invoegen({ naam: 'Testgebruiker2' })
troosten.log('Dummy-gebruikers toegevoegd!')
verwerken.afsluiten(0)
} vangst (fout) {
troosten.log (fout)
verwerken.afsluiten(1)
}
})()
Deze code implementeert een asynchrone functie die twee gebruikers in de PostgreSQL-database invoegt.
Voeg ten slotte deze opdrachten toe aan uw pakket.json bestand.
"scripts": {
"begin": "knooppunt index.js",
"migreren": "knooppuntscripts/migrate.js",
"zaad": "knooppuntscripts/seed.js"
},
Aangezien u geen client hebt geconfigureerd, moet u om de API te testen de twee bestanden uitvoeren als scripts naast de npm lopen commando.
Stel een Dockerfile in
Een Dockerfile definieert de instructies die de Docker-engine nodig heeft om een Docker-image te bouwen. Maak in de hoofdmap van uw project een nieuw bestand en geef het een naam, Dockerfile. Voeg vervolgens de volgende instructies toe om een Docker-image te bouwen voor de Node.js-toepassing.
VAN knooppunt:16.3.0-alpine3.13
WERKDIR /app
KOPIËREN pakket*.json ./
LOOP npm installeren
KOPIËREN. .
BLOOTSTELLEN8000
CMD [ "knooppunt", "index.js" ]
Laten we het opsplitsen:
- VAN - Deze instructie stelt de basisafbeelding voor de toepassing in, de Node.js Alpine-afbeelding, een lichtgewicht versie van de Node.js-afbeelding die te vinden is in het Docker-register.
- WERKDIR - reeksen /app directory als de werkdirectory.
- KOPIËREN pakket*.json./ - instrueert Docker om alle bestanden met die bestandsnaamindeling van de huidige map naar de /app map.
- LOOP - voert uit en bouwt het imago op.
- KOPIËREN.. - kopieert de bronbestanden naar het /app map.
- BLOOTSTELLEN - dit instrueert Docker om een poort binnen de container bloot te stellen aan de externe omgeving, in dit geval de hostmachine.
- CMD - specificeert de opdracht die moet worden uitgevoerd wanneer de Docker-container wordt gemaakt op basis van de afbeelding.
Maak het Docker Compose-bestand
Om ervoor te zorgen dat de Node.js-toepassing communiceert met de PostgreSQL-instantie van Docker, moeten de twee toepassingen in Docker-containers binnen dezelfde netwerkomgeving worden uitgevoerd.
Om deze reden moet u zowel de afbeelding van de toepassing als de PostgreSQL-instantie definiëren en bouwen met behulp van Docker opstellen — een tool waarmee u meerdere Docker-containers kunt bouwen en beheren.
Simpel gezegd, met behulp van een Docker Compose kunt u de services waaruit uw applicatie bestaat als een enkele eenheid definiëren, in dit geval de Node.js REST API en de PostgreSQL-database.
Maak een nieuw bestand aan, docker-compose.yml, in de hoofdmap en voeg de onderstaande code toe:
versie:'3.9'
Diensten:
server:
bouwen:.
poorten:
-'5000:5000'
hangt af van:
-db
DB:
afbeelding:'postgres'
poorten:
-'4321:5432'
omgeving:
POSTGRES_PASSWORD:'mijnwachtwoord123'
POSTGRES_USER:'testGebruiker'
volumes:
-data:/var/lib/postgresql/data
volumes:
gegevens:
Met deze code worden twee Docker-containers gemaakt en uitgevoerd. De eerste houder, server, gebruikt Docker Compose de Dockerfile om de image voor deze container te bouwen.
Het specificeert ook dat de servercontainer afhankelijk is van de db container. Betekenis, de server container moet worden gestart na de db container om ermee te verbinden.
De tweede container is een PostgreSQL-databasecontainer. U hoeft geen Dockerfile voor deze container op te geven, omdat deze wordt gemaakt op basis van de PostgreSQL-afbeelding in het afbeeldingsregister van Docker.
Bouw de Docker-afbeeldingen
Gebruik de opdracht Docker Compose om de installatiekopieën te maken en de twee containers te starten.
docker-samenstellen up -d
U zou een soortgelijk antwoord moeten zien nadat het proces met succes is voltooid.
Test de REST-API
Voer de onderstaande opdracht uit om de REST API in de Docker-container te testen. Het zou een tabel moeten maken in de PostgreSQL-database.
docker exec docker_node-server-1 npm run migreren
Je zou een soortgelijk antwoord moeten zien.
De Docker-afbeeldingen delen
De laatste stap is het pushen van de Docker-image voor uw Node.js-toepassing naar Docker Hub. Dit is vergelijkbaar met het pushen van uw projecten naar GitHub.
- Ga naar Docker-hub en meld u aan voor een account en log in op het gebruikersdashboard.
- Klik vervolgens op Maak een opslagplaats. Geef de naam van uw repository op en stel de zichtbaarheid in op een van beide Openbaar of Privaat en klik dan Creëren.
- Om de Docker-image van uw applicatie naar Docker Hub te pushen, moet u eerst inloggen op uw account via de terminal en vervolgens uw gebruikersnaam en wachtwoord opgeven.
havenarbeider inloggen
- Werk vervolgens de naam van uw Docker-afbeelding bij zodat deze overeenkomt met deze indeling:
/ . Voer de onderstaande opdracht uit om deze wijziging aan te brengen:
docker-tag /
- Duw ten slotte uw Docker-afbeelding.
havenarbeider duwen /< repo-naam>
Docker gebruiken in ontwikkeling
Deze gids ging slechts in op een fractie van het potentieel dat Docker kan bieden. U kunt nu echter de containerisatietechnologie van Docker gebruiken om elke toepassing en al zijn afhankelijkheden als afbeeldingen die kunnen worden ingezet in verschillende ontwikkelings- en productieomgevingen zoals de cloud zonder enige hik.