Résumé de la compréhension de Docker par les débutants ② ~ docker-compose ~

introduction

J'ai enfin commencé à apprendre Docker, je vais donc résumer ma compréhension.

Notez ce que vous avez appris aujourd'hui

Lancez un conteneur qui exécute express dans node.js. Je l'ai fait avec docker-compose.

スクリーンショット 2020-10-22 11.29.14.png

Tout d'abord, préparez-vous localement

cd ~
mkdir sample && cd sample
yarn init -y
yarn add express
touch index.js

index.js


const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello').status(200);
});

app.listen(3000, () => {
  console.log('Listening on port 3000');
});
node index.js

Bien sûr, si vous appuyez sur la commande curl localement, vous obtiendrez une réponse.

curl http://localhost:3000
Hello

Pour le moment, je tracerai la situation actuelle. Pour le moment. スクリーンショット 2020-10-22 11.49.29.png

Préparation du Dockerfile

Pour créer une image docker de node.js voir ici. Cette fois, c'est une copie. Créez le Dockerfile suivant directement sous le répertoire d'exemple.

Dockerfile


FROM node:alpine

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

# Bundle app source
COPY . .
# package.Je ne veux pas faire l'installation de npm après avoir copié json à chaque fois que je construis.
#Par conséquent, après avoir terminé ce qui précède, COPY. .Fais le.
#Ensuite, la construction ne sera exécutée que pour la partie où le code est modifié.

EXPOSE 3000
CMD [ "node", "index.js" ]

Et comme c'est douloureux si node_modules est également copié, créez également .dockerignore.

touch .dockerignore
echo 'node_modules' >> .dockerignore

À propos, si vous venez jusque-là, vous n'avez pas à utiliser docker-compose séparément.

docker build -t app .
docker run -p 3000:3000 app

Si vous le faites, le conteneur démarrera. Cette fois, au lieu d'utiliser la commande ci-dessus, lancez le conteneur avec docker-compose.

Préparation de docker-compose.yml

Créez le fichier docker-compose.yml suivant directement sous le répertoire exemple.

docker-compose.yml


version: '3'
#Spécifiez 3 sans penser à rien

services:
#Décrivez les informations sur le conteneur. En écrivant plusieurs informations de conteneur ici, vous pouvez démarrer plusieurs conteneurs en même temps.
  app:
  #Lancez un conteneur appelé app (avec un espace de noms DNS).
    build:
    #Les informations au moment de la construction sont décrites ici. Si vous avez un Dockerfile, vous pouvez vous y référer, sinon écrivez-le directement ici.
      context: .
      #Ce docker au moment de la construction-compose.Même répertoire que yml (.) Reportez-vous au Dockerfile.
      #S'il y a plusieurs Dockerfiles, vous devez séparer les répertoires et les spécifier dans leur contexte, ou spécifier leurs noms comme docokerfile: XXX.
    container_name: express-app
    #Donnez-lui un nom de conteneur arbitraire. Vous pouvez utiliser ce nom de conteneur pour accéder au conteneur avec la commande suivante
    # docker exec -it express-app sh
    ports:
      - '3000:3000'
    # docker run -p 3000:Cela signifie la même chose que 3000.
    volumes:
      - './:usr/src/app'
    #Répertoire actuel du PC local (./) Et le conteneur~/usr/src/Synchronisez le répertoire des applications
    #Aussi pratique pour le développement.

docker-composer et terminer

docker-compose up lancera le conteneur. Si vous tapez la commande curl depuis votre PC local, vous obtiendrez une réponse du conteneur. Comme le montre la première figure.

curl http://localhost:3000
Hello

スクリーンショット 2020-10-22 13.30.27.png

Faites docker-compose down pour arrêter le conteneur. Si vous réécrivez le contenu de ʻindex.js, reconstruisez-le avec docker-compose build`.

De plus, si vous faites docker-compose up -d, le conteneur démarrera en arrière-plan, mais pour le moment, il est difficile de voir le console.log dans le conteneur, donc j'aime le premier plan.

finalement

J'ai résumé les bases pendant les bases. Merci beaucoup.

Recommended Posts

Résumé de la compréhension de Docker par les débutants ② ~ docker-compose ~
Résumé de la compréhension de Docker par les débutants ① ~ docker run -p ~
Résumé de la compréhension de Docker par les débutants ③ ~ Jusqu'à l'API de proxy à l'aide de nginx ~
Résumé de la compréhension de Docker par les débutants ⑤ ~ Jusqu'au déploiement d'un conteneur Docker sur une instance EC2 ~
Résumé de la compréhension de Docker par les débutants ④ ~ Jusqu'à ce que l'instance EC2 soit démarrée et que Docker soit installé ~
[Java] Compréhension débutante de Servlet-②
[Java] Compréhension débutante de Servlet-①
Résumé orienté objet par les débutants (Java)
[Pour les débutants] Résumé du constructeur java
[Rails] Introduction de Rubocop par les débutants
Résumé des commandes Docker fréquemment utilisées
Résumé des fonctionnalités simples de Bootstrap pour les débutants
[Docker] Introduction à docker compose Résumé de base de docker-compose.yml
Résumé des connaissances de base des rails acquises par progate
Résumé de la commande Docker
Résumé des commandes fréquemment utilisées dans Rails et Docker
[Java] Résumé de base de Java non couvert par Progate ~ Partie 1 ~
Réduction du poids de l'image Docker grâce à l'application build-React en plusieurs étapes
Résumé des révisions (nouveaux problèmes de yuan) par version Java
Introduction de Docker - Partie 1--
Résumé des sources OpenJDK
vue d'ensemble du fichier jar
Liste des mémos débutants (Liste)
Résumé sur la sécurité de l'information
Résumé de l'utilisation de FragmentArgs
Manuel compact de Docker (3: docker-compose)
résumé personnel de la commande docker
Résumé de l'utilisation de DBFlow
Résumé du support Java 2018
Liste des mémos débutants (Liste)
[Java] Compréhension débutante de Servlet-②
[Java] Compréhension débutante de Servlet-①
[Pour les débutants] Résumé du constructeur java
[Rails] Introduction de Rubocop par les débutants
Résumé de la compréhension de Docker par les débutants ② ~ docker-compose ~
L'histoire de RxJava souffrant de NoSuchElementException
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Explication de Ruby sur rails pour les débutants ①
Installer en spécifiant la version de Django dans l'environnement Docker
[Java] Résumé de base de Java non couvert par Progate ~ Partie 2 ・ Liste ~
Recommandation de l'opération set par Java (et compréhension de equals et hashCode)
[Résumé des livres techniques] Résumé de la lecture "Apprendre Docker à partir des bases"
Récapitulatif des valeurs renvoyées par la méthode des caractéristiques Spliterator #java