Après avoir résumé le plan de virtualisation, pensez à utiliser Docker pour les entreprises

Contexte

――Le travail en interne utilise souvent la virtualisation de type hôte, mais j'ai ressenti un sentiment de crise si je ne comprenais pas la virtualisation de type conteneur en interne, j'ai donc décidé d'essayer une session d'étude pour résumer les avantages et les inconvénients. pensée. ――Je l'ai fait avec l'espoir que vous pourrez reconnaître ses forces et ses faiblesses en touchant Docker, plutôt que la virtualisation de type conteneur, et avoir l'occasion de le comparer avec les méthodes existantes jusqu'à présent. «Vous avez peut-être souligné que le mode de fonctionnement de votre entreprise est vieux ou mauvais, et que vous le faites toujours, mais vous n'en avez peut-être même pas conscience, vous serez donc exclu du flux du monde. Afin d'éviter de telles critiques et suggestions, nous avons délibérément préparé du matériel à l'extérieur. ――Veuillez indiquer s'il y a des erreurs.


Les gens qui veulent lire


Qu'est-ce que la virtualisation

La virtualisation est une technologie qui intègre plusieurs matériels avec des logiciels et reproduit le matériel avec des spécifications gratuites, et utilise une quantité limitée de ressources physiques (CPU, mémoire, disque dur, réseau, etc.) en quantité réelle. C'est pour donner l'impression que les ressources ci-dessus (ressources logiques) sont en cours d'exécution. Qu'est-ce que la virtualisation? https://www.fsi.co.jp/solution/vmware/knowledge/virtualization.html

Cela peut vous faciliter la tâche, mieux utiliser les ressources informatiques excédentaires, augmenter la disponibilité du système et bien plus encore.


Types de virtualisation

En prenant trois méthodes de virtualisation majeures comme exemples, nous résumerons les avantages et les inconvénients ainsi que la comparaison avec les serveurs généraux.


Option de ne pas virtualiser (serveur général)

Applications qui s'exécutent sur un système d'exploitation installé directement sur le matériel

image.png


Virtualisation hébergée

Une méthode d'exécution d'un système d'exploitation invité dans un environnement virtuel qui s'exécute sur un système d'exploitation installé directement sur le matériel

image.png

--Produits et applications


Virtualisation de type hyperviseur

Une méthode d'exécution d'un logiciel de gestion d'environnement virtuel appelé hyperviseur sur du matériel

image.png

--Produits et applications


Virtualisation de type conteneur

Un moteur de conteneur qui s'exécute en tant que processus s'exécute sur le système d'exploitation hôte et exécute le conteneur en tant qu'application. Virtualiser un processus au lieu d'une machine virtuelle

image.png

--Produits et applications


Essayez d'utiliser Docker

Il existe différentes méthodes de virtualisation comme celle-ci, mais cette fois, nous allons vous présenter comment utiliser Docker, qui utilise la virtualisation de type conteneur, pour créer un environnement de développement pour les applications Web.

――La partie moteur du conteneur dans la figure ci-dessus correspond au service docker.

En visant la virtualisation de conteneurs à l'aide d'images et de fichiers Docker

L'avantage sera né. Les images Docker sont préparées à différents niveaux de granularité, du niveau du système d'exploitation au niveau de l'application, et peuvent être créées en fonction des besoins des utilisateurs.


Exemple

--Si vous souhaitez utiliser un serveur Web: --Utilisez uniquement des images Apache

Utilisation de Docker


Installer Docker et lancer les services

Je vais vous présenter la procédure pour installer Docker sur le serveur (votre serveur, VPS, etc.)

Il est expliqué en détail ci-dessous, je vais donc l'introduire par extrait.

Introduction à Docker (2nd) -Docker setup, container startup- https://knowledge.sakura.ad.jp/13795/

Installation

En supposant CentOS, vous pouvez l'installer avec la commande suivante.

# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# yum install docker-ce

Démarrage du service

Après le démarrage, l'état est confirmé et le réglage de démarrage automatique du service au moment du redémarrage est également effectué.

# systemctl start docker
# systemctl status docker
# systemctl enable docker

À propos de la différence entre Docker et Docker-CE https://qiita.com/s-suefusa/items/cb3c4044da3b3657dbd0


Obtenez l'image et démarrez le conteneur

Obtenez une image du serveur Web et démarrez l'image.

Obtenir une image

Obtenez une image d'un serveur Web appelé Nginx et confirmez que l'image a été ajoutée comme suit.

# docker pull nginx
# docker images

Démarrer le conteneur

Démarrez le conteneur en utilisant l'image Nginx acquise. Au démarrage, l'hôte et le port côté conteneur sont associés, et dans l'exemple ci-dessous, le côté hôte 8181 est associé au côté conteneur 80.

# docker run -d --name nginx-container -p 80:80 nginx

Confirmation de l'identifiant du conteneur et arrêt du conteneur

Commande: docker stop [CONTAINER ID]

# docker ps -a                                                                                                                                       
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
65ee0bf845dc        nginx               "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes        0.0.0.0:8181->80/tcp   nginx-container

# docker stop 65ee0bf845dc

# docker ps -a  
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
65ee0bf845dc        nginx               "/docker-entrypoint.…"   3 minutes ago       Exited (0) 7 seconds ago                       nginx-container

Supprimer le conteneur

Commande: docker rmi [CONTAINER ID]

# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                          PORTS               NAMES
65ee0bf845dc        nginx               "/docker-entrypoint.…"   4 minutes ago       Exited (0) About a minute ago                       nginx-container

# docker rm 65ee0bf845dc                                                                                                                             
65ee0bf845dc

# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 

Supprimer l'image

L'image utilisée dans le conteneur supprimé reste dans le stockage du serveur lui-même, alors essayez de la supprimer également.

Commande: docker rmi [IMAGE ID]

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f35646e83998        12 days ago         133MB

# docker rmi f35646e83998                                                                                                                            
Untagged: nginx:latest
Untagged: nginx@sha256:ed7f815851b5299f616220a63edac69a4cc200e7f536a56e421988da82e44ed8
Deleted: sha256:f35646e83998b844c3f067e5a2cff84cdf0967627031aeda3042d78996b68d35
Deleted: sha256:9ae13393c37dce86ebd3ea923033503f2cb8f4d6b28fb554827c518a2d171535
Deleted: sha256:423bc419c558f70051d849a661a7a287b61af2037c4ce24f7bbe433e9fb63f39
Deleted: sha256:4cd04e685e3a8e5697bb91e2e6c6b477bc8c4f9a43f05578af3c0a788f011756
Deleted: sha256:611e1562bc2f489d72961d8e2e37f3097d64d9c5212a68c26aab2ad971c98f6d
Deleted: sha256:d0fe97fa8b8cefdffcef1d62b65aba51a6c87b6679628a2b50fc6a7a579f764c

# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Entrez dans le conteneur

Commande: docker attach [CONTAINER ID]

Il peut ne pas être inclus selon l'option -d ou la méthode de description du Dockerfile.

Jetez un œil au serveur Web

http://(サーバのIPアドレス)

Vous pouvez confirmer que le serveur Web fonctionne en accédant à.

Comment partager des fichiers entre le système d'exploitation hôte et le conteneur

Jusqu'à présent, nous avons décrit comment acquérir et démarrer des images, mais dans le développement Web, il est nécessaire d'organiser les fichiers et les données à afficher après la construction du serveur. À ce moment, comment échanger des fichiers entre le conteneur et l'hôte Il est résumé ci-dessous.

Comment monter le répertoire du système d'exploitation hôte côté conteneur

En spécifiant l'option "-v" lors du démarrage du conteneur, il est possible de monter le répertoire côté hôte côté conteneur.

Dans l'exemple nginx précédent, vous pouvez le monter en spécifiant comme suit.

docker run -v /host_path:/container_path -d --name nginx-container -p 80:80 nginx

# docker run -v /root/html:/usr/share/nginx/html -d --name nginx-container -p 80:80 nginx

Créez à l'avance html / index.html

index.html


<!DOCTYPE html>

<html>
<body>

<h1>title</h1>
<p>hoge</p>

</body>
</html>

Désormais, lorsque vous éditez index.html côté hôte, il sera publié sur le serveur côté conteneur.

Méthode SSH / SCP

Étant donné que le nom peut être résolu par le nom du conteneur à partir du système d'exploitation hôte, vous pouvez également vous connecter par SSH.

Comment créer un serveur

Je pense qu'il existe un moyen d'échanger des fichiers en mettant en place un serveur samba ou FTP dans le conteneur.

Il y a différentes choses, mais dans le cas d'un serveur Web, si vous préparez le script de publication sans organiser manuellement les fichiers sous la forme de ramener la source du référentiel et de l'organiser au moment de la construction du conteneur (ou après la construction) Je me sens belle.


Si vous souhaitez utiliser plusieurs conteneurs

Lorsque vous utilisez plusieurs conteneurs, il est difficile de démarrer les conteneurs individuellement, vous pouvez donc éviter ce problème en utilisant docker-compose, etc.

Présentation de Docker Compose Compose est un outil pour les applications Docker qui définissent et exécutent plusieurs conteneurs. Compose utilise un fichier YAML pour configurer les services d'application. Exécutez simplement une commande pour générer et démarrer le service d'application en fonction des paramètres. https://docs.docker.jp/compose/overview.html

Avec Laravel + Docker, vous pouvez utiliser tout Laradock avec un tour, mais je pense qu'il est difficile de saisir les fonctions car vous roulez trop.


Installation et utilisation de docker-compose

Vous pouvez l'installer avec la commande suivante.

※Remarque

Utilisation du dernier numéro de version de Compose dans la commande de téléchargement La commande ci-dessus n'est qu'un exemple, il peut donc déjà s'agir d'un numéro de version plus ancien. Consultez la page de publication du référentiel Compose sur GitHub pour la dernière version.

Communiqués ・ docker / compose https://github.com/docker/compose/releases

# sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# sudo chmod +x /usr/local/bin/docker-compose
# docker-compose --version
docker-compose version 1.27.4, build 40524192

C'est tout. Facile!


Exemple de description de docker-compose.yml

Si vous utilisez docker-compose, vous pouvez éviter les problèmes de travaux de construction et de démarrage lors de l'utilisation de plusieurs conteneurs. Créez un fichier appelé docker-compose.yml et configurez les paramètres lors de l'utilisation de plusieurs conteneurs avec YAML.

Cette fois, je décrirai les paramètres d'un conteneur nginx démarré par la commande docker plus tôt.

Nous procéderons sur la base de la structure de répertoires suivante.

Annuaire arbitraire
├ docker-compose.yml
├ Dockerfile
└ /html
    └ index.html #Racine de document Nginx

docker-compose.yml est écrit en YAML comme ci-dessous

docker-compose.yml


version: '3'   #la magie
services:   
  nginx:    #Le nom du conteneur
    build: .  #L'emplacement du Dockerfile pour ce conteneur
    ports:
      - "80:80" #Paramètre pour associer l'hôte 80 au port du conteneur 80
    volumes:
      - ./html:/usr/share/nginx/html #Paramètres pour monter la racine du document sur l'hôte

Ajouter une description basée sur l'image nginx dans le Dockerfile

Dockerfile


#imgae de base (spécifiez REPOSITORY affiché par la commande docker images)
FROM  nginx:latest

Placez le fichier html ʻindex.html à afficher sur la page Web dans la racine du document. / Html`


Mesures de démarrage / arrêt du conteneur lors de l'utilisation de docker-compose

Commencez

Exécutez la commande suivante dans le répertoire contenant le fichier docker-compose.yml du groupe de conteneurs que vous souhaitez démarrer.

# docker-compose up

Si vous souhaitez le démarrer en arrière-plan, ajoutez l'option "-d".

# docker-compose up -d

Arrêtez

# docker-compose down

[Référence] Comment définir docker-compose.yml lors de l'utilisation de plusieurs conteneurs

Voici un exemple de description de docker-compose.yml pour l'environnement qui utilise Apache + PHP + MySQL pour les applications Web. (Avec phpmyadmin)

Dans docker-compose.yml, vous pouvez décrire le type de conteneur, le chemin Dockerfile, les paramètres et les options lors du démarrage du conteneur, mais vous devez placer chaque fichier à l'emplacement référencé dans docker-compose.yml. Il y a. Veuillez vous référer au référentiel suivant pour la structure de répertoires telle que dockerfile.

docker-apache-php-mariadb https://github.com/nc30mtd/docker-apache-php-mariadb

docker-compose.yml


version: "3"
services:
  #Web 
  template-web:
    container_name: template-web
    build: ./setup
    privileged: true
    volumes:
      - ./html:/var/www/html
    ports:
      - 80:80
    depends_on:
      - template-db
    tty: true
    stdin_open: true

  # MySQL
  template-db:
    image: mariadb:latest
    restart: always
    container_name: template-db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: templatedb(Soyez prudent ici)
      MYSQL_USER: templatedbuser(Soyez prudent ici)
      MYSQL_PASSWORD: templatedbpass(Soyez prudent ici)
      MYSQL_START_TIMEOUT: 1200000
      TZ: 'Asia/Tokyo'
    volumes:
      - ./database/data:/var/lib/mysql
      - ./database/sql:/docker-entrypoint-initdb.d
      - ./database/log/mysql:/var/log/mysql
    ports:
      - 3306:3306

  # phpmyadmin
  template-phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      PMA_ARBITRARY: 1
      PMA_HOST: template-db(Soyez prudent ici)
      PMA_USER: templatedbuser(Soyez prudent ici)
      PMA_PASSWORD: templatedbpass(Soyez prudent ici)
      PMA_PORT: 3306
    links:
      - template-db
    ports:
      - 8080:80
    volumes:
      - ./phpMyAdmin/sessions:/sessions
    depends_on:
      - template-db

Bonnes pratiques lors de l'utilisation de docker-compose

Lors de la configuration d'une application Web commune de serveur Web + PHP + DB

――Ne pas tout emballer dans un seul contenant ――Probablement, le Dockerfile sera compliqué lorsque vous commencerez à tout emballer «Je ne comprends pas même si vous y regardez plus tard. Difficile à réutiliser.

――Je ne fais pas tout moi-même ――Les gens qui sont plus incroyables que vous créent de meilleures images et conteneurs dans le monde.

――Faites au moins un conteneur en le divisant en Web (+ PHP) et DB

Vous pouvez créer un environnement dans lequel le travail progresse relativement rapidement en considérant simplement la combinaison d'images et de conteneurs.


Source / Référence

https://www.fsi.co.jp/solution/vmware/knowledge/virtualization.html https://qiita.com/r-tominaga/items/8ac588d603802572185f https://qiita.com/Qiita/items/4ff5873776992f0511d6 https://docs.docker.jp/compose/overview.html https://qiita.com/s-suefusa/items/cb3c4044da3b3657dbd0

Recommended Posts

Après avoir résumé le plan de virtualisation, pensez à utiliser Docker pour les entreprises
Commande pour essayer d'utiliser Docker pour le moment
Utilisez MailHog pour vérifier le courrier dans l'environnement de développement (à l'aide de Docker)