Erstellen Sie Container aus neuen Images mit Docker-Compose neu

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie ein neues Projekt
  2. Erstellen Sie ein Image mit Cache neu
  3. Erstellen Sie ein Image ohne Cache neu
  4. Abschluss
Erstellen Sie Container aus neuen Images mit Docker-Compose neu

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 Mbochi Njonge avatar David Mbochi Njonge avatar

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

Verwandter Artikel - Docker Compose