――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.
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.
Am Beispiel von drei wichtigen Virtualisierungsmethoden werden die Vor- und Nachteile sowie der Vergleich mit allgemeinen Servern zusammengefasst.
Anwendungen, die auf einem Betriebssystem ausgeführt werden, das direkt auf der Hardware installiert ist
Vorteile
Einfache und übersichtliche App funktioniert
Geringer Overhead für die Ausführung von Anwendungen
Nachteil
Dies kann sich nachteilig auf die Freigabe von Systemeinstellungen zwischen Anwendungen auswirken.
Computerressourcen können nicht effektiv genutzt werden (z. B. für eine Anwendung, die 1 Stunde lang nur einmal am Tag ausgeführt wird, wird der Server für die verbleibenden 23 Stunden im Standby-Zustand gestartet).
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
Vorteile
Einfache Installation auch auf Servern, die keine Virtualisierung verwendet haben
Nachteil
Wenn eine Anwendung auf dem Gastbetriebssystem ausgeführt wird, wenn Hardware usw. verwendet wird, ist der Overhead relativ hoch, da er über das Gastbetriebssystem und das Hostbetriebssystem läuft.
Produkte und Anwendungen
VMware Workstation/Player/Fusion
VirtualBox
Hyper-V
XP-Modus nach Windows 7
Eine Methode zum Ausführen von Verwaltungssoftware für virtuelle Umgebungen, die als Hypervisor auf Hardware bezeichnet wird
Vorteile
Da das Host-Betriebssystem nicht verwendet wird, kann die Hardware direkt an das Gast-Betriebssystem angeschlossen werden.
Geringerer Overhead beim Ausführen von Anwendungen auf dem Gastbetriebssystem als der Hosttyp --Hypervisoren verfügen häufig über eine Funktion, die die Verwaltung virtueller Umgebungen relativ einfach macht.
Nachteil
Da das vorhandene Host-Betriebssystem nicht auf dem Server verwendet werden kann, muss ein neuer Server mit installiertem Hypervisor erstellt werden.
Produkte und Anwendungen
Vmware ESXi
Xen
VMware vSphere
Hyper-V
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
Vorteile
Leichtgewicht, da Sie eine virtuelle Umgebung als Container vorbereiten können
Da es nicht über das Gastbetriebssystem läuft, wird es schnell gestartet.
Nachteil
Container für verschiedene Host-Betriebssysteme können nicht verwendet werden (Container für Windows-Betriebssysteme funktionieren unter Linux nicht)
Wenn Sie Hardware verwenden, ist dies etwas ärgerlich, da ein Gleichgewicht mit dem Host-Betriebssystem besteht.
In Bezug auf die gemeinsame Nutzung des Betriebssystems mit dem Host ist der Freiheitsgrad geringer als bei der Verwendung einer virtuellen Maschine.
Es wird als Prozess auf der Anwendungsebene ausgeführt. Da das später beschriebene Docker-Image jedoch relativ groß ist, ist es schwierig zu arbeiten, wenn der Speicher auf der Hostseite klein ist. --Dateien und Daten, die gespeichert werden sollen, verschwinden, wenn der Container gelöscht wird, es sei denn, sie sind ordnungsgemäß "persistent".
Produkte und Anwendungen
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.
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/
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
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 ein Image des Webservers und starten Sie das Image.
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
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
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
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
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
Befehl: Docker Attach [CONTAINER ID]
Abhängig von der Option -d oder der Beschreibungsmethode der Docker-Datei ist sie möglicherweise nicht enthalten.
http://(サーバのIPアドレス)
Sie können bestätigen, dass der Webserver ausgeführt wird, indem Sie auf zugreifen.
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.
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.
Da der Name durch den Containernamen vom Host-Betriebssystem aufgelöst werden kann, können Sie sich auch per SSH anmelden.
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, 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.
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!
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.
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
# docker-compose down
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
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.
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