Denken Sie nach der Zusammenfassung des Virtualisierungsplans über die Verwendung von Docker für Unternehmen nach

Hintergrund

――In der internen Arbeit wird häufig eine Virtualisierung vom Host-Typ verwendet, aber ich hatte das Gefühl einer Krise, dass ich wenig Verständnis für die Virtualisierung vom Containertyp im Unternehmen hatte. Deshalb habe ich beschlossen, eine Lernsitzung zu versuchen, um die Vor- und Nachteile zusammenzufassen. habe gedacht. ――Ich habe es mit der Hoffnung geschafft, dass Sie seine Stärken und Schwächen erkennen können, indem Sie Docker berühren, eine Virtualisierung vom Containertyp, und Ihnen die Möglichkeit geben, sie mit den bisherigen Methoden zu vergleichen. ――Sie haben vielleicht darauf hingewiesen, dass die Arbeitsweise Ihres Unternehmens alt oder schlecht ist, und Sie tun dies immer noch, aber Sie sind sich dessen möglicherweise nicht einmal bewusst, sodass Sie vom Fluss der Welt ausgeschlossen werden. Um solche Kritik und Vorschläge zu vermeiden, haben wir bewusst Materialien außerhalb vorbereitet. ――Bitte weisen Sie darauf hin, wenn Fehler vorliegen.


Leute, die lesen wollen


Was ist Virtualisierung?

Virtualisierung ist eine Technologie, die mehrere Hardware in Software integriert und die Hardware mit kostenlosen Spezifikationen reproduziert und eine begrenzte Menge an physischen Ressourcen (CPU, Speicher, Festplatte, Netzwerk usw.) in tatsächlicher Menge verwendet. Es soll so aussehen, als ob die oben genannten Ressourcen (logische Ressourcen) ausgeführt werden. Was ist Virtualisierung? https://www.fsi.co.jp/solution/vmware/knowledge/virtualization.html

Dies kann Ihre Arbeit erleichtern, überschüssige Computerressourcen besser nutzen, die Systemverfügbarkeit erhöhen und vieles mehr.


Arten der Virtualisierung

Am Beispiel von drei wichtigen Virtualisierungsmethoden werden die Vor- und Nachteile sowie der Vergleich mit allgemeinen Servern zusammengefasst.


Option nicht zu virtualisieren (allgemeiner Server)

Anwendungen, die auf einem Betriebssystem ausgeführt werden, das direkt auf der Hardware installiert ist

image.png


Gehostete Virtualisierung

Eine Methode zum Ausführen eines Gastbetriebssystems in einer virtuellen Umgebung, die auf einem Betriebssystem ausgeführt wird, das direkt auf der Hardware installiert ist

image.png


Virtualisierung vom Typ Hypervisor

Eine Methode zum Ausführen von Verwaltungssoftware für virtuelle Umgebungen, die als Hypervisor auf Hardware bezeichnet wird

image.png


Virtualisierung vom Containertyp

Eine Container-Engine, die als Prozess ausgeführt wird, wird auf dem Host-Betriebssystem ausgeführt und führt den Container als Anwendung aus. Virtualisieren Sie einen Prozess anstelle einer virtuellen Maschine

image.png


Versuchen Sie es mit Docker

Es gibt verschiedene Virtualisierungsmethoden wie diese, aber dieses Mal werden wir vorstellen, wie Docker, das Virtualisierung vom Containertyp verwendet, zum Erstellen einer Entwicklungsumgebung für Webanwendungen verwendet wird.

Durch das Streben nach Containervirtualisierung mithilfe von Bildern und Docker-Dateien

Der Vorteil wird geboren. Docker-Images werden auf verschiedenen Ebenen von Betriebssystemebene bis Anwendungsebene erstellt und können je nach den Anforderungen der Benutzer erstellt werden.


Beispiel

Nutzung von Docker


Installieren Sie Docker und starten Sie die Dienste

Ich werde das Verfahren zur Installation von Docker auf dem Server (Ihrem Server, VPS usw.) vorstellen.

Es wird unten ausführlich erklärt, daher werde ich es als Auszug vorstellen.

Einführung in Docker (2.) -Docker-Setup, Container-Start- https://knowledge.sakura.ad.jp/13795/

Installation

Unter der Annahme von CentOS können Sie es mit dem folgenden Befehl installieren.

# 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

Dienststart

Nach dem Start wird der Status bestätigt und die Einstellung für den automatischen Start des Dienstes zum Zeitpunkt des Neustarts wird ebenfalls durchgeführt.

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

Über den Unterschied zwischen Docker und Docker-CE https://qiita.com/s-suefusa/items/cb3c4044da3b3657dbd0


Holen Sie sich das Bild und starten Sie den Container

Holen Sie sich ein Image des Webservers und starten Sie das Image.

Holen Sie sich ein Bild

Holen Sie sich ein Image eines Webservers namens Nginx und bestätigen Sie, dass das Image wie folgt hinzugefügt wurde.

# docker pull nginx
# docker images

Container starten

Starten Sie den Container mit dem erfassten Nginx-Image. Beim Starten sind der Host und der Port auf der Containerseite zugeordnet, und im folgenden Beispiel ist die Hostseite 8181 der Containerseite 80 zugeordnet.

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

Bestätigung der Container-ID und Stopp des Containers

Befehl: 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

Container löschen

Befehl: 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
 

Lösche Bild

Das im gelöschten Container verwendete Image verbleibt im Speicher des Servers. Versuchen Sie daher, es ebenfalls zu löschen.

Befehl: 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

Betritt den Container

Befehl: Docker Attach [CONTAINER ID]

Abhängig von der Option -d oder der Beschreibungsmethode der Docker-Datei ist sie möglicherweise nicht enthalten.

Schauen Sie sich den Webserver an

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

Sie können bestätigen, dass der Webserver ausgeführt wird, indem Sie auf zugreifen.

So teilen Sie Dateien zwischen Host-Betriebssystem und Container

Bis zu diesem Punkt haben wir beschrieben, wie Bilder erfasst und gestartet werden. In der Webentwicklung ist es jedoch erforderlich, die nach dem Erstellen des Servers anzuzeigenden Dateien und Daten anzuordnen. Zu diesem Zeitpunkt müssen Dateien zwischen dem Container und dem Host ausgetauscht werden Es ist unten zusammengefasst.

So mounten Sie das Host-Betriebssystemverzeichnis auf der Containerseite

Durch Angabe der Option "-v" beim Starten des Containers ist es möglich, das Verzeichnis auf der Hostseite auf der Containerseite bereitzustellen.

Im vorherigen Nginx-Beispiel können Sie es bereitstellen, indem Sie Folgendes angeben.

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

Erstellen Sie im Voraus html / index.html

index.html


<!DOCTYPE html>

<html>
<body>

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

</body>
</html>

Wenn Sie nun index.html auf der Hostseite bearbeiten, wird es auf dem Server auf der Containerseite veröffentlicht.

SSH / SCP-Methode

Da der Name durch den Containernamen vom Host-Betriebssystem aufgelöst werden kann, können Sie sich auch per SSH anmelden.

So bauen Sie einen Server

Ich habe das Gefühl, dass es eine Möglichkeit gibt, Dateien auszutauschen, indem Sie einen Samba- oder FTP-Server im Container einrichten.

Es gibt verschiedene Möglichkeiten, aber im Fall eines Webservers, wenn Sie das Freigabeskript vorbereiten, ohne die Dateien manuell anzuordnen, indem Sie die Quelle aus dem Repository holen und zum Zeitpunkt der Containererstellung (oder nach der Erstellung) anordnen. Ich fühle mich schön


Wenn Sie mehrere Container verwenden möchten

Wenn Sie mehrere Container verwenden, ist es schwierig, die Container einzeln zu starten, sodass Sie diese Probleme durch die Verwendung von Docker-Compose usw. vermeiden können.

Docker Compose Übersicht Compose ist ein Tool für Docker-Anwendungen, die mehrere Container definieren und ausführen. Compose verwendet eine YAML-Datei, um Anwendungsdienste zu konfigurieren. Führen Sie einfach einen Befehl aus, um den Anwendungsdienst basierend auf den Einstellungen zu generieren und zu starten. https://docs.docker.jp/compose/overview.html

Mit Laravel + Docker können Sie Laradock mit einer Fahrt nutzen, aber ich denke, es ist schwierig, die Funktionen zu erfassen, weil Sie zu viel fahren.


Docker-Compose installieren und verwenden

Sie können es mit dem folgenden Befehl installieren.

※Hinweis

Verwenden der neuesten Versionsnummer verfassen im Download-Befehl Der oben gezeigte Befehl ist nur ein Beispiel, sodass es sich möglicherweise bereits um eine ältere Versionsnummer handelt. Überprüfen Sie die Versionsseite des Compose-Repositorys auf GitHub auf die neueste Version.

Releases ・ 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

Das ist alles. Einfach!


Beschreibungsbeispiel für docker-compose.yml

Wenn Sie Docker-Compose verwenden, können Sie die Mühe der Bauarbeiten und der Startverarbeitung sparen, wenn Sie mehrere Container verwenden. Erstellen Sie eine Datei mit dem Namen docker-compose.yml und konfigurieren Sie die Einstellungen, wenn Sie mehrere Container mit YAML verwenden.

Dieses Mal werde ich die Einstellungen für einen Nginx-Container beschreiben, der zuvor vom Docker-Befehl gestartet wurde.

Wir werden unter der Voraussetzung der folgenden Verzeichnisstruktur fortfahren.

Beliebiges Verzeichnis
├ docker-compose.yml
├ Dockerfile
└ /html
    └ index.html #Nginx-Dokumentstamm

docker-compose.yml ist wie folgt in YAML geschrieben

docker-compose.yml


version: '3'   #Magie
services:   
  nginx:    #Der Name des Containers
    build: .  #Der Speicherort der Docker-Datei für diesen Container
    ports:
      - "80:80" #Einstellung zum Zuordnen von Host 80 zum Container 80-Port
    volumes:
      - ./html:/usr/share/nginx/html #Einstellungen zum Mounten des Dokumentstamms auf dem Host

Fügen Sie eine Beschreibung basierend auf dem Nginx-Image in der Docker-Datei hinzu

Dockerfile


#Basisimgae (Geben Sie REPOSITORY an, das vom Docker-Images-Befehl angezeigt wird.)
FROM  nginx:latest

Platzieren Sie die HTML-Datei "index.html", die auf der Webseite angezeigt werden soll, in ". / HTML", dem Dokumentstamm.


Container-Start / Stopp-Maßnahmen bei Verwendung von Docker-Compose

Anlaufen

Führen Sie den folgenden Befehl in dem Verzeichnis aus, das die Datei docker-compose.yml der Containergruppe enthält, die Sie starten möchten.

# docker-compose up

Wenn Sie es im Hintergrund starten möchten, fügen Sie die Option "-d" hinzu.

# docker-compose up -d

Halt

# docker-compose down

[Referenz] So legen Sie docker-compose.yml fest, wenn Sie mehrere Container verwenden

Das Folgende ist ein Beschreibungsbeispiel für docker-compose.yml für die Umgebung, die Apache + PHP + MySQL für Webanwendungen verwendet. (Mit phpmyadmin)

In docker-compose.yml können Sie den Containertyp, den Dockerfile-Pfad, die Einstellungen und Optionen beim Starten des Containers beschreiben. Sie müssen jedoch jede Datei an dem Speicherort ablegen, auf den in docker-compose.yml verwiesen wird. Es gibt. Die Verzeichnisstruktur wie Dockerfile finden Sie im folgenden Repository.

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(Sei hier vorsichtig)
      MYSQL_USER: templatedbuser(Sei hier vorsichtig)
      MYSQL_PASSWORD: templatedbpass(Sei hier vorsichtig)
      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(Sei hier vorsichtig)
      PMA_USER: templatedbuser(Sei hier vorsichtig)
      PMA_PASSWORD: templatedbpass(Sei hier vorsichtig)
      PMA_PORT: 3306
    links:
      - template-db
    ports:
      - 8080:80
    volumes:
      - ./phpMyAdmin/sessions:/sessions
    depends_on:
      - template-db

Best Practice bei der Verwendung von Docker-Compose

Bei der Konfiguration einer gemeinsamen Webanwendung von Webserver + PHP + DB

――Verpacken Sie nicht alles in einem Behälter ――Die Docker-Datei wird wahrscheinlich kompliziert, wenn Sie anfangen, alles zu packen ――Ich verstehe nicht, auch wenn Sie es später ansehen. Schwer wiederzuverwenden.

――Ich mache nicht alles selbst ―― Menschen, die besser sind als Sie, machen weltweit bessere Bilder und Container.

――Erstellen Sie mindestens einen Container, indem Sie ihn in Web (+ PHP) und DB unterteilen --Wenn Sie beim Aktualisieren der Version einer DB-Anwendung eine Überprüfung durchführen, müssen Sie nur die neue Version der DB-Anwendung für den DB-Container ausführen und nur die Anwendungsseite verwalten. ――Wenn Sie das System lose konfigurieren können, indem Sie die primitive Verarbeitung gut kombinieren, ist die Entwicklung schwierig, die Reparatur dauert jedoch weniger lange. (Es sollte weniger entfettet werden)

Sie können eine Umgebung erstellen, in der die Arbeit relativ schnell voranschreitet, indem Sie die Kombination von Bildern und Containern berücksichtigen.


Quelle / Referenz

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

Denken Sie nach der Zusammenfassung des Virtualisierungsplans über die Verwendung von Docker für Unternehmen nach
Befehl, um Docker vorerst zu verwenden
Verwenden Sie MailHog zum Überprüfen von E-Mails in der Entwicklungsumgebung (mit Docker).