Erstellen Sie Docker Engine --Community Edition aus dem Quellcode. Die neuesten Quell-Builds ändern sich in vielerlei Hinsicht. Quell-Build-Informationen sind an anderer Stelle verfügbar, aber ich habe keine japanischen Informationen mit den neuesten Build-Anweisungen gesehen. Wenn die Informationen etwas alt sind, ist die Erstellungsprozedur anders [^ 1]. Daher zeigt der Text den neuesten Build der Docker-ce-19.03.11-Quelle ab Juni 2020.
[^ 1]: Erstens hat sich die Projektstruktur von Docker geändert, und die Docker Engine unterliegt jetzt der Verantwortung von Moby Project. Daher sind die Informationen von [https://github.com/docker/docker] für die Git-Quelle veraltet. Da die Builds des Docker-Daemons und des Docker-Clients zu einem bestimmten Zeitpunkt getrennt wurden, ist außerdem die Prozedur im Haupttext erforderlich, um den Daemon und den Client gleichzeitig zu erstellen.
Bitte seien Sie vorsichtig, wenn Sie das im Text beschriebene Verfahren befolgen. In der Linux-Distribution, die viele Leute verwenden, gibt es einen Paketmanager, und ich denke, dass das Docker-Modul als Paket installiert ist. Die Arbeit im Text versucht, den gepackten Docker zu deaktivieren und durch einen selbst erstellten Docker zu ersetzen. Da ich Linux From Scratch verwende, berücksichtige ich den Paketmanager nicht und zögere nicht, ihn als "/ usr / bin" zu installieren. Stellen Sie sicher, dass Sie die vom Paketmanager verwalteten Bedingungen und die Risiken einer Umweltschädigung vollständig verstanden haben, bevor Sie mit dem Text fortfahren. Ergreifen Sie beispielsweise Maßnahmen wie das Festlegen des Installationsziels auf "/ usr / local / bin".
Der Autor ist [Linux From Scratch](http: //), wie in diesem Qiita-Beitrag "Einführung von Docker Engine in Linux From Scratch" gezeigt. Wir verwenden ein Linux-Betriebssystem, das auf der Grundlage von www.linuxfromscratch.org erstellt wurde, und wir werden die Quelle auf diesem Betriebssystem erstellen. Ich denke jedoch, dass diese Quell-Build-Methode für Linux-Betriebssysteme im Allgemeinen funktioniert. Dies liegt daran, dass beim Erstellen aus einer Docker-Quelle ein Docker-Container mit Docker (genauer gesagt Docker-Daemon) erstellt wird, der bereits auf dem System (= Hostsystem) installiert ist, auf dem der Quell-Build ausgeführt wird, und die Quelle in diesem Container erstellt wird. Weil es baut. In einer in einem Container gekapselten Umgebung werden die erforderlichen Build-Tools wie Docker dynamisch installiert, dh zu diesem Zeitpunkt installiert und erstellt, sodass jedes Linux-Hostsystem verwendet werden kann und die Build-Tools im Host-System installiert werden. Sie können es auch dann erstellen, wenn es nicht in Ordnung ist.
Im Allgemeinen werden die folgenden Annahmen getroffen.
Im Folgenden wird dieser Vorgang vom Root-Benutzer ausgeführt. Bitte seien Sie vorsichtig.
Es gibt zwei Möglichkeiten, um die Quelle zu erhalten. Eine besteht darin, den in Tarball zusammengefassten Quellcode zu verwenden. Und die andere ist, die neueste Quelle aus dem Git-Repository zu holen, wie es oft überall erklärt wird. Ich denke, Sie sollten sich je nach Zweck und Präferenz für eine entscheiden, aber ich empfehle die Tarball-Methode.
git
-Methode, wenn Sie wirklich die neueste Quelle erhalten möchten (die neueste von git HEAD, die von Zeit zu Zeit aktualisiert wird) oder wenn Sie den Änderungsverlauf des Quellcodes überprüfen oder verfolgen müssen. .. Aber die Frage ist "wirklich", zum Beispiel, ob Sie wirklich eine neue Quelle benötigen, die heute vor ungefähr 5 Minuten aktualisiert wurde. Wenn Sie kein Entwickler sind, benötigen Sie wahrscheinlich nicht die neuesten Quellen. Beachten Sie vielmehr, dass es keine Garantie dafür gibt, dass die Git-HEAD-Quelle immer vollständig fehlerfrei erstellt wird. Selbst wenn Sie lange brauchen, um die Quelle zu erstellen, bedeutet dies nicht, dass Sie am Ende einen Erstellungsfehler erhalten, oder es funktioniert aufgrund eines Laufzeitfehlers nicht. Daher wird nicht empfohlen, die Quelle mit "git" zu erhalten, es sei denn, es gibt einen klaren Zweck.Die Tarball-Quelle wird auf der offiziellen Release-Seite der Docker Github-Website (https://github.com/docker/docker-ce/releases) bereitgestellt. In der Mitte der langen und langen Release-Beschreibung befindet sich ein Tarball-Download-Link, der schwer zu verstehen ist. Wenn Sie genau hinschauen, [Quellcode] (tar.gz)](https://github.com/docker/docker-ce/archive/v19.03.11.tar.gz). Im Text wird das zum Zeitpunkt des Schreibens aktuellste "v19.03.11.tar.gz" verwendet.
Verwenden Sie also "wget" zum Herunterladen. Verwenden Sie für das Download-Verzeichnis "/ mnt / lfs / sources" als Beispiel für das Verzeichnis für die Quell-Erstellung.
Es ist hier ein persönlicher Geschmack, aber da der Name des Tarballs "v19.03.11.tar.gz" lautet, können Sie den Quell-Tarball nicht einfach anhand dessen betrachten. In Anbetracht dessen, dass wir es später verwalten werden, werden wir die Datei umbenennen und sie mit der Option wget`` --output-document
herunterladen, wie unten gezeigt.
# cd /mnt/lfs/sources
# wget -N https://github.com/docker/docker-ce/archive/v19.03.11.tar.gz \
--output-document docker-ce-19.03.11.tar.gz
Wenn Sie den Inhalt von Tarball nur für den Fall überprüfen, können Sie sehen, dass verschiedene Quellcodes im Verzeichnis "docker-ce-19.03.11" gesammelt werden.
# tar tf docker-ce-19.03.11.tar.gz | less
docker-ce-19.03.11/
docker-ce-19.03.11/.github/
docker-ce-19.03.11/.github/PULL_REQUEST_TEMPLATE
docker-ce-19.03.11/.gitignore
docker-ce-19.03.11/CHANGELOG.md
docker-ce-19.03.11/CONTRIBUTING.md
docker-ce-19.03.11/Makefile
docker-ce-19.03.11/README.md
docker-ce-19.03.11/VERSION
docker-ce-19.03.11/components.conf
docker-ce-19.03.11/components/
docker-ce-19.03.11/components/cli/
docker-ce-19.03.11/components/cli/.dockerignore
(Folgendes wird weggelassen)
Entpacken (dekomprimieren) Sie den Tarball und verschieben Sie ihn in das oberste Quellverzeichnis docker-ce-19.03.11
.
# tar xf docker-ce-19.03.11.tar.gz
# cd docker-ce-19.03.11
Wenn Sie sich für diesen Tarball entscheiden, überspringen Sie die Beschreibung "git" unten und fahren Sie mit Abschnitt 2 fort. Source Build.
Klonen Sie das offizielle Docker git
Repository, um den neuesten Quellcode zu erhalten. Ein neues Docker-CE-Verzeichnis wird erstellt. Gehen Sie also zu diesem Verzeichnis.
# cd /mnt/lfs/sources
# git clone https://github.com/docker/docker-ce.git
# cd docker-ce
Bevor Sie mit dem Quell-Build fortfahren, legen Sie zunächst die Build-Richtlinie fest.
Wenn Sie das Quellverzeichnis eingeben und "make" eingeben, wird der Build-Prozess allein nicht gestartet und eine Liste der Build-Ziele für "make" angezeigt. make
wurde entwickelt, um mit einem bestimmten Build-Ziel als Argument ausgeführt zu werden. Mit anderen Worten, Sie müssen entscheiden, welches Build-Ziel Sie auswählen möchten. Es gibt mehrere Ziele, aber es gibt drei Möglichkeiten, ein neues Docker-Ausführungsmodul zu erstellen.
Wenn Sie keinen eindeutigen Build-Zweck haben, sollten Sie unter dem Strich "statisch" wählen. Ich werde dies im Text wählen.
Wie der Name schon sagt, sollen deb
und rpm
die deb- bzw. rpm-Pakete erstellen. Ich habe es nicht wirklich ausprobiert, daher werde ich es in diesem Artikel nicht erklären.
Die Auswahl des statischen Erstellungsziels "make" hat den Nachteil, dass zu viele ausführbare Module erstellt werden. Insbesondere werden alle Ausführungsmodule für kompatible Architekturen wie Linux, Windows, Mac und ARM überkompiliert. Wenn Sie kein Entwickler sind, der versucht, all dies zu erstellen, brauchen Sie nicht alles. Obwohl das Erstellen von Docker-Quell-Builds lange dauert, erfordert das Erstellen aller Elemente ein hohes Maß an Vorbereitung.
Mein Bewusstsein ist es, die Docker-Daemon- und Client-Module, die unter Linux ausgeführt werden, mit einem Quell-Build neu zu konfigurieren, ohne dass eine ausführbare Windows- oder Mac-Datei erforderlich ist. Stellen Sie also sicher, dass Sie nur die ausführbare Linux-Datei erstellen.
Der Docker-Dämon muss ausgeführt werden, damit ein Docker-Quellbuild erstellt werden kann. Wenn es nicht gestartet wird, starten Sie es wie folgt.
# systemctl start docker
Das Verzeichnis docker-ce-19.03.11
, das durch Dekomprimieren (Dekomprimieren) von Tarball erstellt wurde, ist das oberste Quellverzeichnis. (Oder docker-ce
ist das oberste Quellverzeichnis, wenn Sie es aus dem git
-Repository erhalten haben.)
D Ich werde gehen.
Wechseln Sie zunächst in das oberste Quellverzeichnis.
# cd /mnt/lfs/sources/docker-ce-19.03.11
Führen Sie dann make static
aus. Wenn Sie es jedoch so ausführen, wie es ist, werden alle Ausführungsmodule für die entsprechende Architektur wie oben erwähnt erstellt. Geben Sie Folgendes ein, um nur das ausführbare Modul für Linux zu erstellen:
# make static DOCKER_BUILD_PKGS=static-linux
Ich werde kurz die Bedeutung des obigen Befehls erläutern.
DOCKER_BUILD_PKGS
befindet sich in Makefile
in
.PHONY: static
static: DOCKER_BUILD_PKGS:=static-linux cross-mac cross-win cross-arm
Wenn Sie einfach make static
ausführen, wird der Prozess mit der Variablendefinition von DOCKER_BUILD_PKGS: = static-linux cross-mac cross-win cross-arm
fortgesetzt. Das ist der Standardprozess. Die Methode des Textes besteht darin, dies zu überschreiben und als "DOCKER_BUILD_PKGS = static-linux" zu definieren und "make static" auszuführen.
Die in dieser Variablendefinition enthaltenen Zeichen sind leicht vorstellbar. "Cross-Mac" bedeutet "Cross-Compiled Running Binary" für Mac, "Cross-Win" bedeutet "Running Binary" für Windows und "Cross-Arm" bedeutet "Running Binary" für ARM. Standardmäßig wird hier alles erstellt. Im Text habe ich beschlossen, nur die Ausführungsbinärdatei für Linux zu erstellen, indem ich diese Variable auf DOCKER_BUILD_PKGS = static-linux
gesetzt habe. Durch Ändern dieses Variablenwerts ist es jedoch möglich, das Build-Ziel im Detail festzulegen. Das ist.
Übrigens habe ich den Befehl time verwendet, um die Erstellungszeit für alle Modul-Builds zu messen, indem ich nur "make static" und Linux-Modul-Builds mit "DOCKER_BUILD_PKGS = static-linux" ausgeführt habe. Die Build-Umgebung ist dieselbe Umgebung mit virtuellem Image unter VMware, Linux From Scratch, Speicher 2 GB, Swap 1 GB. Sehen Sie den überwältigenden Unterschied.
Verarbeitungsmethode | Verarbeitungsbefehl | Verarbeitungszeit |
---|---|---|
Alle Module bauen | make static |
4 Stunden 06 Minuten 49 Sekunden |
Nur Linux-Modul erstellen | make static DOCKER_BUILD_PKGS=static-linux |
59 Minuten 04 Sekunden |
In allen Modul-Builds erstellen wir 4 Modultypen für die Architektur: "Static-Linux", "Cross-Mac", "Cross-Win" und "Cross-Arm". Die Erstellung einer Architektur dauert ungefähr 1 Stunde. Das Ergebnis ist, dass es notwendig ist.
Ausführungsmodule, die von make static
erstellt wurden, werden in <Quellverzeichnis> / components / package / static / build / linux
gespeichert. Einer ist ein Tarball, der Ausführungsmodule sammelt, und der andere ist ein einzelnes Ausführungsmodul im Unterverzeichnis "Docker" (und "Docker-Rootless-Extras"). Ich werde. Die Situation ist wie folgt. Sie können zwei Tarballs und die Unterverzeichnisse "Docker" und "Docker-Rootless-Extras" sehen.
# cd /mnt/lfs/sources/docker-ce-19.03.11
# cd components/packaging/static/build/linux
# ls
docker docker-rootless-extras
docker-19.03.11.tgz docker-rootless-extras-19.03.11.tgz
Wenn Sie sich weiterhin die Unterverzeichnisse "Docker" und "Docker-Rootless-Extras" oben ansehen, ist das ausführbare Modul immer noch vorhanden.
# ls docker
containerd ctr docker-init dockerd
containerd-shim docker docker-proxy runc
# ls docker-rootless-extras
dockerd-rootless.sh rootlesskit rootlesskit-docker-proxy vpnkit
Die nächste Installationsmethode besteht darin, den Tarball irgendwo zu kopieren und zu speichern. In einigen Fällen kopieren Sie ihn auf einen anderen Computer und installieren ihn. Sie können das ausführbare Modul im Unterverzeichnis docker
(und docker-rootless-extras
) einfach direkt auf das Hostsystem kopieren. Wählen Sie die geeignete Methode entsprechend Ihren Anforderungen. Im Text werden wir mit der letzteren Methode fortfahren.
Der Docker-Dienst wird neu installiert. Beenden Sie daher zuerst den Docker-Dienst.
# systemctl stop docker
Wenn Sie dies nicht tun, wird "systemd", selbst wenn Sie versuchen, das Ausführungsmodul "Dockerd" des Docker-Daemons zu kopieren und zu installieren, das alte "Dockerd" abrufen und Sie erhalten ein neues Ausführungsmodul. Überschreiben ist nicht möglich.
Erstellen Sie bei Bedarf eine Sicherungskopie des von Ihnen verwendeten Docker-Moduls. Verschieben Sie es in ein Verzeichnis und speichern Sie es oder speichern Sie es mit einem Suffix wie ".orig". Der Sicherungsvorgang wird im Text nicht angezeigt. Bitte verwenden Sie die Methode Ihrer Wahl.
Wenn Sie sich der Situation bewusst sind und dies möglich ist, können Sie alternativ alle vorherigen Docker-Ausführungsmodule entfernen. Wenn Sie Docker-bezogene Pakete mit dem von Ihrer Linux-Distribution bereitgestellten Package Manager installiert haben, möchten Sie diese möglicherweise entfernen. Ich werde es jedoch viele Male schreiben, aber nur, wenn ich die Situation vollständig verstehe.
Wie oben gezeigt, wird das neu erstellte Ausführungsmodul unter dem Quellverzeichnis abgelegt, sodass es eine Methode ist, um es direkt nach "/ usr / bin" zu kopieren. Kopieren Sie einfach aus dem Quellverzeichnis nach / usr / bin
.
Ich habe erklärt, dass sich das einzelne Ausführungsmodul in "
# cd /mnt/lfs/sources/docker-ce-19.03.11
# cd components/packaging/static/build/linux/docker
# cp * /usr/bin
Wenn Sie auch die ausführbare Datei rootless installieren möchten, machen Sie dasselbe für das Verzeichnis docker-rootless-extras
.
# cd /mnt/lfs/sources/docker-ce-19.03.11
# cd components/packaging/static/build/linux/docker-rootless-extras
# cp * /usr/bin
Versuchen Sie, "Docker", "Dockerd" und andere ausführbare Module, die in "/ usr / bin" installiert sind, mit der Option "--version" auszuführen. Stellen Sie sicher, dass Sie die neue Version installiert haben.
# which -a docker
/usr/bin/docker
# docker --version
Docker version 19.03.11, build
# which -a dockerd
/usr/bin/dockerd
# dockerd --version
Docker version 19.03.11, build unsupported
Starten Sie den Docker-Dienst, der gestoppt wurde.
Wenn docker.service
und docker.socket
korrekt vorbereitet sind, startet hier ein neues Docker-Daemon-Ausführungsmodul dockerd
. Ich werde es tatsächlich bewegen.
# systemctl start docker.service
Versuchen Sie anschließend, "Docker run hello-world" und die offizielle Docker-Dokumentation Tutorial auszuführen, damit der Docker-Daemon und der Docker-Client funktionieren. Versicher dich.
Das ist alles für den Text.
Recommended Posts