Neuigkeiten:
Am 13. August aktualisierte Docker seine Website-Service-Vereinbarung und untersagte damit Ländern, Organisationen und Einzelpersonen, die in mehreren Listen wie der US-amerikanischen „Entity List“ mit einem Embargo belegt sind, die Nutzung der Docker-Website und aller zugehörigen Websites, die dem Service entsprechen Vereinbarung .
Dazu gehören: Huawei, Hikvision, Dahua Technology, iFlytek, Megvii Technology, SenseTime und viele andere Technologieunternehmen sowie Universitäten wie das Harbin Institute of Technology und die Harbin Engineering University.
In diesem Artikel werden wir die mysteriöse Welt von Docker erkunden, die Grundprinzipien und praktischen Abläufe von Docker von Grund auf beherrschen und verstehen, warum Docker so wichtig ist. [Verwandte Empfehlungen: Docker-Video-Tutorial]
Im Zeitalter des Rich Web werden Anwendungen immer leistungsfähiger und gleichzeitig immer komplexer. Clusterbereitstellung, Isolationsumgebung, Graustufenfreigabe und dynamische Erweiterung sind unverzichtbar, und die Containerisierung ist zu einer notwendigen Brücke in der Mitte geworden.
Erzählen Sie eine Geschichte
Um besser zu verstehen, was Docker ist, erzählen wir zunächst eine Geschichte:
Ich musste ein Haus bauen, also bewegte ich Steine, schnitt Holz, zeichnete Zeichnungen und baute ein Haus . Nach viel Arbeit wurde das Haus endlich gebaut.
Nachdem ich dort eine Weile gelebt hatte, wollte ich plötzlich an den Strand ziehen. Zu diesem Zeitpunkt kann ich nach der vorherigen Methode nur an den Strand gehen, Steine bewegen, Holz hacken, Zeichnungen zeichnen und wieder ein Haus bauen.
Als ich Probleme hatte, kam ein Zauberer und brachte mir einen Zauber bei. Diese Magie kann eine Kopie des Hauses, das ich gebaut habe, erstellen, es zu einem „Spiegelbild“ machen und es in meinen Rucksack stecken.
Wenn ich am Strand ankomme, werde ich diesen „Spiegel“ verwenden, um ein Haus zu kopieren und einzuziehen.
Ist es nicht erstaunlich? Entsprechend unserem Projekt ist das Haus das Projekt selbst, der Spiegel ist die Kopie des Projekts und der Rucksack ist das Spiegellager.
Wenn Sie die Kapazität dynamisch erweitern möchten, nehmen Sie einfach das Projektbild aus dem Lager und kopieren Sie es nach Ihren Wünschen. Einmal erstellen, überall ausführen!
Kein Grund zur Sorge um Version, Kompatibilität, Bereitstellung und andere Probleme. Es löst die Peinlichkeit, „einmal online abzustürzen und endlos zu bauen“.
Virtuelle Maschinen und Container
Bevor wir beginnen, bereiten wir einige Grundkenntnisse vor:
①Virtuelle Maschine: Virtualisierungshardware
Virtuelle Maschine Virtuelle Maschine bezieht sich auf eine vollständige Softwaresimulation. Ein vollständiges Computersystem, das fungiert als Hardwaresystem und läuft in einer völlig isolierten Umgebung. Alles, was auf einem physischen Computer erledigt werden kann, kann auch auf einer virtuellen Maschine erledigt werden.
Beim Erstellen einer virtuellen Maschine auf einem Computer muss ein Teil der Festplatten- und Speicherkapazität der physischen Maschine als Festplatten- und Speicherkapazität der virtuellen Maschine verwendet werden.
Jede virtuelle Maschine verfügt über ein unabhängiges CMOS, eine unabhängige Festplatte und ein Betriebssystem, und die virtuelle Maschine kann wie eine physische Maschine betrieben werden. Vor der Containertechnologie waren virtuelle Maschinen der größte Einflussfaktor in der Branche.
Die Vertreter der virtuellen Maschinentechnologie sind VMWare und OpenStack.
②Container: Virtualisiert die Betriebssystemschicht und ist eine Standardsoftwareeinheit
Seine Funktionen sind wie folgt:
Überall ausführen: Container können Code mit Konfigurationsdateien und zugehörigen Abhängigkeitsbibliotheken verpacken und so einen konsistenten Betrieb gewährleisten in jeder Umgebung.
Hohe Ressourcenauslastung: Container bieten Isolierung auf Prozessebene, sodass die CPU- und Speichernutzung detaillierter eingestellt werden kann und dadurch die Rechenressourcen des Servers besser genutzt werden.
Schnelle Erweiterung: Jeder Container kann als separater Prozess ausgeführt werden und die Systemressourcen des zugrunde liegenden Betriebssystems gemeinsam nutzen, was die Effizienz beim Starten und Stoppen des Containers beschleunigen kann.
③Unterschiede und Zusammenhänge:
Obwohl eine virtuelle Maschine viele „Subcomputer“ isolieren kann, nimmt sie mehr Platz ein und startet langsamer. Auch Software für virtuelle Maschinen kann Geld kosten, beispielsweise VMWare.
Containertechnologie muss nicht das gesamte Betriebssystem virtualisieren, sondern nur eine kleine Umgebung, ähnlich einer „Sandbox“, virtualisieren.
Virtuelle Maschinen benötigen im Allgemeinen mehrere GB bis Dutzende GB Speicherplatz, während Container nur MB oder sogar KB benötigen.
Werfen wir einen Blick auf die Vergleichsdaten:
Virtuelle Maschinen sind Virtualisierungstechnologien, während Containertechnologien wie Docker leichte Virtualisierung sind.
Im Vergleich zu virtuellen Maschinen sind Container leichter und schneller, da sie das zugrunde liegende Linux-Betriebssystem nutzen, um in einer isolierten Umgebung ausgeführt zu werden.
Der Hypervisor einer virtuellen Maschine schafft eine sehr starke Grenze, um zu verhindern, dass Anwendungen ihn durchbrechen, wohingegen die Grenze eines Containers nicht so stark ist.
Lernen Sie Docker kennen
Docker ist eine Open-Source-Anwendungscontainer-Engine, die es Entwicklern ermöglicht, ihre Anwendungen und Abhängigkeiten in einen tragbaren Container zu packen und sie dann auf jeder gängigen Linux-Maschine zu veröffentlichen. Auch eine Virtualisierung ist möglich. Container nutzen vollständig den Sandbox-Mechanismus und haben keine Schnittstellen untereinander.
Die drei Kernkonzepte der Docker-Technologie sind:
Image
Container Container
Warehouse Repository
Was ist der Grund, warum Docker leicht ist? Ich glaube, Sie werden auch diesen Zweifel haben: Warum startet Docker so schnell? Wie teile ich den Kernel mit dem Host?
Wenn wir Docker auffordern, einen Container auszuführen, richtet Docker eine ressourcenisolierte Umgebung auf dem Computer ein.
Kopieren Sie dann die gepackte Anwendung und die zugehörigen Dateien in das Dateisystem innerhalb des Namespace. Zu diesem Zeitpunkt ist die Konfiguration der Umgebung abgeschlossen. Docker führt dann den von uns im Voraus angegebenen Befehl aus, um die Anwendung auszuführen.
Das Bild enthält keine dynamischen Daten und sein Inhalt wird nach der Erstellung nicht geändert.
Kernkonzepte
Die Kernkonzepte lauten wie folgt:
Build, Ship and Run (bauen, transportieren, betreiben).
Einmal erstellen, überall ausführen.
Docker selbst ist kein Container, es ist ein Tool zum Erstellen von Containern und eine Anwendungscontainer-Engine.
Die drei Kernkonzepte von Docker sind: Image, Container und Repository.
Die Docker-Technologie nutzt den Linux-Kernel und Kernel-Funktionen wie Cgroups und Namespaces, um Prozesse zu trennen, sodass sie unabhängig voneinander ausgeführt werden können.
Da Namespace- und Cgroups-Funktionen nur unter Linux verfügbar sind, können Container nicht auf anderen Betriebssystemen ausgeführt werden. Wie läuft Docker also unter macOS oder Windows? Docker nutzt tatsächlich einen Trick und installiert eine virtuelle Linux-Maschine auf einem Nicht-Linux-Betriebssystem und führt dann den Container innerhalb der virtuellen Maschine aus.
Ein Image ist ein ausführbares Paket, das den Code, die Laufzeit, die Bibliotheken, Umgebungsvariablen und Konfigurationsdateien enthält, die zum Ausführen der Anwendung erforderlich sind. Der Container ist die Laufzeitinstanz des Images.
Weitere Informationen zu den Prinzipien von Docker finden Sie im „Einfachen Leitfaden zu Docker-Arbeitsprinzipien und Containerisierung“, der hier nicht beschrieben wird:
http://dockone.io/article/8788
Installation Docker
①Befehlszeileninstallation
Homebrew's Cask unterstützt bereits Docker für Mac, sodass Sie Homebrew Cask problemlos zur Installation verwenden können. Führen Sie den folgenden Befehl aus:
brew cask install docker
Weitere Installationsmethoden finden Sie unter Offizielle Dokumentation:
https://www.docker.com/get-started
②Version anzeigen
Der Befehl lautet wie folgt:
docker -v
③Bildbeschleunigung konfigurieren
Schreibkonfiguration für Docker Engine festlegen :
{ registry-mirrors: [ http://hub-mirror.c.163.com/, https://registry.docker-cn.com ], insecure-registries:[], experimental: false, debug: true }
④Installieren der Desktop-Version
Die Desktop-Version ist sehr einfach zu bedienen. Gehen Sie zunächst auf die offizielle Website, um sie herunterzuladen [1]. Über den Docker-Desktop können wir ganz einfach Folgendes ausführen:
Klonen: Ein Projekt klonen.
build: Verpacken Sie das Bild.
run: Führen Sie die Instanz aus.
Teilen: Teilen Sie das Bild.
Okay, die Vorbereitungen sind fertig, jetzt können Sie Ihr Können unter Beweis stellen!
Schnellstart
Nach der Installation von Docker erstellen wir zunächst ein Image des eigentlichen Projekts und lernen, es zu verwenden.
①Zuerst müssen wir ein allgemeines Verständnis der 11 Befehle haben, die wir verwenden werden
wie unten gezeigt:
② Erstellen Sie ein neues Projekt
Aus Gründen der Geschwindigkeit verwenden wir direkt Vue-Gerüst zum Erstellen des Projekts:
vue create docker-demo
Versuchen Sie es zu starten:
yarn serve
Zugriffsadresse: http://localhost:8080/. Das Projekt ist fertig, dann verpacken wir das Projekt:
yarn build
Zu diesem Zeitpunkt ist Dist im Projektverzeichnis die statische Ressource, die wir bereitstellen möchten, und wir fahren mit dem nächsten Schritt fort.
Hinweis: Front-End-Projekte werden im Allgemeinen in zwei Kategorien unterteilt: Eine ist die statische Bereitstellung direkt mit Nginx und die andere erfordert den Start des Node-Dienstes. In diesem Abschnitt betrachten wir nur den ersten Typ. Was den Node-Dienst betrifft, werde ich ihn später ausführlich erläutern.
③新建 Dockerfile
命令如下:
cd docker-demo && touch Dockerfile
此时的项目目录如下:
. ├── Dockerfile ├── README.md ├── babel.config.js ├── dist ├── node_modules ├── package.json ├── public ├── src └── yarn.lock
可以看到我们已经在 docker-demo 目录下成功创建了 Dockerfile 文件。
④准备 Nginx 镜像
运行你的 Docker 桌面端,就会默认启动实例,我们在控制台拉取 Nginx 镜像:
docker pull nginx
控制台会出现如下信息:
Using default tag: latest latest: Pulling from library/nginx 8559a31e96f4: Pull complete 8d69e59170f7: Pull complete 3f9f1ec1d262: Pull complete d1f5ff4f210d: Pull complete 1e22bfa8652e: Pull complete Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest
如果你出现这样的异常,请确认 Docker 实例是否正常运行。
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
镜像准备 OK,我们在根目录创建 Nginx 配置文件:
touch default.conf
写入:
server { listen 80; server_name localhost; #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/share/nginx/html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
⑤配置镜像
打开 Dockerfile ,写入如下内容:
FROM nginx COPY dist/ /usr/share/nginx/html/ COPY default.conf /etc/nginx/conf.d/default.conf
我们逐行解释一下代码:
FROM nginx 指定该镜像是基于 nginx:latest 镜像而构建的。
COPY dist/ /usr/share/nginx/html/ 命令的意思是将项目根目录下 dist 文件夹中的所有文件复制到镜像中 /usr/share/nginx/html/ 目录下。
COPY default.conf /etc/nginx/conf.d/default.conf 将 default.conf 复制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置来替换 Nginx 镜像里的默认配置。
⑥构建镜像
Docker 通过 build 命令来构建镜像:
docker build -t jartto-docker-demo .
按照惯例,我们解释一下上述代码:
-t 参数给镜像命名 jartto-docker-demo。
. 是基于当前目录的 Dockerfile 来构建镜像。
执行成功后,将会输出:
Sending build context to Docker daemon 115.4MB Step 1/3 : FROM nginx ---> 2622e6cca7eb Step 2/3 : COPY dist/ /usr/share/nginx/html/ ---> Using cache ---> 82b31f98dce6 Step 3/3 : COPY default.conf /etc/nginx/conf.d/default.conf ---> 7df6efaf9592 Successfully built 7df6efaf9592 Successfully tagged jartto-docker-demo:latest
镜像制作成功!我们来查看一下容器:
docker image ls | grep jartto-docker-demo
可以看到,我们打出了一个 133MB 的项目镜像:
jartto-docker-demo latest 7df6efaf9592 About a minute ago 133MB
镜像也有好坏之分,后续我们将介绍如何优化,这里可以先暂时忽略。
⑦运行容器
命令如下:
docker run -d -p 3000:80 --name docker-vue jartto-docker-demo
这里解释一下参数:
-d 设置容器在后台运行。
-p 表示端口映射,把本机的 3000 端口映射到 container 的 80 端口(这样外网就能通过本机的 3000 端口访问了。
--name 设置容器名 docker-vue。
jartto-docker-demo 是我们上面构建的镜像名字。
补充一点:在控制台,我们可以通过 docker ps 查看刚运行的 Container 的 ID:
docker ps -a
控制台会输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab1375befb0b jartto-docker-demo /docker-entrypoint.… 8 minutes ago Up 7 minutes 0.0.0.0:3000->80/tcp docker-vue
如果你使用桌面端,那么打开 Docker Dashboard 就可以看到容器列表了,如下图:
⑧访问项目
因为我们映射了本机 3000 端口,所以执行:
curl -v -i localhost:3000
或者打开浏览器,访问:localhost:3000。
⑨发布镜像
如果你想为社区贡献力量,那么需要将镜像发布,方便其他开发者使用。
发布镜像需要如下步骤:
登陆 dockerhub[2],注册账号。
命令行执行 docker login,之后输入我们的账号密码,进行登录。
推送镜像之前,需要打一个 Tag,执行 docker tag
全流程结束,以后我们要使用,再也不需要「搬石头、砍木头、画图纸、盖房子」了,拎包入住。这也是 Docker 独特魅力所在。
常规操作
到这里,恭喜你已经完成了 Docker 的入门项目!如果还想继续深入,不妨接着往下看看。
①参数使用
FROM:
指定基础镜像,所有构建的镜像都必须有一个基础镜像,且 FROM 命令必须是 Dockerfile 的第一个命令
FROM
FROM
示例:FROM mysql:5.0 AS database
MAINTAINER:
镜像维护人的信息
MAINTAINER
示例:MAINTAINER Jartto Jartto@qq.com
RUN:
构建镜像时要执行的命令
RUN
示例:RUN [executable, param1, param2]
ADD:
Lokale Dateien hinzufügen und in den Container kopieren. Das komprimierte Paket wird dekomprimiert und Sie können auf die Dateien im Netzwerk zugreifen und sie automatisch herunterladen.
ADD
Die Funktion ist die gleiche wie ADD, sie kopiert nur die Datei und dekomprimiert oder lädt sie nicht herunter
Der nach dem Starten des Containers ausgeführte Befehl unterscheidet sich von RUN, dem Befehl, der beim Erstellen des Images ausgeführt werden soll.
Wenn Docker Run zum Ausführen des Containers verwendet wird, kann dies überschrieben werden in der Befehlszeile
Beispiel: CMD [ausführbare Datei, Parameter1, Parameter2]
ist ebenfalls ein Ausführungsbefehl, genau wie CMD, mit der Ausnahme, dass dieser Befehl vom nicht überschrieben wird Befehlszeile
ENTRYPOINT [ausführbare Datei, param1, param2]
Beispiel: ENTRYPOINT [donnet, myapp.dll]
LABEL
VOLUME [/var/log,/var/test.....] Gibt mehrere Verzeichnisse im Container an, die gemountet werden müssen, und ordnet diese Verzeichnisse mehreren zufälligen Verzeichnissen auf dem Host zu, um Datenpersistenz und -synchronisierung zu erreichen
VOLUME /var/data var/log gibt das Verzeichnis var/log im an Container, der im Verzeichnis /var/data auf dem Host gemountet werden soll. In diesem Formular kann das Verzeichnis auf dem Host manuell angegeben werden.
Schrittoptimierung: Schritte mit weniger Änderungen werden priorisiert.
Containerisierungstechnologie wird definitiv eine der unverzichtbaren Fähigkeiten im Cloud-Zeitalter sein, und Docker ist nur ein Tropfen auf den heißen Stein. Dazu kommen Technologien wie das Cluster-Container-Management Kubernetes, Service Mesh und Istio.
Öffnen Sie die Tür von Docker, ziehen Sie die Kokons weiter ab und gehen Sie Schicht für Schicht tiefer. Sie werden den unendlichen Charme der Containerisierung spüren.
Verwandte Links:
https://www.docker.com/products/docker-desktop
https://hub.docker.com/
https://docs. docker.com/
Originaladresse: http://jartto.wang/2020/07/04/learn-docker
Autor: jartto
Wenn Sie mehr verwandtes Wissen erfahren möchten, können Sie Folgendes besuchen: Tutorial zur Docker-Nutzung ! !