[Road_node.js_1-1] Der Weg zum Erstellen der Node.js Express MySQL-Umgebung mit Docker

Bildkomposition abgeschlossen nodoDocker (Stammverzeichnis) a03c9651ffb5bba1c53532460a232639.png

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 einen Container für Ihre Anwendung

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

Container für MySQL hinzufügen

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

[Road_node.js_1-1] Der Weg zum Erstellen der Node.js Express MySQL-Umgebung mit Docker
So erstellen Sie mit Docker ~ Express ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So erstellen Sie mit Docker ~ MySQL ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
So erstellen Sie mit Docker ~ Sequelize ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
So erstellen Sie mit Docker ~ Vue ~ eine [TypeScript + Vue + Express + MySQL] -Umgebung
Erstellen Sie mit Docker eine Node.js-Umgebung
So erstellen Sie CloudStack mit Docker
Ich habe versucht, die Umgebung nach und nach mit Docker aufzubauen
[Docker] Erstellen Sie mit Docker eine Node.js + Express + Webpack-Umgebung
So erstellen Sie eine Rails + Vue + MySQL-Umgebung mit Docker [neueste Version 2020/09]
So erstellen Sie eine Rails 6-Umgebung mit Docker
[Rails] So erstellen Sie eine Umgebung mit Docker
So erstellen Sie eine Docker-Umgebung mit Gradle for IntelliJ
Build Rails (API) x MySQL x Nuxt.js Umgebung mit Docker
Konstruktionsnotiz für die MySQL 5.7 (Docker) -Umgebung
Erstellen einer Docker-Umgebung mit WSL
Docker-Build für mehrere Projekte mit Fock
Ich habe versucht, eine Umgebung mit WSL2 + Docker + VSCode zu erstellen
Erstellen Sie die Node.js-Umgebung mit Docker Compose
Erstellen Sie mit Docker eine lokale Couchbase-Umgebung
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Erstellen Sie eine Browsertestumgebung mit Capybara in der Docker-Entwicklungsumgebung
[Umgebungskonstruktion mit Docker] Rails 6 & MySQL 8
Erstellen Sie mit Docker Compose eine Entwicklungsumgebung für Django + MySQL + nginx
Erstellen Sie eine Unity-Entwicklungsumgebung auf Docker
Aktualisieren Sie MySQL mit Docker von 5.7 auf 8.0
Erstellen Sie mit Laradock eine Docker + Laravel-Umgebung
Als ich versuchte, mit Docker eine Umgebung für PHP7.4 + Apache + MySQL zu erstellen, blieb ich stecken [Windows & Mac]
Erstellen Sie mit Docker eine Umgebung für "API-Entwicklung + API-Überprüfung mithilfe der Swagger-Benutzeroberfläche"
01. Ich habe versucht, eine Umgebung mit SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10) zu erstellen.
So erstellen Sie mit rbenv eine Umgebung für eine beliebige Version von Ruby
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
Installieren Sie PHP7.4, um die CentOS7 Laravel-Umgebung zu erstellen
Erstellen Sie mit Docker schnell eine Webumgebung
SQL-Anweisungslernen ~ Umgebungskonstruktion ~ Docker + MySQL
Erstellen Sie mit Docker eine PureScript-Entwicklungsumgebung
[Docker] Erstellen einer Umgebung für Hugo
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)