[LINUX] Docker Engine --CE-Quell-Build

Einführung

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".

Annahme

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.

Verfahren

Im Folgenden wird dieser Vorgang vom Root-Benutzer ausgeführt. Bitte seien Sie vorsichtig.

1. Quelle herunterladen

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.

1.1. Holen Sie sich Tarball

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.

1.2. Erhalten der Quelle durch "git"

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

2. Quell-Build

2.1 Entscheidung über die Erstellungsrichtlinie

Bevor Sie mit dem Quell-Build fortfahren, legen Sie zunächst die Build-Richtlinie fest.

2.1.1. Bestimmen des Build-Ziels

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.

2.1.2. Maßnahmen für minimalen Build

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.

2.2 Vor dem Bau prüfen

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
2.3 Führen Sie den Build aus

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.

.PHONY: static
static: DOCKER_BUILD_PKGS:=static-linux cross-mac cross-win cross-arm
2.4. Überprüfung der Build-Verarbeitungszeit

Ü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.

3. Installation (Ausführungsmodul speichern)

3.1. Bestätigung des Ausführungsmoduls

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.

3.2 Beenden des Docker-Dienstes

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.

3.3. Sicherung (oder Löschung) des Ausführungsmoduls bis zu diesem Zeitpunkt

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.

3.4 Installation des Ausführungsmoduls

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 " / components / package / static / build / linux / docker" befindet. Gehen Sie nach wie vor wie folgt vor, wenn das oberste Quellverzeichnis "/ mnt / lfs / sources / docker-ce-19.03.11" lautet:

# 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
3.5 Starten Sie den Docker-Dienst neu

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
3.6 Funktionsprüfung

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

Docker Engine --CE-Quell-Build
Erstellen Sie PostgreSQL aus dem Quellcode
Für die Erstellung der SciPy 1.4-Quelle ist pybind11 erforderlich
Docker Build - Hilfe japanische Übersetzung
Docker bauen Python basierend auf alpinen
Erstellen Sie mit Docker eine Go-Umgebung
Erstellen Sie eine Deb-Datei mit Docker
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Google AppEngine-Entwicklung mit Docker