[Road_node.js_1-1] La voie de la création de l'environnement Node.js Express MySQL à l'aide de Docker

Composition d'image terminée nodoDocker (répertoire racine) a03c9651ffb5bba1c53532460a232639.png

Dockerfile: Fichier de création d'un conteneur d'application (node.js)

app.env: Un fichier qui décrit les paramètres de connexion avec mysql

docker-compose.yml: yml qui gère le conteneur node.js et le conteneur mysql

src: Corps d'application

Créez un conteneur pour votre application

Tout d'abord, créez un conteneur temporaire pour l'application et créez un modèle pour l'application. Le modèle de l'application est monté côté hôte et le docker-compose est créé à l'aide du modèle.

Sous nodeDocker Créer docker-compose.yml

docker-compose.yml


version: '3'
services:
  app:
    #Spécifiez l'image à démarrer (ici Node.Image officielle de js v12)
    image: node:12

    #Définir les variables d'environnement
    environment:
      - DEBUG=app:*

    tty: true

    #Port côté hôte:Port à conteneurs
    ports:
      - '3000:3000'

    #Montez le dossier qui stocke le code source
    #(Du côté hôte./src du conteneur/Monter sur l'application)
    volumes:
      - ./src:/app

    #Spécifiez le dossier actuel au démarrage
    working_dir: /app

    #Spécifiez la commande à exécuter après le démarrage
    command: npm start


hôte.


#Démarrez temporairement le conteneur (--Supprimer après l'arrêt avec rm. Après avoir démarré le conteneur, entrez bash)
docker-compose run --rm app /bin/bash

récipient.


# express-Générer un modèle d'application avec un générateur
npx express-generator

#Installer les packages dépendants
npm install

#Quittez le conteneur (ce conteneur temporaire sera supprimé)
exit

docker-compose.yml


    volumes:
      - ./src:/app

Selon cette description, (Le répertoire où se trouve docker-compose.yml. Autrement dit, il est monté dans le répertoire src sous le répertoire nodoDocker, donc le modèle créé dans le répertoire src côté hôte reste.

Démarrez le conteneur

host.


docker-compose up

docker-compose.yml


    command: npm start

Selon la description, l'application Express.js démarre automatiquement après le démarrage du conteneur. http://localhost:3000/ Confirmer avec.

Arrêtez le conteneur

host.


#Redémarrez temporairement le conteneur
docker-compose run --rm app /bin/bash

#Installez un outil appelé "nodemon" qui détecte les changements dans le code source et redémarre l'application si nécessaire.
#Vous n'êtes pas obligé d'arrêter et de redémarrer le conteneur chaque fois que vous apportez une modification.
npm install -D nodemon

Package.json fixe

src/package.json


"scripts": {
  "dev": "nodemon ./bin/www",
  "start": "node ./bin/www"
},

Modifiez le fichier docker-compose.yml

docker-compose.yml


(Changer avant)
command: npm start

(Après changement)
command: npm run dev

Ajouter un conteneur pour MySQL

Ajout des paramètres mysql à docker-compose.yml

docker-compose.yml


version: '3'
services:
  mysql:
    image: mysql:5.7
    env_file: ./mysql/mysql.env
    #Paramètres des variables d'environnement. Réglez le fuseau horaire sur l'heure japonaise.
    environment:
      - TZ=Asia/Tokyo
    ports:
      - '3306:3306'
    volumes:
      #Remplacez le fichier de configuration par défaut de mysql.:Réglage en lecture seule du côté du conteneur avec ro.
      - ./mysql/conf:/etc/mysql/conf.d/:ro
      #En le montant sur mysqldata, les données resteront même si le conteneur est supprimé.
      - mysqldata:/var/lib/mysql
    networks:
      - backend

  app:
    image: node:12
    env_file: ./app.env
    #Paramètres des variables d'environnement. Réglez le fuseau horaire sur l'heure japonaise.
    environment:
      - TZ=Asia/Tokyo
      - DEBUG=app:*
    tty: true
    ports:
      - '3000:3000'
    volumes:
      - ./src:/app
    working_dir: /app
    command: npm run dev
    networks:
      - backend
    #Comme cela dépend de mysql, le conteneur d'application est créé après la création du conteneur mysql.
    depends_on:
      - mysql

networks:
  backend:

volumes:
  mysqldata:

Créez my.conf (situé dans /etc/mysql/conf.d/ du côté du conteneur)

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

Créez un fichier mysql.env dans le dossier mysql. (Env_file: Le contenu est défini dans la variable d'environnement mysql côté conteneur par la description de ./mysql/mysql.env)

mysql/mysql.env


MYSQL_ROOT_HOST=%
MYSQL_ROOT_PASSWORD=(Mot de passe root)
MYSQL_USER=(Nom d'utilisateur)
MYSQL_PASSWORD=(mot de passe)
MYSQL_DATABASE=todo

Créer un fichier app.env (paramètres de la variable d'environnement du conteneur d'application)

app.env


MYSQL_SERVER=mysql
MYSQL_USER=(Nom d'utilisateur)
MYSQL_PASSWORD=(mot de passe)
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

#Créez un réseau à utiliser. docker-Dans le cas de compose, le nom est résolu en utilisant le nom sous service, donc app et mysql sont automatiquement connectés.
networks:
  backend:

volumes:
  mysqldata:

Connectez-vous à mysql

host.


docker-compose exec mysql mysql -uroot -p

Ne peux pas,,,

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Résultats de divers essais

host.


docker-compose down --volumes

Après avoir supprimé le volume, j'ai pu me connecter. La cause est inconnue.

Placez le fichier docker qui décrit l'installation directement sous la racine pour utiliser ejs pour le moteur de modèle.

#node.Tirez l'image de js.
FROM node:12
#Faites de votre répertoire de travail un répertoire d'applications.
WORKDIR /src
Installez ejs.
RUN npm install ejs

Corrigé car le conteneur d'application est construit avec Dockerfile (noeud d'extraction à l'origine: 12 image)

docker-compose.yml


(Changer avant)
image: node:12

(Après changement)
build: .

Terminé pour le moment.

Recommended Posts

[Road_node.js_1-1] La voie de la création de l'environnement Node.js Express MySQL à l'aide de Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Express ~
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ MySQL ~
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Sequelize ~
Essayez de créer un environnement de développement Java à l'aide de Docker
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Vue ~
Créer un environnement Node.js avec Docker
Comment créer CloudStack à l'aide de Docker
J'ai essayé de construire l'environnement petit à petit en utilisant docker
[Docker] Créez un environnement Node.js + express + webpack avec Docker
Comment créer un environnement Rails + Vue + MySQL avec Docker [dernière version 2020/09]
Comment créer un environnement Rails 6 avec Docker
[Rails] Comment créer un environnement avec Docker
Comment créer un environnement Docker avec Gradle pour IntelliJ
Environnement Build Rails (API) x MySQL x Nuxt.js avec Docker
Mémo de construction de l'environnement MySQL 5.7 (Docker)
Créer un environnement Docker avec WSL
Construction de docker multi-projets à l'aide de jib
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
Créer un environnement Node.js avec Docker Compose
Créer un environnement local Couchbase avec Docker
J'ai essayé de créer un environnement de serveur UML Plant avec Docker
Créer un environnement de test de navigateur à l'aide de Capybara dans l'environnement de développement Docker
[Construction de l'environnement avec Docker] Rails 6 et MySQL 8
Créer un environnement de développement pour Django + MySQL + nginx avec Docker Compose
Créer un environnement de développement Unity sur docker
Mettre à jour MySQL de 5.7 à 8.0 avec Docker
Créez un environnement Docker + Laravel avec Laradock
Quand j'ai essayé de créer un environnement pour PHP7.4 + Apache + MySQL avec Docker, je suis resté bloqué [Windows & Mac]
Créez un environnement de "développement d'API + vérification d'API à l'aide de Swagger UI" avec Docker
01. J'ai essayé de créer un environnement avec SpringBoot + IntelliJ + MySQL (MyBatis) (Windows 10)
Comment créer un environnement pour n'importe quelle version de Ruby en utilisant rbenv
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Installez PHP7.4 pour créer l'environnement CentOS7 Laravel
Créez rapidement un environnement Web à l'aide de Docker
Apprentissage des instructions SQL ~ Construction de l'environnement ~ Docker + MySQL
Créer un environnement de développement PureScript avec Docker
Construire un environnement Rails 6 + MySQL avec Docker compose
[Docker] Création d'un environnement pour utiliser Hugo
Déployer sur heroku avec Docker (Rails 6, MySQL)