Benutzer-Werkzeuge

Webseiten-Werkzeuge


docker:nextcloud

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
docker/nextcloud.txt · Zuletzt geändert: von franz

Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki