Bildkomposition abgeschlossen nodoDocker (Stammverzeichnis)
Dockerfile: Datei zum Erstellen eines Anwendungscontainers (node.js)
app.env: Eine Datei, die die Verbindungseinstellungen mit MySQL beschreibt
docker-compose.yml: yml, das den Container node.js und den MySQL-Container verwaltet
src: Antragsstelle
Erstellen Sie zunächst einen temporären Container für die Anwendung und eine Vorlage für die Anwendung. Die Vorlage der Anwendung wird auf der Hostseite bereitgestellt, und die Docker-Komposition wird mithilfe der Vorlage erstellt.
Unter nodeDocker Erstellen Sie docker-compose.yml
docker-compose.yml
version: '3'
services:
app:
#Geben Sie das zu bootende Image an (hier Knoten.Offizielles Bild von js v12)
image: node:12
#Umgebungsvariablen festlegen
environment:
- DEBUG=app:*
tty: true
#Host-seitiger Port:Containerhafen
ports:
- '3000:3000'
#Hängen Sie den Ordner ein, in dem der Quellcode gespeichert ist
#(Auf der Host-Seite./src des Containers/Auf App montieren)
volumes:
- ./src:/app
#Geben Sie beim Start den aktuellen Ordner an
working_dir: /app
#Geben Sie den Befehl an, der nach dem Start ausgeführt werden soll
command: npm start
Gastgeber.
#Starten Sie den Container vorübergehend (--Löschen, nachdem Sie mit rm angehalten haben. Geben Sie nach dem Starten des Containers bash ein.
docker-compose run --rm app /bin/bash
Container.
# express-Anwendungsvorlage mit Generator generieren
npx express-generator
#Installieren Sie abhängige Pakete
npm install
#Verlassen Sie den Container (dieser temporäre Container wird gelöscht)
exit
docker-compose.yml
volumes:
- ./src:/app
Entsprechend dieser Beschreibung. (Das Verzeichnis, in dem sich docker-compose.yml befindet. Das heißt, es wird im Verzeichnis src unter dem Verzeichnis nodoDocker bereitgestellt, sodass die im Verzeichnis src auf der Hostseite erstellte Vorlage erhalten bleibt.
Starten Sie den Container
host.
docker-compose up
docker-compose.yml
command: npm start
Gemäß der Beschreibung in wird die Anwendung Express.js nach dem Start des Containers automatisch gestartet. http://localhost:3000/ Bestätigen mit.
Stoppen Sie den Behälter
host.
#Starten Sie den Container vorübergehend erneut
docker-compose run --rm app /bin/bash
#Installieren Sie ein Tool namens "nodemon", das Änderungen im Quellcode erkennt und die Anwendung bei Bedarf neu startet.
#Sie müssen den Container nicht jedes Mal anhalten und neu starten, wenn Sie eine Änderung vornehmen.
npm install -D nodemon
Package.json behoben
src/package.json
"scripts": {
"dev": "nodemon ./bin/www",
"start": "node ./bin/www"
},
Bearbeiten Sie die Datei docker-compose.yml
docker-compose.yml
(Vorher ändern)
command: npm start
(Nach der veränderung)
command: npm run dev
Mysql-Einstellungen zu docker-compose.yml hinzugefügt
docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
env_file: ./mysql/mysql.env
#Einstellungen für Umgebungsvariablen. Stellen Sie die Zeitzone auf japanische Zeit ein.
environment:
- TZ=Asia/Tokyo
ports:
- '3306:3306'
volumes:
#Überschreiben Sie die MySQL-Standardkonfigurationsdatei.:Schreibgeschützte Einstellung von der Containerseite mit ro.
- ./mysql/conf:/etc/mysql/conf.d/:ro
#Durch das Mounten auf mysqldata bleiben die Daten auch dann erhalten, wenn der Container gelöscht wird.
- mysqldata:/var/lib/mysql
networks:
- backend
app:
image: node:12
env_file: ./app.env
#Einstellungen für Umgebungsvariablen. Stellen Sie die Zeitzone auf japanische Zeit ein.
environment:
- TZ=Asia/Tokyo
- DEBUG=app:*
tty: true
ports:
- '3000:3000'
volumes:
- ./src:/app
working_dir: /app
command: npm run dev
networks:
- backend
#Da dies von MySQL abhängt, wird der App-Container nach dem Erstellen des MySQL-Containers erstellt.
depends_on:
- mysql
networks:
backend:
volumes:
mysqldata:
Erstellen Sie my.conf (befindet sich in /etc/mysql/conf.d/ auf der Containerseite)
mysql/conf/my.conf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqldump]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
lower_case_table_names=1
# Enable access from the host machine.
bind-address=0.0.0.0
Erstellen Sie eine mysql.env-Datei im mysql-Ordner. (Env_file: Der Inhalt wird in der Umgebungsvariablen mysql auf der Containerseite durch die Beschreibung von ./mysql/mysql.env festgelegt.)
mysql/mysql.env
MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=(Root-Passwort)
MYSQL_USER=(Nutzername)
MYSQL_PASSWORD=(Passwort)
MYSQL_DATABASE=todo
Erstellen Sie die Datei app.env (Einstellungen für Umgebungsvariablen für Anwendungscontainer).
app.env
MYSQL_SERVER=mysql
MYSQL_USER=(Nutzername)
MYSQL_PASSWORD=(Passwort)
MYSQL_DATABASE=todo
docker-compose.yml
version: '3'
services:
mysql:
image: mysql:5.7
env_file: ./mysql/mysql.env
environment:
- TZ=Asia/Tokyo
ports:
- '3306:3306'
volumes:
- ./mysql/conf:/etc/mysql/conf.d/:ro
- mysqldata:/var/lib/mysql
networks:
- backend
app:
image: node:12
env_file: ./app.env
environment:
- TZ=Asia/Tokyo
- DEBUG=app:*
tty: true
ports:
- '3000:3000'
volumes:
- ./src:/app
working_dir: /app
command: npm run dev
networks:
- backend
depends_on:
- mysql
#Erstellen Sie ein Netzwerk zur Verwendung. Docker-Im Falle von Compose wird der Name unter Verwendung des unter Dienst stehenden Namens aufgelöst, sodass App und MySQL automatisch verbunden werden.
networks:
backend:
volumes:
mysqldata:
Melden Sie sich bei MySQL an
host.
docker-compose exec mysql mysql -uroot -p
Kann nicht,,,
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Ergebnisse verschiedener Studien
host.
docker-compose down --volumes
Nach dem Löschen des Volumes konnte ich mich anmelden. Die Ursache ist unbekannt.
Platzieren Sie die Docker-Datei, die die Installation beschreibt, direkt unter dem Stammverzeichnis, um ejs für die Template-Engine zu verwenden.
#node.Ziehen Sie das Bild von js.
FROM node:12
#Machen Sie aus Ihrem Arbeitsverzeichnis ein Anwendungsverzeichnis.
WORKDIR /src
Installieren Sie ejs.
RUN npm install ejs
Behoben, weil der Anwendungscontainer mit Dockerfile erstellt wurde (ursprünglich ziehender Knoten: 12 Image)
docker-compose.yml
(Vorher ändern)
image: node:12
(Nach der veränderung)
build: .
Vorerst abgeschlossen.
Recommended Posts