Dockerfile ist eine Datei, die zum Erstellen eines Docker-Images verwendet wird! Befehlsparameter-Skript! Schritte zum Erstellen:
# Nehmen Sie Contes als Beispiel, um die Docker-Datei von Contes auf Dockerhub anzuzeigen VON Grund auf HINZUFÜGEN centos-7-x86_64-docker.tar.xz / ETIKETT \ org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS-Basisimage" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20200809" \ org.opencontainers.image.title="CentOS-Basisimage" \ org.opencontainers.image.vendor="CentOS" \ org.opencontainers.image.licenses="GPL-2.0-only" \ org.opencontainers.image.created="2020-08-09 00:00:00+01:00" CMD ["/bin/bash"] DockerFile-Build-Prozess Grundlagen:
Dockerfile ist entwicklungsorientiert. Wenn wir in Zukunft Projekte veröffentlichen und Bilder erstellen möchten, müssen wir eine Dockerfile-Datei schreiben. Diese Datei ist sehr einfach! Docker-Images werden zunehmend zum Standard für die Bereitstellung in Unternehmen! DockerFile: erstellt das Image, definiert alle Schritte und den Quellcode; DockerImages: Ein Image, das durch Erstellen einer Docker-Datei generiert wird. Dieses Image ist das Produkt, das wir schließlich veröffentlichen und ausführen! Docker-Container: Ein Container ist ein Image, das ausgeführt wird, um Dienste bereitzustellen! DockerFile-Anweisungen FROM # Basisimage MAINTAINER # Wer hat das Image geschrieben? Name + E-Mail RUN # Befehle, die beim Erstellen des Images ausgeführt werden sollen ADD # Schritte zB: Tomcat-Image---》Fügen Sie das komprimierte Paket von Tomcat ein! Inhalt hinzufügenWORKDIR # Das Arbeitsverzeichnis des ImagesVOLUME # Der Speicherort des gemounteten VerzeichnissesEXPOST # Port-Konfiguration offenlegenCMD # Geben Sie den Befehl an, der beim Start dieses Containers ausgeführt werden soll. Nur der letzte wird wirksam und kann ersetzt werdenENTRYPOINT # Geben Sie den Befehl an, der beim Start dieses Containers ausgeführt werden soll. Sie können Befehle anhängenONBUILD # Beim Erstellen eines geerbten DockerFile wird die ONBUILD-Anweisung ausgeführt, die die Anweisung auslöstCOPY # Ähnlich wie ADD kopieren wir unsere Dateien in das ImageENV # Legen Sie beim Erstellen Umgebungsvariablen fest Feldtest 99 % der Images im Docker Hub basieren auf dem FROM Scratch-Basisimage und werden dann mit der Software und Konfiguration konfiguriert, die wir zum Erstellen benötigen. Erstellen Sie Ihre eigenen Centos # 1. Schreiben Sie die DockerFile-Datei VON centos # Autoreninformationen MAINTAINER yinxiaodong<[email protected]> # Konfigurieren Sie die Umgebungsvariable ENV MYPATH /user/local # Geben Sie das Arbeitsverzeichnis des Bildes an WORKDIR $MYPATH Führen Sie den Befehl yum install -y vim aus. Führen Sie den Befehl yum install -y net-tools aus. # Port 80 freigeben EXPOSE 80 CMD echo $MYPATH CMD echo "---------Ende--------" CMD /bin/bash # 2. Erstellen Sie ein Image über Dateien# Befehl docker build -f dockerfile Dateipfad -t Imagename: Versionsnummer. [root@localhost Dockerfile]# Docker Build -f mydockerfile-centos -t mycentos:0.1. Senden des Build-Kontexts an den Docker-Daemon 2.048 kB Schritt 1/9: VON centos ---> 0d120b6ccaa8 Schritt 2/9: MAINTAINER yinxiaodong<[email protected]> ---> Wird ausgeführt in f79b12ffb083 Zwischenbehälter entfernen f79b12ffb083 ---> 8ee53d3f7a65 Schritt 3/9: ENV MYPATH /user/local ---> Wird ausgeführt in 659a2c96d5f7 Zwischenbehälter entfernen 659a2c96d5f7 ---> 59ab131ef44c Schritt 4/9: WORKDIR $MYPATH ---> Wird ausgeführt in 0b4b8f9c65bb Zwischenbehälter entfernen 0b4b8f9c65bb ---> 408b06671488 Schritt 5/9: RUN yum install -y net-tools ---> Wird ausgeführt in 151f81148a87 CentOS-8 - AppStream 118 kB/s | 5,8 MB 00:50 CentOS-8 - Basis 218 kB/s | 2,2 MB 00:10 CentOS-8 - Extras 1,8 kB/s | 7,3 kB 00:04 Abhängigkeiten aufgelöst. ================================================================================ Paket Architektur Version Repository Größe ================================================================================ Installieren: net-tools x86_64 2.0-0.51.20160912git.el8 BaseOS 323 k Zusammenfassung der Transaktion ================================================================================ 1 Paket installieren Gesamte Downloadgröße: 323 k Installierte Größe: 1,0 M Pakete herunterladen: net-tools-2.0-0.51.20160912git.el8.x86_64.rpm 219 kB/s | 323 kB 00:01 -------------------------------------------------------------------------------- Gesamt 66 kB/s | 323 kB 00:04 Warnung: /var/cache/dnf/BaseOS-f6a80ba95cf937f2/packages/net-tools-2.0-0.51.20160912git.el8.x86_64.rpm: Header V3 RSA/SHA256-Signatur, Schlüssel-ID 8483c65d: NOKEY CentOS-8 - Basis 162 kB/s | 1,6 kB 00:00 GPG-Schlüssel 0x8483C65D importieren: Benutzer-ID: „CentOS (Offizieller Signaturschlüssel von CentOS) <[email protected]>“ Fingerabdruck: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D Von: /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial Schlüssel erfolgreich importiert Ausführen einer Transaktionsprüfung Die Transaktionsprüfung war erfolgreich. Ausführen eines Transaktionstests Transaktionstest erfolgreich. Transaktion wird ausgeführt Zubereitung: 1/1 Installieren: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 Ausführen des Skriptlets: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 Überprüfung: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1 Eingerichtet: net-tools-2.0-0.51.20160912git.el8.x86_64 Vollständig! Zwischenbehälter ausbauen 151f81148a87 ---> c0a0546c9b2a Schritt 6/9: EXPOSE 80 ---> Wird ausgeführt in 42000936515d Zwischenbehälter ausbauen 42000936515d ---> fe68114ecf3f Schritt 7/9: CMD echo $MYPATH ---> Wird ausgeführt in c393fc53a354 Zwischenbehälter entfernen c393fc53a354 ---> a6924276bf90 Schritt 8/9: CMD echo "---------end--------" ---> Wird ausgeführt in 5994de56f0a1 Zwischenbehälter ausbauen 5994de56f0a1 ---> a8ba0ebb3770 Schritt 9/9: CMD /bin/bash ---> Wird ausgeführt in d1fa2d436363 Zwischenbehälter entfernen d1fa2d436363 ---> 41bb76be4884 Erfolgreich erstellt 41bb76be4884 Erfolgreich getaggt mit mycentos:0.1 [root@localhost Dockerfile]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE mycentos 0.1 41bb76be4884 vor 7 Sekunden 246 MB centos 1.0 d840628c30a9 vor 6 Stunden 215 MB centos latest 0d120b6ccaa8 vor 2 Tagen 215MB # Starten Sie mycentos und verwenden Sie den Befehl ifconfig, um die IP-Informationen anzuzeigen [root@localhost dockerfile]# docker run -it mycentos:0.1 [root@494c2bc72263 lokal]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.3 Netzmaske 255.255.0.0 Broadcast 172.17.255.255 Ether 02:42:ac:11:00:03 txqueuelen 0 (Ethernet) RX-Pakete 6 Bytes 516 (516,0 B) RX-Fehler 0 verloren 0 Überläufe 0 Frame 0 TX-Pakete 0 Bytes 0 (0,0 B) TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0 lo: Flags = 73 <UP, LOOPBACK, RUNNING> mtu 65536 inet 127.0.0.1 Netzmaske 255.0.0.0 loop txqueuelen 1000 (Lokaler Loopback) RX-Pakete 0 Bytes 0 (0,0 B) RX-Fehler 0 verloren 0 Überläufe 0 Frame 0 TX-Pakete 0 Bytes 0 (0,0 B) TX-Fehler 0 verloren 0 Überläufe 0 Träger 0 Kollisionen 0 # Überprüfen Sie das Verzeichnis /user/local, das genau das Verzeichnis ist, das wir im Dockerfile [root@494c2bc72263 local]# pwd angegeben haben. /Benutzer/lokal Anzeigen des Buildverlaufs eines Images # Befehl Docker Verlauf Image-ID [root@localhost ~]# Docker-Verlauf 41bb76be4884 BILD ERSTELLT ERSTELLT VON GRÖSSE KOMMENTAR 41bb76be4884 vor 16 Minuten /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B a8ba0ebb3770 vor 16 Minuten /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B a6924276bf90 vor 16 Minuten /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B fe68114ecf3f vor 16 Minuten /bin/sh -c #(nop) EXPOSE 80 0B c0a0546c9b2a vor 16 Minuten /bin/sh -c yum install -y net-tools 31,3 MB 408b06671488 vor 17 Minuten /bin/sh -c #(nop) WORKDIR /user/local 0B 59ab131ef44c vor 17 Minuten /bin/sh -c #(nop) ENV MYPATH=/user/local 0B 8ee53d3f7a65 vor 17 Minuten /bin/sh -c #(nop) MAINTAINER yinxiaodong<m1… 0B 0d120b6ccaa8 vor 2 Tagen /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <fehlt> vor 2 Tagen /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <fehlt> vor 2 Tagen /bin/sh -c #(nop) ADD file:538afc0c5c964ce0d… 215 MB Wenn wir ein Bild erhalten, können wir untersuchen, wie es erstellt wird ----> Docker-Verlauf Bild-ID Der Unterschied zwischen CMD und ENTRYPOINT CMD #Geben Sie den Befehl an, der ausgeführt werden soll, wenn dieser Container gestartet wird. Nur der letzte Befehl wird wirksam und kann ersetzt werden. ENTRYPOINT #Geben Sie den Befehl an, der ausgeführt werden soll, wenn dieser Container gestartet wird. Sie können Befehle anhängen. #Test CMD # DockerFile-Datei schreiben [root@localhost dockerfile]# cat dockerfile-cmd-test VON centos CMD ["ls","-a"] # Image basierend auf DockerFile erstellen [root@localhost dockerfile]# docker build -f dockerfile-cmd-test -t testcmd:0.1 . Senden des Build-Kontexts an den Docker-Daemon 3.072kB Schritt 1/2: VON centos ---> 0d120b6ccaa8 Schritt 2/2: CMD ["ls","-a"] ---> Wird ausgeführt in b3f8ba72222b Zwischenbehälter entfernen b3f8ba72222b ---> 561e47f88730 Erfolgreich erstellt 561e47f88730 Erfolgreich markiert testcmd:0.1 # Erfolgreich erstellt# Sehen Sie sich das Image an [root@localhost dockerfile]# Docker-Images REPOSITORY TAG BILD ID ERSTELLT GRÖSSE testcmd 0.1 561e47f88730 vor 6 Sekunden 215 MB centos latest 0d120b6ccaa8 vor 2 Tagen 215MB # Starten Sie das Image und stellen Sie sicher, dass der Befehl ls -a wirksam ist [root@localhost dockerfile]# docker run -it testcmd:0.1 .dockerenv dev home lib64 media opt root sbin sys usr .. bin etc lib verloren+gefunden mnt proc laufen srv tmp var # Fügen Sie dem Startbefehl ein -l hinzu. Wir erwarten ls -a -l, aber es wird ein Fehler gemeldet. Hier wird ls -a durch -l ersetzt. Der letzte Befehl ist -l, daher wird ein Fehler gemeldet. [root@localhost Docker-Datei]# docker run -it 561e47f88730 -l Docker: Fehlerantwort vom Daemon: Erstellen der OCI-Laufzeit fehlgeschlagen: container_linux.go:349: Starten des Containerprozesses verursachte „exec: \"-l\": ausführbare Datei nicht in $PATH gefunden": unbekannt. # Ersetzen Sie den Startbefehl durch docker run -it testcmd:0.1 ls -al und drucken Sie erfolgreich ausführliche Informationen aus; [root@localhost Docker-Datei]# docker run -it testcmd:0.1 ls -al gesamt 0 drwxr-xr-x. 1 root root 6. Aug. 13 08:20. drwxr-xr-x. 1 root root 6. Aug. 13 08:20 .. -rwxr-xr-x. 1 root root 0 13. August 08:20 .dockerenv lrwxrwxrwx. 1 root root 7 11. Mai 2019 bin -> usr/bin drwxr-xr-x. 5 root root 360 13. Aug. 08:20 dev drwxr-xr-x. 1 root root 66 13. Aug. 08:20 usw. drwxr-xr-x. 2 root root 6 11. Mai 2019 Startseite lrwxrwxrwx. 1 root root 7 11. Mai 2019 lib -> usr/lib lrwxrwxrwx. 1 root root 9 11. Mai 2019 lib64 -> usr/lib64 drwx------. 2 root root 6 Aug 9 21:40 verloren+gefunden drwxr-xr-x. 2 root root 6 11. Mai 2019 Medien drwxr-xr-x. 2 root root 6 11. Mai 2019 mnt drwxr-xr-x. 2 root root 6 11. Mai 2019 opt dr-xr-xr-x. 123 root root 0 13. August 08:20 proc dr-xr-x---. 2 Wurzel Wurzel 162 9. Aug. 21:40 Wurzel drwxr-xr-x. 11 root root 163 9. Aug. 21:40 ausführen lrwxrwxrwx. 1 root root 8 11. Mai 2019 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 11. Mai 2019 srv dr-xr-xr-x. 13 root root 0 11. August 09:58 sys drwxrwxrwt. 7 root root 145 9. Aug. 21:40 tmp drwxr-xr-x. 12 root root 144 9. Aug. 21:40 usr drwxr-xr-x. 20 root root 262 9. Aug. 21:40 var # Test 2: Jetzt ersetzen wir CMD in DockerFile durch ENTRYPOINT, erstellen es neu und führen es aus, um das Ergebnis anzuzeigen [root@localhost dockerfile]# cat dockerfile-cmd-test VON centos EINSTIEGSPUNKT ["ls","-a"] # Erstellen Sie das Image neu [root@localhost Dockerfile]# docker build -f dockerfile-cmd-test -t testcmd:0.2 . Senden des Build-Kontexts an den Docker-Daemon 3.072kB Schritt 1/2: VON centos ---> 0d120b6ccaa8 Schritt 2/2: ENTRYPOINT ["ls","-a"] ---> Wird ausgeführt in c634ca09fabe Zwischenbehälter entfernen c634ca09fabe ---> 52d295395f08 Erfolgreich erstellt 52d295395f08 Erfolgreich markiert mit testcmd:0.2 # Sehen Sie sich das Bild an [root@localhost dockerfile]# docker images REPOSITORY TAG BILD ID ERSTELLT GRÖSSE testcmd 0.2 52d295395f08 vor 7 Sekunden 215 MB testcmd 0.1 561e47f88730 vor 12 Minuten 215 MB centos latest 0d120b6ccaa8 vor 2 Tagen 215MB # Führen Sie testcmd:0.2 image aus, fügen Sie -l an und stellen Sie fest, dass detaillierte Informationen gedruckt werden [root@localhost Docker-Datei]# docker run -it testcmd:0.2 -l gesamt 0 drwxr-xr-x. 1 root root 6. Aug. 13 08:17 . drwxr-xr-x. 1 root root 6. Aug. 13 08:17 .. -rwxr-xr-x. 1 root root 0 13. August 08:17 .dockerenv lrwxrwxrwx. 1 root root 7 11. Mai 2019 bin -> usr/bin drwxr-xr-x. 5 root root 360 13. Aug. 08:17 dev drwxr-xr-x. 1 root root 66 13. Aug. 08:17 usw. drwxr-xr-x. 2 root root 6 11. Mai 2019 Startseite lrwxrwxrwx. 1 root root 7 11. Mai 2019 lib -> usr/lib lrwxrwxrwx. 1 root root 9 11. Mai 2019 lib64 -> usr/lib64 drwx------. 2 root root 6 Aug 9 21:40 verloren+gefunden drwxr-xr-x. 2 root root 6 11. Mai 2019 Medien drwxr-xr-x. 2 root root 6 11. Mai 2019 mnt drwxr-xr-x. 2 root root 6 11. Mai 2019 opt dr-xr-xr-x. 121 root root 0 13. August 08:17 proc dr-xr-x---. 2 Wurzel Wurzel 162 9. Aug. 21:40 Wurzel drwxr-xr-x. 11 root root 163 9. Aug. 21:40 ausführen lrwxrwxrwx. 1 root root 8 11. Mai 2019 sbin -> usr/sbin drwxr-xr-x. 2 root root 6 11. Mai 2019 srv dr-xr-xr-x. 13 root root 0 11. August 09:58 sys drwxrwxrwt. 7 root root 145 9. Aug. 21:40 tmp drwxr-xr-x. 12 root root 144 9. Aug. 21:40 usr drwxr-xr-x. 20 root root 262 9. Aug. 21:40 var Viele Befehle in DockerFile sind sehr ähnlich. Wir müssen ihre Unterschiede verstehen. Der beste Weg, sie zu lernen, besteht darin, sie zu vergleichen und zu testen, um die Ergebnisse zu sehen! Tatsächlicher Kampf: Tomcat-Bild 1. Bereiten Sie die Image-Datei vor Tomcat-Komprimiertes Paket JDK-Komprimiertes Paket
2. Schreiben Sie die Dockerfile-Datei, offiziell Dockerfile genannt. Der Build findet diese Datei automatisch, eine -f-Angabe ist nicht erforderlich! # Importieren Sie die grundlegenden Elemente von centos # Autoreninformationen MAINTAINER yinxiaodoong<[email protected]> # kopiere die Datei read.txt in das Verzeichnis /usr/local/read.txt des Containers COPY read.txt /usr/local/read.txt # JDK Tomcat hinzufügen ---> Automatisch dekomprimieren ADD jdk-8u211-linux-x64.tar.gz /usr/local/ ADD apache-tomcat-8.5.43.tar.gz /usr/local/ # Vim-Befehl installieren RUN yum install -y vim #MYPATH konfigurieren ENV MYPATH /usr/local/ #Geben Sie den Standardpfad zum Aufrufen des Containers /user/local/ an. ARBEITSVERZEICHNIS $MYPATH # Konfigurieren Sie die JDK-Umgebungsvariable ENV JAVA_HOME /usr/local/jdk1.8.0_211 ENV-KLASSENSPATH $JAVA_HOME/lib/dt.jat:$JAVA_HOME/lib/tools.jar # Konfigurieren Sie die Tomcat-Umgebungsvariable ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.43 ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.43 ENV-PFAD $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin # Port 8080 freigeben EXPOSE 8080 # /usr/local/tomcat/webapps# # Starten Sie Tomcat, wenn Sie den Container starten CMD /usr/local/apache-tomcat-8.5.43/bin/startup.sh und tail -f /usr/local/apache-tomcat-8.5.43/logs/catalina.out # Tomcat-Image erstellen [root@localhost tomcat]# docker build -t mytomcat [root@localhost tomcat]# Docker-Bilder REPOSITORY TAG BILD ID ERSTELLT GRÖSSE mytomcat latest a9707559afa1 vor 8 Sekunden 693 MB centos latest 0d120b6ccaa8 vor 4 Tagen 215MB [root@localhost Tomcat]# Docker run -d -p 8081:8080 --name mytomcat--01 -v /home/yinxiaodong/build/tomcat/test:/usr/local/apache-tomcat-8.5.43/webapps/test -v /home/yinxiaodong/build/tomcat/logs:/usr/local/apache-tomcat-8.5.43/logs mytomcat Veröffentlichen Sie Ihr eigenes Bild Veröffentlichen auf DockerHub Adresse: https://hub.docker.com/ Registrieren Sie Ihr eigenes Konto Stellen Sie sicher, dass sich Ihr Konto anmelden kann Auf unserem Server einreichen [root@localhost-Protokolle]# Docker-Login --Hilfe Verwendung: Docker-Login [OPTIONEN] [SERVER] Melden Sie sich bei einem Docker-Register an. Wenn kein Server angegeben ist, wird der Standard vom Daemon definiert. Optionen: -p, --password Zeichenfolge Kennwort --password-stdin Übernimmt das Passwort von stdin -u, --username string Benutzername [root@localhost-Protokolle]# [root@localhost-Protokolle]# Docker-Login -u xxx -p xxx WARNUNG! Die Verwendung von --password über die CLI ist unsicher. Verwenden Sie --password-stdin. WARNUNG! Ihr Passwort wird unverschlüsselt in /root/.docker/config.json gespeichert. Konfigurieren Sie einen Credential Helper, um diese Warnung zu entfernen. Siehe https://docs.docker.com/engine/reference/commandline/login/#credentials-store Anmeldung erfolgreich Nach der Anmeldung können Sie das Bild übermitteln. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Lösung für das Ausgehen der Auto-Increment-ID (Primärschlüssel) von MySQL
>>: Native js implementiert Warenkorb-Logik und -Funktionen
Ein gemeinsamer Index wird auch als zusammengeset...
Beim Erstellen eines SPA müssen Sie häufig bestim...
Es wird in Form von WeChat-Komponenten bereitgest...
Tatsächlich haben die drei obigen Tabellen alle d...
sshd SSH ist die Abkürzung für Secure Shell, ein ...
In HTML wird das <img>-Tag verwendet, um ei...
Inhaltsverzeichnis 1. Installationsumgebung 2. In...
In diesem Artikel finden Sie den spezifischen Cod...
Wir müssen zunächst die Luftqualitätsdaten mit de...
Inhaltsverzeichnis Ziehen Sie das Bild Ausführen ...
Inhaltsverzeichnis JSON wird angezeigt JSON-Struk...
Da es zu mühsam ist, jedes Mal das Installationst...
1. Wer ist Tomcat? 2. Was kann Tomcat? Tomcat ist...
Inhaltsverzeichnis 1. Schritte 1. Definieren Sie ...
Egal, ob Sie zu Hause auf dem Sofa oder draußen i...