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