So stellen Sie Docker -Bilder mit Dockerfiles an

So stellen Sie Docker -Bilder mit Dockerfiles an

Dieser Artikel zeigt, wie Docker -Bilder mithilfe einer Beschreibungsdatei mit dem Namen angepasst werden können Dockerfile. Sie werden sehen, wie Sie vorhandene Bilder erweitern, diese an Ihre Bedürfnisse anpassen und auch das resultierende Bild an Docker Hub veröffentlichen können.

In diesem Tutorial lernen Sie:

  • So passen Sie ein Bild mit einer Dockerfile an.
  • So veröffentlichen Sie das resultierende Bild in Docker Hub.
HTTPS ist aktiviert.

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Ubuntu 18.04 Bionischer Biber
Software Docker
Andere Privilegierter Zugriff auf Ihr Linux -System als Root oder über die sudo Befehl.
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Einführung



Die vorherigen Artikel präsentierten Docker -Konzepte und einige grundlegende Docker -Befehle. In diesem Artikel sehen Sie, wie Sie ein vorhandenes Docker -Image anpassen und erweitern, die Änderungen in einer Dockerfile beschreiben und das Bild in einer Registrierung veröffentlichen können.

Die Dockerfile

Im vorherigen Artikel haben Sie Änderungen an einem laufenden Container vorgenommen und die Änderungen am lokalen Bildcache festgelegt. Obwohl es sich um eine hilfreiche Ressource für bestimmte Situationen handelt, wird empfohlen, Anpassungen auf dokumentiertere Weise vorgenommen zu werden, damit das Bild an andere Hosts bereitgestellt werden kann. Die empfohlene Möglichkeit besteht darin, eine Dockerfile zu schreiben.

Die DockerFile ist eine YAML.

Beginnen wir mit einer einfachen Dockerfile, die das Paket installiert Requisiten (Enthält Befehle htop Und ps) zu einem Debian -Bild.

Erstellen Sie ein neues Verzeichnis, nehmen Sie sich darauf ein und speichern Sie die folgende Datei mit dem Namen Dockerfile (Kapital d):

Aus Debian run apt-Get-Update && \ apt-Get -y install Procps 
Kopieren

In dieser Dockerfile heißt es, dass das Basisbild Debian heißt (AUS Klausel). Wenn es nicht lokal existiert, wird es aus dem Docker Hub heruntergeladen. Der LAUFEN Befehl wird ausgeführt apt-get zweimal. Beachten Sie die Verwendung eines Backslash (\), um eine Linie zu brechen, und die Verwendung von -y Um die Bestätigungsaufforderung zu überspringen APT-GET-Installation.

Der nächste Schritt besteht darin, das Bild mit zu erstellen Docker Build.



$ Docker Build -t Mydebian . Senden von Build -Kontext an Docker Daemon 2.048kB Step 1/2 : FROM debian ---> be2868bebaba Step 2/2 : RUN apt-get update && apt-get -y install procps ---> Running in 52a16b346afc… Removing intermediate container 52a16b346afc ---> f21a05a59966 Successfully built F21A05A59966 erfolgreich mit dem Tag Mydebian: Neueste 
Kopieren

Die Flagge -T Mydebian Benennt das neue Bild. Der Punkt (.) fordert Docker an, das aktuelle Verzeichnis zu verwenden, um nach einer Dockerfile zu suchen. Beachten Sie, dass neue Ebenen erstellt und entfernt werden, wenn die Zeilen der Dockerfile interpretiert werden.

Es muss ein neues Bild im lokalen Cache geben.

$ Docker Images Repository Tag Bild -ID Erstellt Größe Mydebian Neueste F21A05A59966 Vor 8 Minuten 119MB Debian neuestes BE2868Bebaba vor 7 Wochen 101MB 
Kopieren

Ein Behälter aus diesem Bild kann erstellt werden.

$ docer run -it --Name mydebian_container mydebian root@ef9eb174874a:/# ps -f uid pid ppid c Stime tty ty cmd root 1 0 0 02:43 PTS/0 00:00:00 BASH Wurzel 9 1 02:43 PTS/0 00:00:00 PS -f -f 
Kopieren

Von nun an können Sie Container erstellen, die Debian mit dem ausführen Procps Paket und die Befehle htop Und ps wird bereits installiert sein.

Lassen Sie uns nun eine Dockerfile erstellen, damit Apache und PHP zur Bildaufbauzeit installiert sind, um dieselben Ziele des vorherigen Artikels zu erreichen, wenn die Befehle im Container ausgeführt wurden.

Aus Debian run apt-Get-Update && \ apt-Get -y install Procps libapache2-mod-php cmd Service Apache2 Start 
Kopieren

Wir haben hinzugefügt libapache2-mod-php in Zeile 3 und a CMD Befehl in Zeile 4, um Apache zu starten. Wenn der Behälter begonnen wird, ist der CMD Befehl wird ausgeführt. Es kann nur einen existieren CMD Befehl pro Dockerfile. Wenn das CMD Der Befehl wird angegeben, er ersetzt die CMD Befehl des Bildes, das Sie ausdehnen. Wenn der CMD Der Befehl wird weggelassen, das Basisbild wird ausgeführt (falls vorhanden). Wie Sie vielleicht vermutet haben, hat die Dockerfile des Debian -Basisbildes a CMD Befehl zur Ausführung von Bash. Sie können dies im Docker Hub überprüfen.



$ docker run -d --name mydebian_container2 -d -p 8000:80 -v "$PWD":/var/www/html mydebian ad325685b738464c49bff40b65c6824160105ab5c285282efefbc4ddeec20ba2 roger@slash:~/LinuxConfig/04 Dockerfile$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS Ports Namen AD325685B738 Mydebian "/bin/sh -C 'Service…" Vor 5 Sekunden 0 Anzug 0).0.0.0: 8000-> 80/TCP mydebian_container2 
Kopieren

Diesmal haben wir den Container mit dem gestartet -D Schalter, weil wir möchten, dass es vom Terminal abgelöst wird.

Wichtige Dockerfile -Befehle

Die Dockerfile hat andere Befehle darüber hinaus AUS, LAUFEN, Und CMD.

Befehl Env wird verwendet, um Umgebungsvariablen im Bild festzulegen, wie HTTP-Proxy, Zum Beispiel. Viele Bilder verwenden Umgebungsvariablen, um Parameter an den neuen Container zu übergeben. Beispiele überprüfen Sie die Bilder von Datenbanken wie MySQL und PostgreSQL in Docker Hub.

Befehl KOPIEREN Kopiert Dateien und Verzeichnisse vom Host zum Bild zum Bauzeit. Der Quellpfad (erstes Argument) ist relativ zum aktuellen Verzeichnis.

Befehl HINZUFÜGEN ist ähnlich wie KOPIEREN, Mit dem Unterschied, dass, wenn die Quelle eine komprimierte Tar -Datei ist, automatisch im Zielverzeichnis im Bild dekomprimiert wird. Mit Ausnahme dieser Verwendung empfiehlt Docker die Verwendung des KOPIEREN Befehl, wann immer möglich.

Befehl EXPONIEREN Gibt an, welche Ports des Bildes durch Docker freigelegt werden können. Während der Containererstellung können diese Ports auf Wunsch auf Host -Ports abgebildet werden.

Befehl Workdir Legt das Verzeichnis fest, das Docker verwendet, wenn Befehle im Container mit ausgeführt werden Docker Exec.

Erstellen eines Bildes mit aktivierter HTTPS

Jetzt erweitern wir das offizielle Php-Apache-Bild, um SSL mit einem automatisch generierten Zertifikat auf exemplyfy zu aktivieren, wie die genannten Befehle verwendet werden. Erstellen Sie in einem neuen Verzeichnis die folgende Dockerfile.



Von PHP: 7 -APACHE RUN OPENSSL REQ -X509 -NODES -Days 365 -NewKey RSA: 2048 -keeout/etc/ssl/privat/ssl -cert -snakeoiloil.Key -out/etc/ssl/certs/ssl-cert-seltsamoiloil.PEM -SUBJ "/C = Br/ST = Rio Grande do sul/l = porto alegre/o = Sicherheit/ou = Entwicklung/cn = Beispiel.com "Run a2enmod Rewrite Run A2ensit Standard-SSL Run A2enmod SSL Expose 443 Kopie ./html/var/www/html WorkDir/var/www/html 
Kopieren

In Zeile 3 erstellen wir ein Zertifikat. Zeilen 5 - 7 Aktivieren Sie Mod_rewrite und SSL. Zeile 9 enthält Port 443 (Port 80 wird bereits vom vorgelagerten Bild ausgesetzt). Zeile 11 fügt das Anwendungsverzeichnis dem Container hinzu. Schließlich legt Zeile 13 das Arbeitsverzeichnis als Apache -Arbeitsverzeichnis fest. Alle Befehle von ausgeführt von Docker Exec Verwendet dieses Verzeichnis standardmäßig die Basis.

Erstellen Sie nun ein Verzeichnis mit dem Namen html und eine Datei mit dem Namen Phpinfo.Php mit diesem Inhalt.

 
Kopieren

Lassen Sie uns nun den Behälter bauen und laufen.

Docker Build -t app_image . Docker Run -d - -RM -P 80:80 -P 443: 443 --Name app_container app_image 
Kopieren

Jetzt können Sie zugreifen Phpinfo.Php Skript durch beide, http und https.

http: // localhost/phpinfo.PHP https: // localhost/phpinfo.Php 
Kopieren HTTPS ist aktiviert.

In HTTPS beschwert sich der Browser über die Sicherheit des Zertifikats, da dies selbst signiert ist, aber die Warnung kann ignoriert werden.

Bilder im Docker Hub veröffentlichen



Die erstellten Bilder existieren nur lokal im lokalen Cache von Docker. Möglicherweise möchten Sie sie mit anderen Docker -Hosts oder mit Teamkollegen teilen oder sogar der Welt öffentlich machen. In jedem Fall möchten Sie Ihre Bilder in einer Docker -Registrierung veröffentlichen. Sie können in einer Cloud-basierten Registrierung wie dem Docker-Hub veröffentlicht werden, das übrigens der Standard ist, wenn Sie die Registrierung nicht explizit angeben. Erstellen Sie zunächst eine kostenlose Docker -ID und melden Sie sich dann an:

$ docker login Anmelden mit Ihrer Docker -ID zum Drücken und Ziehen von Bildern von Docker Hub. Wenn Sie keine Docker -ID haben, gehen Sie zu https: // Hub.Docker.com, um einen zu erstellen. Benutzername: Infroger Passwort: Anmeldung erfolgreich 
Kopieren

Markieren Sie als Nächstes das Bild mit dem Repository -Namen (Infroger), Bildname und Tag (Bildversion).

$ Docker Tag App_image Infroger/App_image: 1 $ Docker Bilder Repository -Tag -Bild -ID Erstellt Größe Infroger/App_image 1 C093151fc68f vor 14 Stunden 
Kopieren

Drücken Sie dann das Bild in das Repository.

$ Docker Push Infroger/app_image: 1 Der Push bezieht sich auf Repository [Docker.io/infroger/app_image] 27f7f2b01c49: Pushed 81b08cd5fe07: Pushed d1c23d198f84: Pushed e66392ad9b85: Pushed a71f63e3a00f: Pushed 9c58778f21dd: Pushed 973719bed9b7: Pushed 8f5090ef2ac0: Pushed fbdafdbe3319: Pushed a5c4801ecf39: Pushed e9ba112d38b9: Pushed 25ba5230dadf: Pushed f2907ce42b47: Pushed e31bf34cfab9: Pushed 9066d03e98e0: Pushed 96db4ce698ad: Pushed abae6a338e5c: Pushed 4572a80a7a5e: Pushed ef68f6734aa4: Pushed 1: digest: sha256:2e7e53fcdf800ad0c4837cd70014170cc869d36de5c301f2e2ced318803bf963 size: 4279 
Kopieren

Gehen Sie nun zu Docker Hub und überprüfen Sie, ob das Bild da ist:



https: // Hub.Docker.com/r/infroger/app_image 

In Docker Hub mit kostenloser Registrierung können Sie ein privates Repository mit unbegrenzten öffentlichen Repositories haben. Andernfalls möchten Sie möglicherweise Ihre eigene Docker -Registrierung ausführen, die mit einem Befehl erfolgen kann:

Docker Run -d -p 5000: 5000 -RESTART = immer -Name Registrierung Registrierung: 2 

Der Vorteil einer privaten Registrierung ist die Privatsphäre. Sie haben jedoch die Belastung, Sicherheit, hohe Verfügbarkeit, Speicheranforderungen, Zugangskontrolle usw. zu verwalten, usw.

Abschluss

In diesem Artikel haben wir behandelt, wie Sie vorhandene Bilder erweitern und diese mit einer Dockerfile an Ihre Anforderungen anpassen können. Wir haben auch gesehen, wie man die Bilder in einem Docker -Register veröffentlichen. Sie können bisher viel tun, aber wir kratzen nur an der Docker -Welt. Im nächsten Artikel werden wir eine sehr einfache Form der lokalen Containerorchestrierung mit Docker Compose sehen.

Mehr in dieser Docker -Artikelserie

  • Praktische Einführung in Docker -Container
  • So interagieren Sie mit Docker -Containern

Verwandte Linux -Tutorials:

  • Dinge zu installieren auf Ubuntu 20.04
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten
  • Dinge zu installieren auf Ubuntu 22.04
  • Mint 20: Besser als Ubuntu und Microsoft Windows?
  • So montieren Sie das ISO -Bild unter Linux
  • Wie man Kali Linux und Windows 10 Dual -Boot -Start hat
  • Ubuntu 20.04 Leitfaden