Erstellen Sie Container aus neuen Images mit Docker-Compose neu
- Erstellen Sie ein neues Projekt
- Erstellen Sie ein Image mit Cache neu
- Erstellen Sie ein Image ohne Cache neu
- Abschluss
Bei der Entwicklung von Anwendungen nehmen wir normalerweise Änderungen vor oder fügen weitere Funktionen hinzu, um die Anwendung für die verschiedenen Benutzer, die mit den Anwendungen interagieren, effektiver zu machen.
Bei der Arbeit mit Docker müssen wir sicherstellen, dass die vorgenommenen Änderungen oder Funktionen in der Hauptanwendung aktualisiert werden, indem wir das Image neu erstellen und einen neuen Container aus diesem Image ausführen. In diesem Tutorial erfahren Sie, wie Sie mit Docker Compose Container aus neuen Images neu erstellen.
Erstellen Sie ein neues Projekt
Wählen Sie in WebStorm IDEA
Datei
> Neu
> Projekt
, um ein neues Projekt zu erstellen. Wählen Sie dann Empty Project
und ändern Sie den Projektnamen von untitled
in docker-compose-no-cache
oder verwenden Sie einen beliebigen Namen.
Drücken Sie die Schaltfläche Erstellen
, um das Projekt zu erstellen. Erstellen Sie eine Datei namens index.html
unter dem aktuellen Ordner und kopieren Sie den folgenden Code und fügen Sie ihn ein.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
crossorigin="anonymous">
</head>
<body>
<div class="card">
<div class="card-header">
Featured
</div>
<div class="card-body">
<h5 class="card-title">Special title treatment</h5>
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
</body>
</html>
Diese Datei verwendet Bootstrap, um eine Webseite zu erstellen, die eine Karte anzeigt, wenn wir einen Container aus dem Image der Anwendung ausführen. Wir werden diese Seite verwenden, um zu überprüfen, ob unser Container ausgeführt wird.
Definiere ein Bild
Erstellen Sie eine Datei namens Dockerfile
unter dem aktuellen Ordner und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.
FROM nginx:1.22.0-alpine
COPY . /usr/share/nginx/html
“VON” - Legt das Basisbild fest, auf dem unser benutzerdefiniertes Bild mit nachfolgenden Anweisungen erstellt werden soll. In diesem Fall haben wir unser Basis-Image auf Nginx
gesetzt und alpine
verwendet, um eine leichtgewichtige Version von Nginx
zu ziehen.
KOPIEREN
- Kopiert die Dateien und Ordner im aktuellen Verzeichnis an einen Speicherort im Dateisystem in unserem Image. In diesem Fall haben wir alle Dateien im aktuellen Verzeichnis nach /src/share/nginx/html
kopiert.
Definieren Sie einen Container mit Compose File
Erstellen Sie eine Datei namens compose.yaml
unter dem aktuellen Ordner und kopieren Sie die folgenden Anweisungen und fügen Sie sie in die Datei ein.
services:
web-app:
restart: on-failure
build: ./
hostname: web-app-service
ports:
- '80:80'
Diese Datei definiert einen Dienst namens web-app
, der Port 80
im Host bereitstellt, um Port 80
im Container zu überwachen. Diese Datei bietet eine einfachere Möglichkeit zum Verwalten von Containern als die Container auf dem Terminal.
Erstellen Sie ein Image und führen Sie einen Container aus
Da wir zum ersten Mal ein Image erstellen, wird unser Basis-Image abgerufen und verwendet, um unser benutzerdefiniertes Image mithilfe der in der Dockerfile
definierten Anweisungen zu erstellen. Der in der Datei compose.yaml
definierte Container wird ebenfalls erstellt und einem Netzwerk hinzugefügt.
Öffnen Sie ein neues Terminalfenster mit der Tastenkombination ALT+F12 auf Ihrem Computer und führen Sie den folgenden Befehl aus, um ein Image zu erstellen und einen Container daraus auszuführen.
~/WebstormProjects/docker-compose-no-cache$ docker compose up -d
Dieser Befehl führt die Datei compose.yaml
aus, um ein Image namens docker-compose-no-cache_web-app
zu erstellen, und führt auch einen Container mit dem Namen docker-compose-no-cache-web-app-1
aus. Wie nachfolgend dargestellt.
=> CACHED [1/2] FROM docker.io/library/nginx:1.22.0-alpine@sha256:addd3bf05ec3c69ef3e8f0021ce1ca98e0eb21117b97ab8b64127e 0.0s
=> [2/2] COPY . /usr/share/nginx/html 0.6s
=> exporting to image 0.8s
=> => exporting layers 0.6s
=> => writing image sha256:d72675b7a3e3a52dd27fe46f298dc30757382d837a5fbf36d8e36d646b5902d6 0.1s
=> => naming to docker.io/library/docker-compose-no-cache_web-app 0.1s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 2/2
⠿ Network docker-compose-no-cache_default Created 0.3s
⠿ Container docker-compose-no-cache-web-app-1 Started
Um zu überprüfen, ob unser Container läuft, öffnen Sie den Browser und stellen Sie eine Anfrage an localhost:80
(http://localhost/#). Die Karte, die wir auf der Seite index.html
definiert haben, wird im Browser angezeigt.
Führen Sie im selben Terminalfenster den folgenden Befehl aus, um zu überprüfen, ob unser benutzerdefiniertes Image erstellt wurde.
~/WebstormProjects/docker-compose-no-cache$ docker image ls
Ausgang:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-compose-no-cache_web-app latest d72675b7a3e3 8 minutes ago 23.5MB
Erstellen Sie ein Image mit Cache neu
Um das vorhandene Image mit Cache neu zu erstellen und Container auszuführen, müssen wir zuerst die vorhandenen Container mit dem Befehl docker compose down
stoppen und entfernen.
Das Neuerstellen eines Docker-Images mit dem Cache bedeutet, dass der aktuelle Container wiederverwendet wird, um einen neuen Container zu erstellen. Führen Sie im selben Terminalfenster den folgenden Befehl aus, um das vorhandene Image mit dem Cache neu zu erstellen.
~/WebstormProjects/docker-compose-no-cache$ docker compose build
Dieser Befehl erstellt ein neues Image unter Verwendung des vorhandenen Images, und wir können das docker compose up -d
verwenden, um einen Container davon auszuführen.
Um zu überprüfen, ob das vorhandene Image wiederverwendet wird, um einen neuen Container zu erstellen, führen Sie den folgenden Befehl aus und beachten Sie, dass außer dem im vorherigen Abschnitt erstellten Image kein Image vorhanden ist.
~/WebstormProjects/docker-compose-no-cache$ docker image ls
Ausgang:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-compose-no-cache_web-app latest d72675b7a3e3 8 minutes ago 23.5MB
Erstellen Sie ein Image ohne Cache neu
Ein Image ohne Cache neu zu erstellen bedeutet, ein neues Image zu erstellen, ohne das vorherige Image wiederzuverwenden. Wir können dies erreichen, indem wir beim Erstellen eines Images mit dem Docker-Befehl build
den Befehl --no-cache
hinzufügen.
Führen Sie im selben Terminalfenster den folgenden Befehl aus, um ein Image ohne Cache neu zu erstellen. Stellen Sie sicher, dass laufende Container mit dem Befehl docker compose down
entfernt werden.
~/WebstormProjects/docker-compose-no-cache$ docker compose build --no-cache
Dieser Befehl erstellt ein neues Image ohne Cache, was bedeutet, dass das vorherige Image nicht wiederverwendet wird. Um zu überprüfen, ob das vorherige Image nicht wiederverwendet wurde, um das aktuelle Image zu erstellen, führen Sie den folgenden Befehl aus und beachten Sie, dass das vorherige Image keinen Namen hat, wie durch <none>
angegeben.
Das neue Bild verwendet den Namen des vorherigen Bildes.
~/WebstormProjects/docker-compose-no-cache$ docker image ls
Ausgang:
docker-compose-no-cache_web-app latest f111dde0e704 3 seconds ago 23.5MB
<none> <none> 1c05a46fe049 13 minutes ago 23.5MB
Da das vorherige Bild und das neue Bild nicht denselben Namen haben können, verwendet das aktuelle Bild den Namen des vorherigen Bildes, und das vorherige Bild erhält none
, um anzuzeigen, dass es keinen Namen hat.
Abschluss
Wir haben gelernt, Container aus neuen Images mit Docker Compose neu zu erstellen. Um dies zu implementieren, haben wir gelernt, wie man ein Image mit dem Cache neu erstellt und wie man ein Image ohne Cache neu erstellt.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub