Inhaltsverzeichnis
Docker Nextcloud Image selbst bauen
Möchte man ein Image verändern oder aus welchen Gründen selbst bauen, sind folgende Schritte notwendig (hier ein Beispiel mit Nextcloud 32.0.4 )
Ich benutze die Apache Version
Basis-Image
1. Basis-Image holen
# Quell‑Repo klonen git clone https://github.com/nextcloud/docker.git cd docker/32/apache
2. prüfen, ob die gewünschte Version im Dockerfile vorhanden ist, in unserem Beispiel ENV NEXTCLOUD_VERSION 32.0.4
Dockerfile eventuell anpassen
3. Im Dockerfile kann man einige Variable anpassen, wenn man das möchte. Beispiel:
ENV PHP_MEMORY_LIMIT 2048M ENV PHP_UPLOAD_LIMIT 2048M ENV PHP_OPCACHE_MEMORY_CONSUMPTION 256 opcache.interned_strings_buffer=64
3.1. Besser ist es jedoch, ein eigenes volumne in docker-compose einzubinden. Beispiel
Beispielordnerstruktur:
projektordner/ ├── docker-compose.yml ├── my-php/ │ └── 99-custom.ini ← Hier liegt deine PHP-Konfig
Beispiel für eine 99-custom.ini
; -------------------------------------- ; Benutzerdefinierte PHP-Einstellungen ; -------------------------------------- ; Arbeitsspeicher memory_limit = 2048M ; Upload-Limit für einzelne Dateien upload_max_filesize = 2048M ; Maximalgröße von POST-Daten post_max_size = 512M ; Maximale Skriptlaufzeit max_execution_time = 300 max_input_time = 300 ; Maximale Anzahl gleichzeitiger Datei-Uploads max_file_uploads = 200 ; Zeitzone (optional) date.timezone = Europe/Vienna
Testbeispiel, ob die Werte auch wirklich geladen werden:
docker exec -it nextcloud php -i | grep memory_limit docker exec -it nextcloud php -i | grep upload_max_filesize
So bindest du die Datei in docker-compose ein.
- ./my-php/99-custom.ini:/usr/local/etc/php/conf.d/99-custom.ini
docker-compose.yml anpassen und build starten
4. Ich lasse docker-compose.yml den build selbst machen. Dazu verändert man folgende Zeilen in docker-compose.yml in derm Abschnitt von Nextcloud Image
#---- habe ein eigenes Image erstellt --------
build:
context: /home-to-own-docker-image/docker/31/apache
dockerfile: Dockerfile
image: nextcloud:32.0.4-apache
5. Build Prozess starten
- zuerst Syntax überprüfen
docker compose config
docker-compose up -d
Ist ein lokales Image vorhanden, wird der build Prozess nicht gestartet. Das kann man erzwingen:
docker compose up -d --build
6. Abwarten, bis der build Prozess durchgelaufen ist, danach kann man die Version prüfen.
Mehrere Instanzen in einem Docker Daemon
Laufen alle Nextcloud Container am selben Docker daemon, reicht es völlig, ein einziges Mal ein Tagged Image zu haben. Jede docker‑compose.yml muss dann nur noch dieses Tag als image: verwenden – ohne build: ‑Block. Der Daemon liefert das Image aus seinem lokalen Cache; es wird nichts neu gebaut und nichts gepullt
Vorgangsweise:
1. Image einmalig taggen
docker tag $(docker images -q --filter reference='nextcloud:32.0.4-apache' | head -n1) \
my-nextcloud:32.0.4-apache
2. setze in alle docker-compose.yml folgende ein (ohnue build:)
image: my-nextcloud:32.0.4-apache
3. Container pro Nextcloud Instanz neu erzeugen
docker compose pull # wird sofort übersprungen, weil Image lokal docker compose up -d # startet mit dem vorhandenen Layer-Cache
Tipp: Versionsvariable nur 1x pflegen:
1. Lege in jedem Instanz‑Verzeichnis (oder als Symlink auf eine gemeinsame Datei) eine .env an – Compose ersetzt Variablen automatisch
# .env NEXTCLOUD_IMAGE=my-nextcloud:32.0.4-apache
2. In jedem docker-compose.yml im Nextcloud Abschnitt:
image: ${NEXTCLOUD_IMAGE}
2. Baue das neue Image einmal, ändere nur die Zeile in einer .env, , wen du einen Symlink gesetzt hast, sonst in jeder, dann:
docker compose up -d # Container aller Instanzen werden ersetzt
2. gemeinsame .env erzeugen
mkdir -p /srv/nextcloud/common cat>/srv/nextcloud/common/.env <<'EOF' NEXTCLOUD_IMAGE=my-nextcloud:32.0.4-apache REDIS_HOST=redis EOF
3. Symlink in jeder Instanz anlegen (am beseten mit absolutem Pfad)
ln -s /srv/nextcloud/common/.env .env
4. Docker-compose.yml nutzt die Variable
version: "3.9"
services:
nextcloud:
image: ${NEXTCLOUD_IMAGE} # kommt aus der (verlinkten) .env
# …
Docker Image auf neuen Server übertragen
1. Image nur einmal als Datei erzeugen
docker save my-nextcloud:32.0.4-apache \ | gzip> my-nextcloud_32.0.4-apache.tar.gz
2. Datei auf den Ziel‑Host übertragen (SCP, rsync, USB‑Stick …)
scp -P Portnummer my-nextcloud_32.0.4-apache.tar.gz user@host2:/tmp/
3. dort einspielen
gunzip -c /tmp/my-nextcloud_32.0.4-apache.tar.gz | docker load
4. Prüfen, ob das Image vorhanden ist
docker images my-nextcloud:32.0.4-apache
Jetzt taucht es lokal als my-nextcloud:32.0.4-apache auf – Compose kann’s direkt nutzen.
5 Docker-compose kann das File direkt nutzen
services:
nextcloud:
image: my-nextcloud:32.0.4-apache
pull_policy: never # verhindert versehentliche Pull‑Versuche
6. aufrufen mit
docker compose up -d # reicht vollkommen, kein Pull nötig
Falls du ganz sicher gehen willst:
docker compose up -d --pull never --no-build