
Wie Sie dem vorherigen Artikel entnehmen können, habe ich mit verschiedenen Projekten gearbeitet. Die ersten Tage in einem neuen Team verlaufen normalerweise genauso: Das Back-End sitzt bei mir und führt magische Aktionen aus, um die Anwendung zu installieren und bereitzustellen. Docker ist seitdem unverzichtbar für das Frontend Das Backend ist häufig auf einer Vielzahl von PHP / Java / Python / C # -Stacks geschrieben, und die Front muss nicht jedes Mal das Backend ablenken, um alles zu installieren und bereitzustellen. Nur an einer Stelle sah ich ein paar Docker-Jenkins mit einer transparenten Bereitstellung, Protokollen, die durch Selbsttests verfälscht wurden.
Es wurden viele detaillierte Artikel über Docker geschrieben. In diesem Artikel wird die Bereitstellung einer Einzelseitenanwendung mit VueJS / Vue Router, dem Serverteil als RESTful-API mit NodeJS und MongoDB als Datenbank beschrieben. Docker Compose wird zum Beschreiben und Ausführen mehrerer Containeranwendungen verwendet.
Warum brauche ich einen Hafenarbeiter?
Mit Docker können Sie den Prozess der Bereitstellung einer Anwendung automatisieren. Der Entwickler muss keine eigenen Programme mehr installieren, um die Inkompatibilität von Versionen auf seinem Computer zu beheben. Es reicht aus, Docker zu installieren und 1-2 Teams in die Konsole zu treiben. Dies ist unter Linux am bequemsten.
Erste Schritte
Installieren Sie
Docker und
Docker ComposeOrdnerstrukturWir erstellen 2 Ordner für Client- und Serveranwendungen. Eine Datei mit der Erweiterung .yml ist eine
Docker Compose- Konfiguration, in der Anwendungscontainer definiert und verknüpft werden.
Docker-compose.yml:
version: "3" services: mongo: container_name: mongo hostname: mongo image: mongo ports: - "27017:27017" server: build: server/
Wir erstellen 3 Dienste in Docker: für NodeJS, MongoDB und für Statics on Vue. Um den Client mit dem Server zu verbinden, wird
je nach Server hinzugefügt.
Links Mongo wird verwendet, um MongoDB mit der Server-API zu verknüpfen. Server-, Client-, Mongo-Service-Namen.
Client auf VueJS
Der Ordner
/ client enthält die Anwendung auf VueJS. Anwendung mit
Vue Cli erstellt . Beim Erstellen des Abbilds erstellt die Clientanwendung eine Reihe statischer Dateien im Ordner
/ dist . Dockerfile beschreibt eine Reihe von Befehlen zum Erstellen eines Images:
FROM node:10 WORKDIR /client COPY ./package*.json ./ RUN npm install RUN npm install -g http-server COPY . . RUN npm run build EXPOSE 8081 CMD ["npm", "test:dev"]
Bitte beachten Sie, dass package.json separat von den übrigen Projektdateien kopiert und installiert wird. Dies geschieht aus Gründen der Leistung, damit der Inhalt des Ordners / node_modules beim Neuerstellen zwischengespeichert wird. Jede Befehlszeile wird separat zwischengespeichert.
Wenn der Container gestartet wird, wird schließlich der Befehl
npm run dev
ausgeführt. Dieser Befehl wird in package.json beschrieben:
"scripts": { "test:dev": "http-server dist -p 8081 -c 1 --push-state" }
Um Dateien aus dem Ordner
/ dist auszuführen, wird der
http-server
global installiert und das Paket
spa-http-server
in dev-Abhängigkeiten eingerichtet, damit Vue Router ordnungsgemäß funktioniert. Das Flag –push-state leitet zu index.html weiter. Das Flag -c mit dem Wert 1 Sekunde wird hinzugefügt, damit der
HTTP-Server keine Skripts zwischenspeichert. Dies ist ein Testfall, bei einem realen Projekt ist es besser, Nginx zu verwenden.
Erstellen Sie im Vuex-Speicher das
apiHost: 'http://localhost:3000'
, in dem der NodeJS-Api-Port registriert ist. Der Client-Teil ist fertig. Jetzt gehen alle Anfragen vom Client an die Rückseite zu dieser URL.
NodeJS-Server-API
Erstellen
Sie im Ordner
/server
die
Dateien server.js und Dockerfile:
FROM node:10 WORKDIR /server COPY ./package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD ["node", "server.js"]
Server.js gibt die
URL für die Datenbank an
const url = 'mongodb://mongo:27017/';
. Wir erlauben domänenübergreifende Anfragen des Kunden:
const clientUrl = 'http://localhost:8081'; const corsOptions = { origin: clientUrl, optionsSuccessStatus: 200,
Fazit
Wechseln Sie nun in das Projektverzeichnis und führen Sie
docker-compose build
Images
docker-compose build
, und
docker-compose up
, um die Container zu starten. Der Befehl wird 3 Container
auslösen :
Server, Client, Mongo . Für einen Server auf NodeJS können Sie das Hot-Reload konfigurieren, indem Sie es dem Benutzerordner zuordnen. Der Client wird derzeit für die
lokale Ausführung mit Hot-Reload entwickelt, wobei
Server und
Mongo separat ausgeführt
werden . Um einen separaten Dienst zu starten, geben Sie einfach seinen Namen
docker-compose up client
. Denken Sie daran, manchmal Container, Netzwerke und Bilder zu
prune
und zu löschen, um Ressourcen freizugeben.
Den vollständigen Code finden Sie
hier . Das Projekt befindet sich noch in der Entwicklung.