Zusammenfassung des Docker-Verständnisses für Anfänger do ~ Docker-Compose ~

Einführung

Ich habe endlich angefangen, Docker zu lernen, also werde ich mein Verständnis zusammenfassen.

Beachten Sie, was Sie heute gelernt haben

Starten Sie einen Container, der express in node.js ausführt. Ich habe genau das mit Docker-Compose gemacht.

スクリーンショット 2020-10-22 11.29.14.png

Bereiten Sie sich zunächst vor Ort vor

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. スクリーンショット 2020-10-22 11.49.29.png

Dockerfile vorbereiten

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.

Docker-compose.yml vorbereiten

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-komponieren und fertig

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

スクリーンショット 2020-10-22 13.30.27.png

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.

Schließlich

Ich habe die Grundlagen während der Grundlagen zusammengefasst. Vielen Dank.

Recommended Posts

Zusammenfassung des Docker-Verständnisses für Anfänger do ~ Docker-Compose ~
Zusammenfassung des Docker-Verständnisses für Anfänger do ~ Docker-Run -p ~
Zusammenfassung des Docker-Verständnisses für Anfänger ③ ~ Bis die API mit nginx ~ als Proxy erstellt wird
Zusammenfassung des Docker-Verständnisses für Anfänger Until ~ Bis zur Bereitstellung eines Docker-Containers auf einer EC2-Instanz ~
Zusammenfassung des Docker-Verständnisses für Anfänger ④ ~ Bis die EC2-Instanz gestartet und der Docker installiert ist ~
[Java] Anfängerverständnis von Servlet-②
[Java] Anfängerverständnis von Servlet-①
Objektorientierte Zusammenfassung von Anfängern (Java)
[Für Anfänger] Zusammenfassung des Java-Konstruktors
[Rails] Einführung von Rubocop durch Anfänger
Zusammenfassung häufig verwendeter Docker-Befehle
Zusammenfassung der einfachen Funktionen von Bootstrap für Anfänger
[Docker] Einführung in Docker Compose Grundlegende Zusammenfassung von Docker-Compose.yml
Zusammenfassung der Grundkenntnisse von Rails, die von progate erworben wurden
Docker-Befehlsübersicht
Zusammenfassung der häufig verwendeten Befehle in Rails und Docker
[Java] Grundlegende Zusammenfassung von Java, die nicht von Progate abgedeckt wird ~ Teil 1 ~
Gewichtsreduzierung des Docker-Images durch mehrstufige Build-React-Anwendung
Zusammenfassung der Revisionen (neue Yuan-Probleme) nach Java-Version
Einführung von Docker - Teil 1--
Zusammenfassung der OpenJDK-Quellen
JAR-Datei Übersicht
Liste der Anfänger (Liste) Memo
Zusammenfassung zur Informationssicherheit
Zusammenfassung der Verwendung von FragmentArgs
Docker Compact Manual (3: Docker-Compose)
Docker Befehl persönliche Zusammenfassung
Zusammenfassung der Verwendung von DBFlow
Zusammenfassung der Java-Unterstützung 2018
Liste der Anfänger (Liste) Memo
[Java] Anfängerverständnis von Servlet-②
[Java] Anfängerverständnis von Servlet-①
[Für Anfänger] Zusammenfassung des Java-Konstruktors
[Rails] Einführung von Rubocop durch Anfänger
Zusammenfassung des Docker-Verständnisses für Anfänger do ~ Docker-Compose ~
Die Geschichte von RxJava, das unter NoSuchElementException leidet
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Erklärung von Ruby auf Schienen für Anfänger ①
Installieren Sie, indem Sie die Version von Django in der Docker-Umgebung angeben
[Java] Grundlegende Zusammenfassung von Java, die nicht von Progate abgedeckt wird ~ Teil 2 ・ Liste ~
Empfehlung der Set-Operation durch Java (und Verständnis von Equals und HashCode)
[Zusammenfassung der technischen Bücher] Zusammenfassung der Lektüre "Lernen Sie Docker aus den Grundlagen"
Zusammenfassung der von der Spliterator-Merkmalsmethode #java zurückgegebenen Werte