Dockeriseerige oma Node.js REST API, kasutades Dockeri konteinertehnoloogiat, mis lihtsustab juurutamise ja haldamise protsessi.

Rakenduste juurutamine ja käitamine erinevates keskkondades võib olla tülikas, kuna tuleb arvestada mitmete teguritega näiteks keskkonnamuutujate seadistamine vajalike sõltuvuste ja erinevate tarkvarapakettide konkreetsete versioonide konfigureerimiseks.

Kuid kasutades Dockeri konteinertehnoloogiat, saate minimaalse pingutusega juurutada rakendusi erinevates keskkondades koos kõigi Dockeri kujutise vajalike sõltuvustega. See tähendab, et te ei pea muretsema konfiguratsiooni tegemise pärast. See muudab rakenduste juurutamise ja käitamise erinevates keskkondades imelihtsaks.

Mis on Docker?

Docker on arendusplatvorm, mis pakub tööriistu ja keskkonda rakenduste pakendamiseks kaasaskantavate piltidena, mida saab kasutada konteinerites iseseisvate käivitatavate komponentidena.

Need konteinerid moodustavad rakenduse koodi ja vajalikud sõltuvused, et rakendus saaks edukalt töötada erinevates käituskeskkondades ilma probleemideta.

instagram viewer

Enne alustamist installige Docker oma kohalikku arvutisse. Kontrollige ametlikust dokumentatsioonist platvormipõhiseid eeltingimusi ja paigaldusjuhiseid.

Looge Node.js REST API

Alustamiseks luua Node.js veebiserver.

Selle rakenduse koodi leiate sellest GitHubi hoidla.

Järgmisena installige selle projekti jaoks vajalikud paketid.

npm install morgan pg knex

The lk paketti kasutatakse ühenduse loomiseks PostgreSQL-i andmebaasiga. knexteisest küljest pakub PostgreSQL-iga suhtlemiseks lihtsat API-d – kasutate seda SQL-päringute kirjutamiseks.

Lõpuks kasutate morgan, vahevara, mis logib konsooli HTTP-päringuid ja vastuseid, et siluda ja jälgida Dockeri konteineris töötavat rakendust.

Lõpuks avage index.js faili ja lisage selle alla kood rakendab lihtsat REST API-t kolme marsruudiga.

konst väljendada = nõuda("väljendama")
konst morgan = nõuda("morgan")
konst rakendus = express()
konst db = nõuda('./db')
konst PORT = process.env. PORT || 5000

app.use (morgan('dev'))
app.use (express.json())
app.use (express.urlencoded({ pikendatud: tõsi }))

app.get('/', (req, res) => res.send('Tere, Maailm!' ))

app.get('/kasutajad', asünkr (req, res) => {
konst kasutajad = ootama db.select().from("kasutajad")
res.json (kasutajad)
})

app.post('/kasutajad', asünkr (req, res) => {
konst kasutaja = ootama db("kasutajad").insert({ nimi: req.body.name }).returning('*')
res.json (kasutaja)
})

app.listen (PORT, () => konsool.log(`Server PORTis:${PORT}`))

Andmebaasiühenduse konfigureerimine

REST API suhtleb Dockeri PostgreSQL-i eksemplariga, kuid esmalt peate oma rakenduses konfigureerima andmebaasiühenduse. Looge oma projektikausta juurkataloogis a db.js faili ja lisage allolev kood.

konst knex = nõuda('knex')
moodul.exports = knex({
klient: 'postgres',
ühendus: {
host: 'db',
kasutaja: 'testUser',
parool: "mypassword123",
andmebaas: 'testUser',

},
})

Seadistage failid migrate.js ja seed.js

Need kaks faili võimaldavad luua andmebaasis tabeli ja täita selle API kaudu testandmetega. Looge uus kaust, skriptid, oma projekti juurkataloogis ja lisage kaks faili: migrate.js ja seed.js.

Aastal migrate.js faili, lisage allolev kood:

konst db = nõuda("../db");
(asünkr () => {
proovi {
ootama db.schema.dropTableIfExists("kasutajad")
ootama db.schema.withSchema('avalik').createTable("kasutajad", (tabel) => {
table.increments()
table.string('nimi')
})
konsool.log("Loodud kasutajate tabel!")
process.exit(0)
} püüda (err) {
konsool.log (viga)
process.exit(1)
}
})()

See kood loob a kasutajad tabel automaatselt suureneva ID veeruga ja a nimi veerus andmebaasis.

Järgmisena seed.js faili, lisage allolev kood:

konst db = nõuda("../db");
(asünkr () => {
proovi {
ootama db("kasutajad").insert({ nimi: "Testi kasutaja1" })
ootama db("kasutajad").insert({ nimi: "Testi kasutaja2" })
konsool.log("Lisatud fiktiivsed kasutajad!")
process.exit(0)
} püüda (err) {
konsool.log (viga)
process.exit(1)
}
})()

See kood rakendab asünkroonset funktsiooni, mis lisab kaks kasutajat PostgreSQL-i andmebaasi.

Lõpuks lisage need käsud oma package.json faili.

"skriptid": {
"alusta": "node index.js",
"rändama": "node scripts/migrate.js",
"seeme": "node scripts/seed.js"

},

Kuna teil pole klienti konfigureeritud, peate API testimiseks käivitama kaks faili skriptidena koos npm jooks käsk.

Dockeri faili seadistamine

Dockerfile määratleb juhised, mida Dockeri mootor nõuab Dockeri kujutise loomiseks. Looge oma projekti juurkataloogis uus fail ja nimetage see, Dockerfile. Seejärel lisage rakenduse Node.js jaoks Dockeri kujutise loomiseks järgmised juhised.

FROM sõlm:16.3.0- alpi 3.13
TÖÖDIREKTOR /app
KOPERI pakett*.json ./
JOOKSE npm installimine
KOPERI. .
AVALDA8000
CMD [ "sõlm", "index.js" ]

Jagame selle lahti:

  • FROM - See juhend määrab rakenduse baaskujutise, milleks on Node.js Alpine pilt, mis on Dockeri registrist leitav Node.js-i kujutise kerge versioon.
  • TÖÖDIREKTOR - komplektid /app kataloog töökataloogina.
  • KOPERI pakett*.json./ - annab Dockerile korralduse kopeerida kõik selle failinimevorminguga failid praegusest kataloogist kataloogi /app kausta.
  • JOOKSE - teostab ja loob pildi.
  • KOPERI.. - kopeerib lähtefailid faili /app kausta.
  • AVALDA - see annab Dockerile korralduse avaldada konteineris olev port väliskeskkonnale, antud juhul hostmasinale.
  • CMD - määrab pildist Dockeri konteineri loomisel käivitatava käsu.

Looge Dockeri koostamisfail

Et rakendus Node.js saaks suhelda Dockeri PostgreSQL-i eksemplariga, peavad need kaks rakendust töötama Dockeri konteinerites samas võrgukeskkonnas.

Sel põhjusel peate määratlema ja koostama nii rakenduse kujutise kui ka PostgreSQL-i eksemplari Docker Compose — tööriist, mis võimaldab luua ja hallata mitut Dockeri konteinerit.

Lihtsamalt öeldes saate Docker Compose'i abil määratleda teenused, mis moodustavad teie rakenduse ühe üksusena, antud juhul Node.js REST API ja PostgreSQL andmebaasi.

Looge uus fail, docker-compose.yml, juurkataloogis ja lisage allolev kood:

versioon:'3.9'

teenused:
server:
ehitada:.
pordid:
-'5000:5000'
sõltub:
-db
db:
pilt:'postgres'
pordid:
-'4321:5432'
keskkond:
POSTGRES_PASSWORD:"mypassword123"
POSTGRES_USER:'testUser'
mahud:
-andmed:/var/lib/postgresql/data

mahud:
andmed:

See kood loob ja käitab kaks Dockeri konteinerit. Esimene konteiner, server, kasutab Docker Compose selle konteineri pildi koostamiseks Dockeri faili.

Samuti täpsustatakse, et serveri konteiner sõltub db konteiner. See tähendab, server konteiner tuleb käivitada pärast db konteiner sellega ühendamiseks.

Teine konteiner on PostgreSQL-i andmebaasi konteiner. Te ei pea selle konteineri jaoks Dockeri faili määrama, kuna see luuakse Dockeri pildiregistris olevast PostgreSQL-pildist.

Ehitage Dockeri pildid

Kasutage piltide koostamiseks ja kahe konteineri käivitamiseks käsku Docker Compose.

dokkija-koostama üles -d

Pärast protsessi edukat lõpetamist peaksite nägema sarnast vastust.

Testige REST API-t

Käivitage allolev käsk, et testida Dockeri konteineris töötavat REST API-d. See peaks looma PostgreSQL-i andmebaasis tabeli.

docker exec docker_node-server-1 npm run migrate

Peaksite nägema sarnast vastust.

Dockeri piltide jagamine

Viimane samm on teie Node.js-i rakenduse Dockeri kujutise edastamine Docker Hubi. See sarnaneb oma projektide GitHubisse lükkamisega.

  • Suunduge poole Dockeri jaotur ja registreerige konto ja logige sisse kasutaja armatuurlauale.
  • Järgmisena klõpsake nuppu Loo hoidla. Sisestage oma hoidla nimi ja määrake selle nähtavus Avalik või Privaatne ja seejärel klõpsake Loo.
  • Rakenduse Dockeri kujutise Docker Hubi edastamiseks peate esmalt terminali kaudu oma kontole sisse logima ning seejärel sisestama oma kasutajanime ja parooli.
dokkeri sisselogimine
  • Järgmisena värskendage oma Dockeri pildi nime, et see vastaks sellele vormingule: /. Selle muudatuse tegemiseks käivitage allolev käsk:
 doki silt /
  • Lõpuks lükake oma Dockeri pilt.
 dokki tõuge /< repo nimi>

Dockeri kasutamine arenduses

See juhend puudutas vaid murdosa Dockeri potentsiaalist. Nüüd saate aga kasutada Dockeri konteinertehnoloogiat mis tahes rakenduse ja kõigi selle sõltuvuste pakendamiseks pildid, mida saab juurutada erinevates arendustes, aga ka tootmiskeskkondades, nagu pilv, ilma selleta luksumine.