Ich habe endlich angefangen, Docker zu lernen, also werde ich mein Verständnis zusammenfassen.
Starten Sie einen Container, der express in node.js ausführt. Ich habe genau das mit Docker-Compose gemacht.
cd ~
mkdir sample && cd sample
yarn init -y
yarn add express
touch index.js
index.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello').status(200);
});
app.listen(3000, () => {
console.log('Listening on port 3000');
});
node index.js
Wenn Sie den Befehl curl lokal drücken, erhalten Sie natürlich eine Antwort.
curl http://localhost:3000
Hello
Vorerst werde ich die aktuelle Situation darstellen. Vorerst.
So erstellen Sie ein Docker-Image von node.js siehe hier. Diese Zeit ist Kopie. Erstellen Sie die folgende Docker-Datei direkt unter dem Beispielverzeichnis.
Dockerfile
FROM node:alpine
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
# package.Ich möchte nicht npm installieren, nachdem ich json jedes Mal kopiert habe, wenn ich baue.
#KOPIEREN Sie daher nach Abschluss des obigen Vorgangs. .Tu es.
#Dann wird der Build nur für den Teil ausgeführt, in dem der Code geändert wird.
EXPOSE 3000
CMD [ "node", "index.js" ]
Und da es schmerzhaft ist, wenn node_modules auch kopiert wird, erstellen Sie auch .dockerignore
.
touch .dockerignore
echo 'node_modules' >> .dockerignore
Übrigens, wenn Sie so weit kommen, müssen Sie Docker-Compose nicht separat verwenden.
docker build -t app .
docker run -p 3000:3000 app
Wenn Sie dies tun, wird der Container gestartet. Starten Sie diesmal den Container mit Docker-Compose, anstatt den obigen Befehl zu verwenden.
Erstellen Sie die folgende docker-compose.yml direkt unter dem Beispielverzeichnis.
docker-compose.yml
version: '3'
#Geben Sie 3 an, ohne an etwas zu denken
services:
#Beschreiben Sie Informationen zum Container. Wenn Sie hier mehrere Containerinformationen schreiben, können Sie mehrere Container gleichzeitig starten.
app:
#Starten Sie einen Container namens App (mit einem DNS-Namespace).
build:
#Informationen zum Zeitpunkt der Erstellung werden hier beschrieben. Wenn Sie eine Docker-Datei haben, können Sie darauf verweisen, andernfalls schreiben Sie sie direkt hier.
context: .
#Dieser Docker zur Build-Zeit-compose.Gleiches Verzeichnis wie yml (.) Siehe Dockerfile.
#Wenn mehrere Docker-Dateien vorhanden sind, müssen Sie die Verzeichnisse trennen und im Kontext angeben oder ihre Namen als docokerfile angeben: XXX.
container_name: express-app
#Geben Sie ihm einen beliebigen Containernamen. Mit diesem Containernamen können Sie mit dem folgenden Befehl auf den Container zugreifen
# docker exec -it express-app sh
ports:
- '3000:3000'
# docker run -p 3000:Es hat die gleiche Bedeutung wie 3000.
volumes:
- './:usr/src/app'
#Aktuelles Verzeichnis des lokalen PCs (./) Und der Container~/usr/src/Synchronisieren Sie das App-Verzeichnis
#Auch praktisch für die Entwicklung.
docker-compose up
startet den Container.
Wenn Sie den Befehl curl von Ihrem lokalen PC aus eingeben, erhalten Sie eine Antwort vom Container. Wie in der ersten Abbildung gezeigt.
curl http://localhost:3000
Hello
Machen Sie "Docker-Compose Down", um den Container zu stoppen. Wenn Sie den Inhalt von index.js
neu schreiben, erstellen Sie ihn mit docker-compose build
neu.
Wenn Sie "docker-compose up -d" ausführen, wird der Container im Hintergrund gestartet, aber zu diesem Zeitpunkt kann es schwierig sein, die "console.log" im Container zu sehen, daher gefällt mir der Vordergrund.
Ich habe die Grundlagen während der Grundlagen zusammengefasst. Vielen Dank.
Recommended Posts