Dans le thème "concentration totale", "Comment utiliser Docker" est résumé pour le Mameko virtuel qui dort en moi.

introduction

Docker est un «outil pratique qui facilite la création d'un environnement de développement».

Même si vous voulez vraiment jouer au baseball, il est difficile de se faire une place ... Préparez une base, mesurez la distance, préparez une batte, une balle et un siège pour spectateur. Pourtant! Avec Docker, vous pouvez créer instantanément un dôme PayPay! (Pas terminé.)

Les terrains de baseball ne sont pas possibles, mais c'est possible dans un environnement de développement de système.

C'est une application pratique qui vous permet de créer instantanément un environnement de développement système et de distribuer cet environnement à plusieurs personnes.

À propos de cet article

Cet article n'aborde pas spécifiquement des concepts tels que les conteneurs. Je crée un article aux fins suivantes.

―― Vous pouvez toucher Docker et ressentir le sentiment que l'environnement système est prêt. ――Vous pouvez le retirer immédiatement lorsque vous vous en souvenez plus tard.

Nezko! !! !! !! !! !! Docker Je ferai de mon mieux pour l'utiliser! !! !!

Environnement d'exécution

* Si vous ne l'avez pas encore installé, veuillez visiter le site officiel ci-dessus. </ font>

Le site que j'ai utilisé comme référence

En particulier, j'ai étudié et renvoyé au site principal. Le concept est bien décrit, donc si vous êtes un lecteur de cet article, veuillez jeter un œil.

Faisons le!

Créer un conteneur à partir d'un Dockerfile

Créez un conteneur avec PHP et Apach installés sur CentOS7.

couler

① Créez un Dockerfile dans n'importe quel emplacement (nom du fichier: dockerfile) 2 Créez une image à partir du Dockerfile créé. ③ Créez un conteneur basé sur l'image.

procédure

① Commencez par créer un fichier docker sur votre PC.

dockerfile


#Basé sur l'image centos7 de Docker Hub.
FROM centos:centos7

#Installez Apach et php dans l'image centos7
RUN yum -y install httpd php

#Exécutez la commande pour démarrer Åpach
CMD ["/usr/sbin/httpd","-DFOREGROUND"]

(2) Créez une image basée sur le Dockerfile créé.

Voir Projet de japonaisisation de document Docker pour des explications sur les options.

#Contenu
docker build -t nom de l'image:Nom de la balise Répertoire Dockerfile

#Exemple | Le nom de l'image est lamptest. La balise est 1.0. Utiliser le fichier dockerfile du répertoire courant
docker build -t lamptest:1.0 .

Ce qui précède va créer une image. Screen Shot 2020-11-17 at 11.47.03.png

③ Démarrez le conteneur en fonction de l'image créée

#Contenu
docker run -d -numéro de port p:numéro de port--nom Nom du conteneur Nom de l'image:Nom de la balise

#Exemple | Attribuez la version du port 80 à la version 8080.
#Le nom du conteneur est testserver.
#Les images et les tags sont les plus lamentables:1.Utilisez 0.
docker run -d -p 8080:80 --name testserver lamptest:1.0

Le conteneur est terminé avec succès. Screen Shot 2020-11-17 at 11.59.47.png

Lorsque vous accédez à [http: // localhost: 8080](http: // localhost: 8080), l'écran suivant s'affiche.

Screen Shot 2020-11-17 at 15.29.00.png

* Supplément * Fonctionnement du conteneur


#Commencez
nom du conteneur de démarrage du docker

#Arrêtez
nom du conteneur d'arrêt du docker

#Entrez dans le conteneur
docker exec -i -t nom du conteneur bash

L'opération est également possible avec l'interface graphique. Screen Shot 2020-11-17 at 15.19.03.png

Description détaillée de la commande dockerfile

Ceux qui sont fréquemment utilisés sont brièvement décrits. Veuillez consulter Projet de japonaisisation de document Docker pour des explications plus détaillées.

From Créez en fonction de l'image Docker.


#Contenu
FROM nom de l'image:Nom de la balise

#Exemple | Basé sur l'image de centos
FROM centos:centos7

Run Exécutez la commande pour l'image spécifiée dans FROM.

#Contenu
FROM Commande à exécuter

#Exemple | Installation de httpd avec yum
RUN yum -y install httpd

COPY Spécifiez le fichier que vous souhaitez copier dans l'image Docker (dans le conteneur).

#Contenu
Chemin du fichier que vous souhaitez copier dans l'image FROM Chemin de l'image de destination de la copie

#Exemple | fichier hoge dans le même répertoire que Dockerfile,/Copier dans le répertoire tmp.
COPY hoge.txt /tmp

ADD Si vous spécifiez un fichier qui peut être spécifié par URL et qui est compressé par une archive tar (gzip, bzip2, xz), il sera automatiquement développé. À part cela, c'est la même chose que la commande COPY.

#Contenu
Le chemin du fichier ou l'URL que vous souhaitez copier dans l'image ADD.

#Exemple | tar.Stockage d'images lors de l'expansion du fichier gz
ADD hoge.tar.gz /tmp

#Exemple | Enregistrez le fichier de destination de l'URL dans le répertoire spécifié.
ADD https://zukan.pokemon.co.jp/detail/025 /tmp

RUN Exécutez la commande lors de la création de l'image.

#Contenu
Option de commande RUN

#Exemple | Commande ls-Avec l'option d'un.
RUN ls -a

CMD Exécutez la commande au démarrage du conteneur.

#Contenu
CMD [commander,option]

#Exemple | Commande ls-Avec l'option d'un.
CMD [ ls , -a ]

ENV Entrez une valeur dans le nombre de variables d'environnement. (Equal peut être omis.)

#Contenu
Nom de la variable d'environnement ENV=Valeur de la variable d'environnement
Nom de la variable d'environnement ENV Valeur de la variable d'environnement

#Exemple | Insérez ichinokata dans la variable d'environnement MIZUNOKOKYU
ENV MIZUNOKOKYU=ichinokata

USER Changement de nom d'exécution utilisateur

#Contenu
Nom d'utilisateur

#Exemple | Changer le nom d'utilisateur en akiunleash
USER akiunleash

Créer et lier plusieurs conteneurs avec docker-compose

Il est possible de créer plusieurs conteneurs d'applications et de bases de données en un seul système. Créons des conteneurs Rails et PostgreSQL séparément et travaillons ensemble comme un seul système.

couler

① Créez les fichiers nécessaires tels que docker-compose.yml ② Créez une image et un conteneur à l'aide de l'exécution de docker-compose ③ Le Gemfile sera mis à jour, donc reconstruisez-le avec le bulde docker-compose. ④ Modifiez les paramètres de nom d'utilisateur et de mot de passe afin de pouvoir vous connecter à PostgreSQL du côté Rails. ⑤ Créer une base de données PostgreSQL à partir de Rails ⑥ Achèvement!

procédure

Préparez les quatre fichiers suivants.

  • docker-compose.yml
  • dockerfile
  • Gemfile
  • Gemfile.lock

docker-compose.yml


version: '3'
services:
  db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

dockerfile


#Basé sur l'image centos7 de Docker Hub.
FROM ruby:2.3.3

#À partir de la mise à jour du logiciel de gestion des packages
# build-essential libpq-Installer dev nodejs
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

#Créer le répertoire myapp dans le conteneur
RUN mkdir /myapp

#Définir dans le répertoire de travail
WORKDIR /myapp

#Créer un fichier dans le même répertoire que dockerfile dans le conteneur
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock

#Installer des rails écrits en Gemfile
RUN bundle install

#Créer des fichiers et des répertoires Rails dans des conteneurs
ADD . /myapp

Gemfile


source 'https://rubygems.org'
gem 'rails', '5.0.0.1'

Gemfile.lock


#Fichier vide

Exécutez la commande dans le répertoire où le fichier ci-dessus est enregistré

docker-compose run web rails new . --force --database=postgresql

Le Gemfile sera mis à jour, alors exécutez la commande pour réinstaller le Gem.

docker-compose build

Modifiez les informations pour vous connecter à la base de données.

config/database.yml



default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

Commençons l'application!

docker-compose up -d

Puisqu'il n'y a pas de base de données dans l'état actuel, nous allons la créer.

docker-compose run web rake db:create

Confirmation!

Si vous accédez à [http: // localhost: 3000 /](http: // localhost: 3000 /) et que la page suivante s'affiche, cela réussit. Screen Shot 2020-11-18 at 11.12.38.png

Vous pouvez voir que le conteneur est également démarré correctement. Screen Shot 2020-11-18 at 11.18.04.png

S'il contient des conteneurs inutiles, il descendra une fois et disparaîtra au redémarrage.

#Une fois en bas
docker-compose down

#Côté vers le haut
docker-compose up -d

Explication de docker-compose.yml

docker-compose.yml


version: '3'
services:
  db:
    image: postgres
    environment:
      - POSTGRES_PASSWORD=password
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
article Explication
version docker-composer la version
services Nom du conteneur (créer WEB et DB)
image Utiliser l'image de Docker Hub
environment Définir les variables d'environnement
build Utilisez le fichier dockerfile spécifié.
command Commandes à exécuter après la création du conteneur
volumes Fichier de montage
ports Spécifier un port
depends_on Ordre de démarrage

finalement

J'espère que cela vous aidera à avoir une idée de ce qu'est Docker. Si vous trouvez des erreurs dans le contenu, veuillez nous en informer.

changer l'historique

Date Contenu
2020/11/18 Première édition

Recommended Posts

Dans le thème "concentration totale", "Comment utiliser Docker" est résumé pour le Mameko virtuel qui dort en moi.
Pour ceux qui souhaitent utiliser MySQL pour la base de données dans la construction de l'environnement de Rails6 ~.
[Pour ceux qui créent des portefeuilles] Comment utiliser binding.pry avec Docker
Comment utiliser Docker dans VSCode DevContainer
Comment trouver le nombre total de pages lors de la pagination en Java
Comprendre en 5 minutes !! Comment utiliser Docker
Comment afficher la quantité de disque utilisée par le conteneur Docker pour chaque conteneur
Comment vérifier le journal dans le conteneur Docker
Sortie de la façon d'utiliser la méthode slice
Comment utiliser JQuery dans Rails 6 js.erb
Comment installer Docker dans l'environnement local d'une application Rails existante [Rails 6 / MySQL 8]
Comment utiliser UsageStatsManager dans Android Studio (Comment vérifier l'heure de démarrage d'autres applications)
Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
Dans Time.strptime,% j (date totale de l'année) est
[Pour ceux qui créent des portfolios] Comment utiliser font-awesome-rails
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
[Rails] Comment enregistrer temporairement l'URL de demande d'un utilisateur qui n'est pas connecté et revenir à cette URL après la connexion
Comment utiliser la méthode getter / setter (en orientation objet)
Comment créer une partie d'espace réservé à utiliser dans la clause IN
[Pour ceux qui créent des portefeuilles] Comment utiliser Chart kick
Comment dériver le dernier jour du mois en Java
Est-il facile à utiliser pour l'utilisateur lors de la mise en œuvre de fonctions à usage général? Soyons conscients de
Utilisez MailHog pour vérifier le courrier dans l'environnement de développement (à l'aide de Docker)
[Sprint Boot] Comment utiliser les trois types de SqlParameterSource définis dans org.springframework.jdbc.core.namedparam
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment obtenir le contenu de la carte à l'aide du mémorandum d'instructions
[Rails] Comment changer le titre de la page du navigateur pour chaque page
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Comment vérifier le contenu de la chaîne de caractères java de longueur fixe
Comment obtenir la longueur d'un fichier audio avec Java
Comment incrémenter la valeur de Map sur une ligne en Java
[RSpec] Lorsque vous souhaitez utiliser la variable d'instance du contrôleur dans le test [attribuer n'est pas recommandé]