Führen Sie mehrere Befehle in Docker-Compose aus
Docker erleichtert Entwicklern das Erstellen, Testen und Bereitstellen von Anwendungen, ohne sich Gedanken über Abhängigkeiten machen zu müssen, indem es sie in standardisierte Einheiten, sogenannte Container, verpackt. Docker-compose ist ein fortschrittliches, unverzichtbares Tool zur Verwaltung von Multi-Container-Anwendungen.
Mit docker-compose können Sie Anweisungen zum Verwalten von Diensten definieren, die auf mehreren Docker-Containern basieren.
Docker-Compose bietet nicht nur die Möglichkeit, mehr als einen Container zu verwalten, sondern auch andere Vorteile wie isolierte Umgebungen für Ihre Anwendungsdienste und die Beibehaltung von Volumendaten beim Erstellen von Containern.
Führen Sie mehrere Befehle in Docker-Compose aus
Docker-compose wird auf der Docker-Engine ausgeführt, die zusammen mit Docker auf Mac- und Windows-Computern installiert wird. Mit dem folgenden Befehl können Sie überprüfen, ob docker-compose auf Ihrem Computer richtig eingerichtet ist.
$ docker-compose version
Docker Compose version v2.2.3
Im folgenden Beispiel untersuchen wir, wie Sie eine Django-PostgreSQL-Anwendung mit docker-compose einrichten. Wir werden untersuchen, wie mehrere Befehle in docker-compose ausgeführt werden.
Zuerst erstellen wir ein einfaches Dockerfile mit einfachen Einträgen, wie unten gezeigt. Die Datei beschreibt Befehle, die ausgeführt werden, um unser Docker-Image zu erstellen.
FROM python:3
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /tonyloi
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /tonyloi/
Das Dockerfile definiert Python3 als Basis-Image; Wir haben jedoch auch eine requirements.txt
-Datei definiert, um andere Anforderungen anzugeben, die für das Funktionieren des Projekts erforderlich sind.
Django>=3.0,<4.0
psycopg2>=2.8
Nachdem Sie diese beiden Dateien an Ort und Stelle haben, können Sie die Datei docker-compose.yml
im Stammverzeichnis dieses Projekts erstellen. Diese Datei beschreibt die Dienste der Anwendung, die wir erstellen möchten: die Datenbank und den Webserver.
Darüber hinaus definieren wir auch die von diesen Diensten verwendeten Docker-Images und alle anderen Docker-Volumes, die Sie möglicherweise bereitstellen möchten. Schließlich müssen wir auch die Ports angeben, die die Dienste verfügbar machen.
Da es sich um eine Django-Anwendung handelt, müssen wir auch Befehle angeben, mit denen wir Migrationen ausführen und den Entwicklungsserver starten können. Dazu gibt es mehrere Möglichkeiten, entweder mit sh
oder bash
.
In diesem Fall verwenden wir sh
aufgrund seiner Verfügbarkeit in Unix-basierten Systemen.
docker-compose.yml
:
version: "3.9"
services:
DB:
image: Postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: >
sh -c "
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8080"
volumes:
- .:/tonyloi
ports:
- "8080:8080"
environment:
- POSTGRES_NAME=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
depends_on:
- DB
Wir führen den unten stehenden Befehl docker-compose run
aus, um dieses Django-Projekt zu erstellen. Bevor Sie diesen Befehl ausführen, müssen Sie sicherstellen, dass Sie sich im Stammverzeichnis befinden.
Wenn nicht, navigieren Sie bitte mit dem Befehl cd
zum Stammverzeichnis.
~/django_app$ sudo docker-compose run web Django-admin startproject new_app .
Ausgang:
Successfully built 00a4c8d65c91
Successfully tagged django_app_web:latest
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating django_app_db_1 ... done
Creating django_app_web_run ... done
Dieser Befehl verwendet die Dateien docker-compose und Docker, um ein Django-Projekt zu erstellen. In diesem Fall haben wir das Projekt new_app
genannt.
Sie können nun in das Projekt navigieren und die Projektdateien auflisten.
isaac@DESKTOP-HV44HT6:~/django_app$ cd new_app
isaac@DESKTOP-HV44HT6:~/django_app/new_app$ ls
__init__.py asgi.py settings.py urls.py wsgi.py
isaac@DESKTOP-HV44HT6:~/django_app/new_app$
In diesem Artikel wurde aufgezeigt, wie man mit sh
mehrere Befehle in der docker-compose-Datei ausführen kann. Alternativ können Sie auch wie unten gezeigt bash -c
verwenden.
command: bash -c "
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8080
"
Wir können die Erstellung des Rests der Django-Anwendung abschließen, indem wir die Datenbankeinstellungen in der Datei settings.py
konfigurieren.
Django verwendet während der Entwicklung standardmäßig SQLite
; Daher benötigen wir unten die erforderlichen Konfigurationen, da wir PostgreSQL verwenden. Stellen Sie sicher, dass Sie die Datenbank und den Benutzernamen durch Ihren eigenen ersetzen.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('postgres'),
'USER': os.environ.get('postgres'),
'PASSWORD': os.environ.get('enter_your database'),
'HOST': 'db',
'PORT': 5432,
}
}
Zum Start führt die Anwendung schließlich den Befehl sudo docker-compose up
im Hauptverzeichnis des Projekts aus. Es startet den Entwicklungsserver unter http://0.0.0.0:8080/
, wie wir es in der Docker-Compose-Datei angegeben haben.
~/django_app$ sudo docker-compose up
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn