Käytä Dockeria ja Docker Composea Nest.js-sovellusten saumaiseen käyttöönottamiseksi ja suorittamiseksi.

"Mutta se toimii minun tietokoneellani..." kehittäjävitsi korostaa täydellisesti sovellusten käyttöönoton ja suorittamisen haastetta eri järjestelmissä.

Todellinen vaiva on tarvittavien riippuvuuksien määrittäminen ja ohjelmistoversioiden yhteensopivuuden varmistaminen sovelluksesi kanssa. Loistava ratkaisu tähän ongelmaan on konttiteknologian, kuten Dockerin, käyttö.

Sen avulla voit vaivattomasti ottaa käyttöön ja suorittaa sovelluksia – kaikilla tarvittavilla riippuvuuksilla – säilövedoksen sisällä. eliminoi tuotantojärjestelmien laajan konfiguroinnin tarpeen.

Dockerin ja Docker Composen ymmärtäminen

Satamatyöläinen on avoimen lähdekoodin kehitysalusta, joka tarjoaa rakennus- ja pakkaussovelluksissa käytettävää konttiteknologiaa niiden riippuvuuksien ohella kannettavina kuvina.

Nämä kuvat ajetaan sitten suoritettavina komponentteina eristetyissä säiliöympäristöissä. Sovellusten käyttäminen näissä säilöissä takaa tasaisen sovellusten suorituskyvyn eri tuotantojärjestelmissä ilman yhteensopivuusongelmia.

instagram viewer

Toisaalta, Docker Compose on työkalu jota käytetään yhdessä Dockerin kanssa monisäilösovellusten määrittelyn ja hallinnan yksinkertaistamiseksi.

Vaikka Dockeria käytetään ensisijaisesti yksittäisten säilöjen hallintaan, Docker Compose antaa sinun hallita useiden säilöjen määrityksiä, jotka on toimittava yhtenä sovelluksena.

Tämä on erityisen hyödyllistä, kun sovellus koostuu useista palveluista, joiden on toimittava yhdessä, kuten useista riippuvaisista API-palveluista ja tietokannoista.

Ennen kuin sukellat koodiin, sinun on asennettava Dockerin työpöytä paikallisella koneellasi. Käy läpi järjestelmäkohtaiset vaatimukset ja asennusvaiheet virallisesta dokumentaatiosta.

Löydät tämän sovelluksen koodin siitä GitHub arkisto.

Määritä Nest.js-projekti

Tämä opas opastaa sinua luomaan kaksi Docker-säiliötä, jotka toimivat saumattomasti yhtenä Nest.js-sovelluksena. Ensimmäinen säilö sisältää Nest.js-verkkopalvelimen Docker-kuvan esiintymän, kun taas toinen säilö suorittaa Dockerin PostgreSQL-tietokantakuvan.

Aloita asentamalla Nest.js-komentorivityökalu:

npm i -g @nestjs/cli

Luo nyt uusi Nest.js-projekti suorittamalla alla oleva komento päätteessäsi.

nest new docker-nest-app

Seuraavaksi CLI-työkalu näyttää useita paketinhallintaohjelmia, joista voit valita projektin luomiseksi. Valitse haluamasi vaihtoehto. Tässä tapauksessa käytämme npm, Node Package Manager.

Lopuksi voit navigoida projektihakemistoon ja pyörittää kehityspalvelinta.

cd docker-nest-app
npm run start

Luo tietokantamoduuli

Asenna ensin nämä riippuvuudet:

npm install pg typeorm @nestjs/typeorm @nestjs/config

Luo seuraavaksi projektisi juurihakemistoon a .env tiedosto ja lisää seuraavat tietokantayhteyden määritysarvot:

DATABASE_HOST="db"
DATABASE_PORT=5432
DATABASE_USER="testUser"
DATABASE_PASSWORD="mypassword123"

Lopuksi jatka ja luo tietokantamoduuli.

nest g module database

Nyt, kun moduuli on luotu, avaa tietokanta/database.module.ts tiedosto ja sisällytä seuraava tietokannan määrityskoodi:

import { Module } from'@nestjs/common';
import { TypeOrmModule } from'@nestjs/typeorm';
import { ConfigModule, ConfigService } from'@nestjs/config';

@Module({
imports: [
ConfigModule.forRoot(),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
type: 'postgres',
host: configService.get<string>('DATABASE_HOST'),
port: configService.get<number>('DATABASE_PORT'),
username: configService.get<string>('DATABASE_USER'),
password: configService.get<string>('DATABASE_PASSWORD'),
synchronize: true,
}),
inject: [ConfigService],
}),
],
})

exportclass DatabaseModule {}

Kun olet määrittänyt Docker PostgreSQL -kuvan käyttämällä tätä TypeORM-kokoonpanoa, Nest.js-sovellus muodostaa yhteyden tietokantaan.

Päivitä tiedosto app.module.ts

Päivitä lopuksi pääsovellusmoduulitiedosto sisältämään tietokantamoduulin määritykset.

import { Module } from'@nestjs/common';
import { ConfigModule } from'@nestjs/config';
import { AppController } from'./app.controller';
import { AppService } from'./app.service';
import { DatabaseModule } from'./database/database.module';

@Module({
imports: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
DatabaseModule,
],
controllers: [AppController],
providers: [AppService],
})

exportclass AppModule {}

Määritä Docker-tiedosto

Docker-tiedosto kaappaa vaaditut ohjeet, joita Docker-moottori tarvitsee Docker-kuvan luomiseen. Tämä kuva sisältää sovelluksen lähdekoodin ja kaikki sen riippuvuudet.

Luo projektisi juurihakemistoon uusi tiedosto ja nimeä se Dockerfile. Lisää sitten seuraava sisältö:

FROM node:16.3.0-alpine3.13
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY. .
RUN npm run build
CMD [ "npm", "run", "start: dev" ]

Tässä on mitä kukin komento edustaa:

  1. FROM: Tämä ohje määrittää peruskuvan, jota Dockerin tulee käyttää sovelluksen kuvan rakentamiseen.
  2. TYÖOHJ: Tämä komento kehottaa Dockeria asettamaan /app hakemistosta säilön sisällä olevan sovelluksen työhakemistona.
  3. KOPIOpaketti*.json./: Kopioi kaikki kyseisessä tiedostomuodossa olevat tiedostot sovelluksen nykyisestä hakemistosta hakemistoon sovellus kansio.
  4. RUN npm asennus: Tämä komento asentaa Docker-säilöön sovelluksen vaatimat paketit ja riippuvuudet.
  5. KOPIO. .: kehottaa Dockeria kopioimaan kaikki sovelluksen lähdekooditiedostot nykyisestä hakemistosta hakemistoon /app kansio.
  6. RUN npm run build: Komento rakentaa Nest.js-sovelluksen ennen Docker-kuvan luomista. Se kokoaa TypeScript-koodin JavaScriptiksi ja tallentaa rakennusprosessin tulosteen a dist hakemistosta.
  7. CMD: Määrittää komennon, joka suoritetaan, kun säilö käynnistyy. Tässä tapauksessa suoritamme npm ajon aloitus: dev komento, joka käynnistää palvelimen kehitystilassa.

Tämän kokoonpanon avulla sovellus voi seurata aktiivisesti koodimuutoksia. Kun muutokset havaitaan, kontti rakennetaan automaattisesti uudelleen.

Luo Docker Compose -tiedosto

Luo uusi projektikansiosi juurihakemistoon docker-compose.yml tiedosto ja lisää seuraava sisältö:

version:'3.9'

services:
server:
build:.
ports:
-'3000:3000'
depends_on:
-db
db:
image:'postgres'
ports:
-'5432:5432'
environment:
POSTGRES_PASSWORD:'mypassword123'
POSTGRES_USER:'testUser'
volumes:
-data:/var/lib/postgresql/data

volumes:
data:

Docker Compose käyttää näitä ohjeita kahden kuvan rakentamiseen ja suorittamiseen kahdessa Docker-säiliössä. Ensimmäinen säilö, palvelin, isännöi sovelluksen kuvaa; toimii portissa 3000.

Toinen säilö isännöi PostgreSQL-tietokantakuvaa. Sinun ei tarvitse määrittää Docker-tiedostoa tälle kuvalle – Docker käyttää Dockerin kuvarekisterissä jo olemassa olevaa PostgreSQL-otosta sen rakentamiseen.

Käynnistä Docker Containers

Jatka lopuksi kuvien rakentamista ja käynnistä säilöt suorittamalla seuraava komento:

docker compose up

Kun prosessi on suoritettu onnistuneesti, sinun pitäisi nähdä samanlaiset lokitiedot päätteessäsi.

Nyt kun sekä verkkopalvelimesi että tietokantasäilösi ovat käynnissä ja käynnissä, voit lisätä enemmän toimintoja Nest.js-sovellukseesi. Voit esimerkiksi rakentaa Nest.js CRUD REST -sovellusliittymä.

Docker-kuvien työntäminen Docker Hubiin

Docker-kuvien työntäminen Docker Hubiin on melkein samanlaista kuin projektien työntäminen GitHubiin. Työnnä Nest.js-sovelluksen Docker-kuva Docker Hubiin noudattamalla näitä ohjeita.

  1. Suuntaa kohti Docker Hub, rekisteröidy ja kirjaudu sisään tilisi yleiskatsaussivulle.
  2. Klikkaa Luo arkisto -painiketta, täytä arkistosi nimi, määritä sen näkyvyys valitsemalla jompikumpi Julkinen tai Yksityinenja napsauta sitten Luoda.
  3. Nyt sinun on kirjauduttava tilillesi päätteen kautta suorittamalla alla oleva komento ja annettava sitten Docker-käyttäjänimesi ja salasanasi.
    docker login
  4. Päivitä seuraavaksi Dockerin kuvan nimi vastaamaan tätä muotoa: / suorittamalla alla oleva komento.
    docker tag /
  5. Työnnä lopuksi Docker-kuva.
    docker push /

Dockerin konttiteknologian hyödyntäminen kehitystyössä

Dockerin konttiteknologian avulla voit niputtaa sovelluksen ja kaikki sen riippuvuudet Docker-kuviin. Nämä kuvat voivat sitten toimia sujuvasti konteissa eri kehitys- ja tuotantoympäristöissä ilman ongelmia.