Essayez de créer Express + PostgreSQL + Sequelize avec Docker [Partie 1]

Préambule

À l'avenir, nous visons à configurer le frontal comme Vue et le backend comme Express. Tout d'abord, créez un environnement avec Express + PostgreSQL + Sequelize sur le back-end!

① Jusqu'au fonctionnement du conteneur avec Docker

Structure initiale du fichier

-Dockerfile
-docker-compose.yml
-app
|-- package.json

Dockerfile

Dockefile


#Spécification d'image
FROM node:latest

#Paramètres des variables d'environnement
ENV NODE_ENV="development"

#Créer un répertoire de travail&Configuration
WORKDIR /src

COPY ./app /src

RUN npm install

docker-compose.yml

Concevez maintenant la structure du conteneur Node.js Express (côté serveur) et la structure du conteneur DB.

docker-compose.yml


version: '3'
services:
  app:
  #Emplacement de stockage Dockerfile
    build:
      context: ./  
    depends_on:
      - database
    image: n-app
    #réglage des volumes
    volumes:
     - "./app:/src"
    #Nom du conteneur
    container_name: n-app
    #Connexion au port
    ports:                          
      - 3000:5000
    environment:
      PORT: 5000
      DB_USER: postgres
      DB_HOST: database
      DB_PORT: 5432
      DB_NAME: mydatabase
    tty: true

  database:
    image: postgres:12.3
    volumes:
      - ./init-sql:/docker-entrypoint-initdb.d:ro
    environment:
      POSTGRES_DB: mydatabase
      TZ: "Asia/Tokyo"
      POSTGRES_HOST_AUTH_METHOD: trust

package.json

C'est pour moi. En définissant Volumes, les packages installés sur le conteneur sont également enregistrés sur l'hôte et le conteneur. Même si vous détruisez le conteneur, vous pouvez restaurer l'environnement du conteneur détruit par "npm install" basé sur package.json en définissant Volumes.

--Dans les scripts, définissez la partie "○○" de la commande "node ○○". Veuillez noter qu'actuellement ./bin/www ne sera créé que si vous générez un fichier modèle Express.

app/package.json


{
  "name": "myapp",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
  },
  "dependencies": {
    "cookie-parser": "~1.4.3",
    "debug": "~2.6.9",
    "ejs": "~2.5.7",
    "express": "~4.16.0",
    "http-errors": "^1.6.3",
    "morgan": "~1.9.0",
    "nodemon": "^2.0.4",
    "pg": "*",
    "sequelize": "^6.3.5",
    "sequelize-cli": "^6.2.0"
  }
}

Je me suis référé au site suivant. J'ai cloné à partir de github du site suivant et ajouté les informations nécessaires. C'était très pratique car le modèle Express était préparé à l'avance.

https://qiita.com/tamoco/items/caffca436546a1a5fcc8

Maintenant, exécutons le conteneur à l'aide de Docker.

Terminal


$ docker-compose build

Building app
Step 1/5 : FROM node:10.12
 ---> a2b9536415c2
Step 2/5 : ENV NODE_ENV="development"
 ---> Using cache
 ---> 40f981aef1ce
Step 3/5 : WORKDIR /src
 ---> Using cache
 ---> ec233d742a63
Step 4/5 : COPY ./app /src
 ---> Using cache
 ---> 88f269307e53
Step 5/5 : RUN npm install
 ---> Using cache
 ---> b22a8c36f08e

$ docker-compose up -d

$ docker-compose ps

      Name                     Command              State           Ports
----------------------------------------------------------------------------------
n-app               node                            Up      0.0.0.0:3000->5000/tcp
ta-app_database_1   docker-entrypoint.sh postgres   Up      5432/tcp

$ docker exec -it n-app bash

root@f195575a066f:/src# 

J'ai pu entrer dans le conteneur construit ci-dessus.

② Construction d'environnement express

Express est un framework de type MVC pour les applications Web qui s'exécute sur Node.js. Dans mon cas, je l'ai cloné à partir du référentiel d'un grand ancêtre, donc j'avais un modèle pour Express à l'avance.

Si vous souhaitez générer un modèle Express, il ressemble à ceci.

# npm install express-generator -g

1.Si vous souhaitez créer une vue sous forme de fichier pug(Default)
# express --view=pug myapp

Si vous souhaitez créer une vue sous forme de fichier ejs
2. express -e myapp 

la prochaine fois

https://qiita.com/rockguitar67/items/0020d734201632077cb5

Références

Construire Docker-Express https://qiita.com/tamoco/items/caffca436546a1a5fcc8

https://gitlab.com/tamoco-mocomoco/study-docker-compose/-/tree/master/app/routes

https://qiita.com/yoshiplum/items/129e7ad1ffc3a02b9eb2

À propos de Docker-Volumes https://qiita.com/gounx2/items/23b0dc8b8b95cc629f32

Recommended Posts

Essayez de créer Express + PostgreSQL + Sequelize avec Docker [Partie 2]
Essayez de créer Express + PostgreSQL + Sequelize avec Docker [Partie 1]
Construction de Rails 6 et environnement PostgreSQL avec Docker
Essayez d'exécuter cloudera manager avec docker
Essayez de manipuler les tableaux PostgreSQL avec JDBC
Comment créer un environnement [TypeScript + Vue + Express + MySQL] avec Docker ~ Sequelize ~
[Docker] Créez un environnement Node.js + express + webpack avec Docker
Installer Docker avec WSL2 Memo ([Partie 2] Introduction à Docker)
Expérience CI / CD avec katacoda (pour les débutants) --Partie10 (Création d'images Docker à l'aide de Jenkins)
Essayez d'utiliser un autre conteneur de servlet Jetty avec Docker
Rails Docker-Partie 1-
Rails Docker ~ Partie 2 ~
Jusqu'à ce que j'essaye d'exécuter Apache Kafka avec une image docker
Essayez de vous connecter à l'émulateur AzureCosmosDB pour Docker avec Java
Exécutez Mosquitto avec Docker et essayez la communication WebSocket avec MQTT
Essayez de créer Java dans un module natif avec GraalVM