Hinzufügen von Benutzern zu einem Docker-Container

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie eine Express-Anwendung
  2. Erstellen Sie ein Docker-Image der Anwendung
  3. Erstellen Sie ein Bild
  4. Führen Sie einen Container aus
  5. Stellen Sie sicher, dass der Benutzer erstellt wurde
  6. Daten aus dem Container abrufen
  7. Abschluss
Hinzufügen von Benutzern zu einem Docker-Container

Bei der Entwicklung von Anwendungen haben wir normalerweise verschiedene Benutzer, die mit einem System interagieren, um verschiedene Funktionalitäten auszuführen. Diese Benutzer haben Berechtigungen, die es ihnen ermöglichen, die Funktionalitäten basierend auf ihren Rollen auszuführen.

Beachten Sie, dass es Superuser gibt, die alle Funktionen im System ausführen können, da ihnen alle Rollen des Systems zugewiesen wurden. Ebenso können wir Benutzer für Docker-Container erstellen und Berechtigungen für die Benutzer festlegen, um sicherzustellen, dass sie nur bestimmte Aufgaben im Container ausführen können.

Diese erhöhen die Sicherheit des Containers, da wir den Zugriff auf den kritischen Teil des Containers auf Superuser beschränken und auch nachverfolgen können, welcher Benutzer mit dem System interagiert hat, als ein bestimmtes Ereignis aufgetreten ist.

In diesem Tutorial erfahren Sie, wie Sie Benutzer zu einem Docker-Container hinzufügen, indem Sie eine Express-Anwendung implementieren, die eine Reihe von Produkten zurückgibt.

Erstellen Sie eine Express-Anwendung

Öffnen Sie WebStorm IDEA und wählen Sie Datei > Neu > Projekt. Wählen Sie Node.js und ändern Sie den Projektnamen im Abschnitt Location von untitled zu product-api.

Sie sollten die Node-Laufzeitumgebung installiert haben, damit die Abschnitte Node interpreter und Package manager automatisch vom Computer hinzugefügt werden können. Drücken Sie die Schaltfläche Erstellen, um das Projekt zu erstellen.

Um Express zu installieren, öffnen Sie ein neues Terminalfenster mit der Tastenkombination Alt+F12 auf WebStorm und verwenden Sie den folgenden npm-Befehl, um die Abhängigkeit zu installieren.

~/WebstormProjects/product-api$ npm install express

Erstellen Sie im aktuellen Ordner eine Datei namens index.js und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
    res.json(
        [
            {
                name: 'Iphone 13 Pro',
                price: 1500.67
            },
            {
                name: 'Samsung Galaxy A53',
                price: 1300.56
            },
        ])
})

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
})

In dieser Datei haben wir eine Express-Anwendung erstellt, die eine Reihe von Produkten zurückgibt, wenn wir in unserem Browser eine GET-Anfrage an / stellen. Beachten Sie, dass diese Anwendung Port 3000 verfügbar macht, was uns hilft, diese Anwendung zu bedienen.

Erstellen Sie ein Docker-Image der Anwendung

Erstellen Sie eine Datei namens Dockerfile im Ordner product-api und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

FROM node:latest
RUN groupadd admin &&\
    useradd mary -g admin -s /bin/sh
WORKDIR /com/product
ADD package*.json ./
RUN npm install
ADD . .
USER mary
CMD node index.js

In dieser Datei haben wir ein Image unserer Anwendung mit node:latest als Basisimage erstellt. Die Anweisung RUN nach der Anweisung FROM erstellt eine Gruppe namens admin und fügt der Gruppe einen Benutzer namens mary hinzu.

Wir haben den Backslash \ verwendet, um den Befehl in der nächsten Zeile fortzusetzen. Beachten Sie, dass die zum Erstellen einer Gruppe und eines Benutzers verwendeten Befehle Linux-Befehle sind und groupadd und useradd enthalten.

Die andere wichtige Anweisung in dieser Datei ist die USER-Anweisung, die den Standardbenutzer festlegt, der für die verbleibende Phase verwendet wird.

Wir können auch die Standardgruppe festlegen, obwohl dies optional ist. Die Docker-Dokumentation beschreibt die Verwendung der verbleibenden Anweisungen im Detail.

Erstellen Sie ein Bild

Um ein Image zu erstellen, öffnen Sie ein neues Terminalfenster mit der Tastenkombination Alt+F12 und verwenden Sie den folgenden Befehl, um ein Image namens product-api zu erstellen.

~/WebstormProjects/product-api$ docker build --tag product-api:latest .

Dieser Befehl führt die Datei mit dem Namen Dockerfile von der ersten Datei nacheinander aus, wie im Terminalfenster unten gezeigt. Der Punkt . am Ende des Befehls zeigt den Speicherort der Dockerfile-Datei, die sich in diesem Fall im aktuellen Ordner befindet.

 => [1/6] FROM docker.io/library/node:latest@sha256:bb3b9f1867edba6d8892758889e43b2f0205ebbd381969a2c45577d38281  95.4s
 => => resolve docker.io/library/node:latest@sha256:bb3b9f1867edba6d8892758889e43b2f0205ebbd381969a2c45577d38281a  0.1s
 => [2/6] RUN groupadd admin &&    useradd mary -g admin -s /bin/sh                                                6.3s
 => [3/6] WORKDIR /com/product                                                                                     0.9s
 => [4/6] ADD package*.json ./                                                                                     0.7s
 => [5/6] RUN npm install                                                                                          7.1s
 => [6/6] ADD . .

Führen Sie einen Container aus

Sobald unser Image erstellt wurde, verwenden Sie den folgenden Befehl, um einen Container namens product-service von diesem Image aus auszuführen.

~/WebstormProjects/product-api$ docker run --name product-service -d -p 3030:3000 product-api:latest

Dieser Befehl führt einen Container aus, der Port 3000 auf Port 3030 auf dem Localhost abbildet, da der Container lokal verwendet wird.

Stellen Sie sicher, dass der Benutzer erstellt wurde

Um zu überprüfen, ob ein Benutzer erstellt wurde, verwenden Sie den folgenden Befehl, der es uns ermöglicht, einen Befehl von einem laufenden Container mit der Anweisung exec auszuführen.

~/WebstormProjects/product-api$ docker exec -it product-service /bin/sh

Da wir das WORKDIR als /com/product angegeben haben, läuft der Befehl in diesem Verzeichnis. Der Befehl wird im Standardverzeichnis ausgeführt, wenn wir kein Verzeichnis angeben.

Dieser Befehl führt eine interaktive Bash-Shell aus, und wir können die Bash-Sitzung verwenden, um Befehle auf dem laufenden Container auszuführen. Führen Sie den folgenden Befehl auf dem laufenden Container aus, um die Benutzergruppe zu überprüfen, wie unten gezeigt.

$ id mary

Ausgang:

uid=1001(mary) gid=1001(admin) groups=1001(admin)

Wir haben gesehen, dass der Container einen Benutzer namens mary aus der Gruppe namens admin hat, was es uns ermöglicht, Berechtigungen nach Bedarf zu ändern.

Daten aus dem Container abrufen

Öffnen Sie einen beliebigen Browser und senden Sie eine Anfrage an localhost:3030 (http://localhost:3030/), um zu überprüfen, ob unsere Anwendung wie erwartet funktioniert. Stellen Sie sicher, dass die Anfrage die Produkt-API zurückgibt, die wir in der Datei index.js erstellt haben, wie unten gezeigt.

[
    {
    "name": "Iphone 13 Pro",
    "price": 1500.67
    },
    {
    "name": "Samsung Galaxy A53",
    "price": 1300.56
    }
]

Abschluss

In diesem Tutorial haben wir gelernt, wie man mit Dockerfile einen Benutzer zu einem Container hinzufügt. Wir haben auch gesehen, wie Sie einen Benutzer zu einer Gruppe hinzufügen, da Benutzer zu bestimmten Gruppen in einer Organisation gehören.

Beachten Sie, dass es verschiedene Ansätze gibt, um das gleiche Ergebnis zu erzielen, also können Sie jede Methode verwenden, die die Anforderungen erfüllt.

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