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

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
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
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