[offtopic] Docker images und Zugriff auf Shares

Begonnen von bugster_de, 26 Juli 2018, 09:14:45

Vorheriges Thema - Nächstes Thema

bugster_de

Hi Leute,

ich weiß, das ist offtopic, aber da hier im Forum so viele Leute mit Know-How unterwegs sind dachte ich ich versuche es einfach mal.

Ich bin gerade dabei meinen alten Ubuntu Server durch eine neu-aufgebaute Maschine zu ersetzen. Der alte Server hat in Summe 6 Festplatten mit Daten und alle Anwendungen sind flat auf dem System installiert (also keine VM, Docker oder sonstiges). Beim Neuaufbau möchte ich dies nun durch Docker Images für die einzelnen  Anwendungen ersetzen, da dies wohl durchaus den Wartungsaufwand des Systems in Grenzen hält. Die Daten auf den Festplatten sind Stand heute nur einmal vorhanden aber werden von verschiedenen Anwendungen benutzt. Z.B. liegt all meine Musik an einer Stelle und wird von Squeeze-Server, Plex und Samba (für Sonos) benutzt. Manche Anwendungen haben dabei nur Lese Rechte auf die Daten, andere haben Lese/Schreibrechte. Ein Skript besorgt dann das Backup der Daten, die man natürlich nur einmal backupen muß, da die Daten ja nur einmal vorhanden sind. Auch macht das Script ein Backup der Konfig-daten (z.B. auch mysql datenbank für den Owncloud-Server)

Das würde ich beim neuen System natürlich gerne auch wieder so machen aber im neuen System liegen dann ja alle Anwendungen in ihrem jeweiligen, eigenen Docker Image. So ganz schlau werde ich aber aus der Docker-Doku nicht. Man kann wohl ein Volume anlegen und dies dann in verschiedenen Docker Images nutzen. Heisst aber, ich müsste die verschieden Daten dann in das Volume verschieben? Andere Methode scheint zu sein, die Daten auf dem Laufwerk im Docker zu mounten. Hat das Performance Nachteile?


Falls sich jemand fragt "ja aber wenn das heute mit flacher Installation doch läuft, warum auf Docker umbauen?" oder "warum überhaupt ein neuer Server, wenn der alte doch läuft?"
- gerade ownCloud und TVHeadend haben mir schon so manche Nacht gekostet, nach einen update die Dinger wieder ans Laufen zu bekommen. TVHeadend hat typischerweise einen gewissen zeitlichen Versatz zwischen Erscheinen einer neuen Ubuntu Version und der Bereitstellung der Pakete. Von Docker verspreche ich mir, dass ich nicht immer alles gleichzeitig hochziehen muß
- der bisherige Server ist ein Core-2 Duo, den ich mal am Wertstoffhof aus dem Container gezogen habe. Da ich festgestellt habe, dass alle Endgeräte mit h264 oder h265 mit mp3-stereo als erstem Audio Stream sehr gut umgehen können, encode ich alle Videos auf dieses Format mit ffmpeg. Die Performance von ffmpeg ist dabei aber doch arg überschaubar. Der neue Server baut auf einem Pentium G4560 auf, der das in Hardware kann.
- um beim Streamen von Inhalten Bandbreite zu sparen würde ich gerne die Streams in Echtzeit umkodieren. Also nicht das TV-Signal in MPEG2 sondern in h264/h265 streamen. Mit einem Core2-Duo aber nicht mal ansatzweise machbar






Wernieman

Du kannst in docker auch ein Pfad reinmounten:
Siehe Doku: https://docs.docker.com/storage/bind-mounts/

Was übrigens gerne vergessen wird ... die Container sollten auch upgedatet werden!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

bugster_de

Danke für die Info. Ich hatte das zwar schon mal gelesen, aber noch nicht ganz verstanden, wie es sich mit den Access Rights verhält. Die allermeisten Ordner sind bei mir für die allermeisten Applikationen nur als read-only zugreifbar und dies steuere ich Stand heute über user,group,others Rechte der Folder.

ZitatWas übrigens gerne vergessen wird ... die Container sollten auch upgedatet werden!
Auf jeden Fall ! Ich verspreche mir aber von den Dockern dabei folgendes:
- ich kann die einzelnen Docker unabhängig voneinander updaten und vorallem unabhängig vom OS. Schönes Beispiel ist immer ein Release Upgrade von Ubuntu oder nur dem Kernel, den man vorallem wegen Sicherheit natürlich zügig einspielen sollte. Führt aber dann dazu, dass z.B. TVHeadend nicht mehr geht oder ich den OS Upgrade zurück halten muß, bis dann endlich ein TVHeadend zur Verfügung steht.
- ich kann ein neues Docker-Image erstmal ausprobieren. Ich stoppe das alte Image, verschiebe es an eine andere Stelle, ziehe mir das neue Image und probiere es aus. Wenn es geht dann gut, wenn es Probleme gibt kann ich erstmal das alte Image wieder nutzen.
ich weiß: man sollte solche Spielerein auf einem Test-System machen und nicht auf dem Live-System. Ich habe aber die Erfahrung gemacht, dass ich die Feinheiten der Nutzung eigentlich nur im Real Betrieb sehe.

Wernieman

Kleiner Hinweis: Verwende Dock hier im Betrieb aus genau den Gründen ;o)

Da ich es beruflich mache (aber noch ohne kupernetes o.Ä.) , gehe ich (bzw. wir) über "docker-compose" und tragen die Konfig in eine nette Datei ein., Die ist dann auch einfacher Versionierbar (git o.Ä.)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

chris1284

#4
Ich halte es so (habe plex,openhab,habridge und homekit auf docker umgestellt) das jeder container einen eigenen User inkl Group hat (ohne Home und ohne Shell logon. Dazu einen eigenen Ordner für jeden container mit den Volumes (mit -v eingebunden, für zb config, usw). Auf die Ordner at nur root und die group des users Zugriff. Für die Einbindung gestehender Ordner (zb Filme) habe ich dann den User (zb plex) in die dort berechtigte "Filme-write" Gruppe aufgenommen. Leider muss man sagen da man ja keine  2. Gruppe "Filme-read" berechtigen kann

Leider ist es in der Windowswelt doch besser geregelt, hier kann ich zich Gruppen auf einen Ordner unterschiedlichst berechtigen. Wie bekommt man das unter Linux hin?
Ein User, Eine Gruppe, und alles anderen sind doch arg beschränkt. Bei shares geht es ja zum glück über samba besser fein zu berechtigen aber auf dem host...
Gibts hier Lösungen für zb owner [irgend ein User] full, Group[1] full, Group[2] read, rest nichts ?


kaputt

Zitat von: chris1284 am 27 Juli 2018, 18:08:02Gibts hier Lösungen für zb owner [irgend ein User] full, Group[1] full, Group[2] read, rest nichts ?
evtl. Access Control Lists (kurz ACL).
Gruß aus L.E.
Uwe

Bei U/Linux hilfreich aber nicht nötig, bei Windows nötig aber nicht hilfreich!
Rechtschreibfehler sind beabsichtigt und Ausdruck meiner Persönlichkeit

Wernieman

Die Lösung IST ACL ... übrigens macht es Windows auch nicht anders ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

chris1284

danke für den Hinweis, hatte ACL nicht als extra aktivierbare Option auf dem Schirm, warum sowas nicht default aktiviert ist.... :o

Wernieman

Weil man es auf einem "Singel-User-System" oder auch einfachem Serversystem einfach nicht braucht. Da macht es die Sache einfach nur komplizierte ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

bugster_de

Hi,

wusste ich doch, dass hier Leute unterwegs sind die sich auskennen :-) Danke !

Ich habe das alles jetzt mal aufgesetzt und die ersten Docker Container laufen so wie sie sollen und auch (fast) wie ich mir das gedacht habe.

Zitatdas jeder container einen eigenen User inkl Group hat
das war auch mein Gedanke und wollte das so aufsetzen. Wenn ich z.B. shares habe, auf die mehrere Container zugreifen sollten wollte ich mir eine Gruppe machen und dann die einzelnen Docker User dieser Gruppe hinzufügen.
ABER: das ganze geht schief, wenn der Docker Container auf Hardware zugreifen muß. Dies ist z.B. bei TVHeadend der Fall mit Zugriff auf die /dev/dvb Fernsehkarten. Diese gehören auf dem Host System typischerweise root:root und werden nach jedem reboot auch wieder dem root:root zugeordnet. Das kann man zwar mit udev Regeln am Host auch hinbekommen, aber dies ist eine Ecke im Linux, bei der meine Kenntnisse doch arg dünn bis nicht vorhanden sind. Muß ich mich mal reinfuchsen.
Auf manchen Systemen gehören die DVB Karten wohl root:video  und dann würde es reichen, den docker user der Gruppe video zuzuordnen. Bei meinem Ubuntu 18.04 ist es aber wie gesagt root:root und ich möchte auf keinen Fall den Docker User der Gruppe root zuordnen

Weitere "Baustelle" bei der ich noch nicht ganz durchgestiegen bin: mein Host System wird ein Ubuntu 18.04.1 LTS, manche Docker-Images setzen aber auf älteren Ubuntu Images auf (z.B. TVHeadend auf 14.04). Ich bin da etwas skeptisch vorallem bei Containern die dann auch von außen erreichbar sein werden und damit natürlich voll im "Wind" des Internets stehen. Klar findet man auf dem Hub auch Images mit neuerer Basis aber momentan orientiere ich mich bei der Image Auswahl vorrangig an Images, die von Docker selbst kommen oder falls nicht vorhanden solche die eine große Anzahl an positiven Sternen und Downloads haben. Wie auch immer: sollte ich da in das Image rein gehen und eine apt-get dist-upgrade machen oder mir im Fall der Fälle doch selbst ein Image bauen?
In das Bauen eigener Images habe ich mich eingelesen und es scheint ja machbar zu sein.

Zitatüber "docker-compose" und tragen die Konfig in eine nette Datei ein
das wird auch noch ein Thema werden, wenn mehrere Container für eine Applikation laufen müssen. Z.B. mysql und owncloud

Bringt mich aber zu einer weiteren Frage: momentan baue ich die Container von Hand mit dem docker create commando. Bei manchen von den Images ist aber die Konfigzeile endlos lang und ich würde mal vermuten, in einem halben Jahr weiß ich die nicht mehr auswendig. Baut ihr euch da Scripte, so dass man den Update eines Images quasi automatisch machen kann?

Wernieman

Nur mal kleine Anmerkungen auf die Schnelle. Für größere ist es mir aktuell zu heiß/schwül

Zitat von: bugster_de am 02 August 2018, 17:52:56
Weitere "Baustelle" bei der ich noch nicht ganz durchgestiegen bin: mein Host System wird ein Ubuntu 18.04.1 LTS, manche Docker-Images setzen aber auf älteren Ubuntu Images auf (z.B. TVHeadend auf 14.04). Ich bin da etwas skeptisch vorallem bei Containern die dann auch von außen erreichbar sein werden und damit natürlich voll im "Wind" des Internets stehen. Klar findet man auf dem Hub auch Images mit neuerer Basis aber momentan orientiere ich mich bei der Image Auswahl vorrangig an Images, die von Docker selbst kommen oder falls nicht vorhanden solche die eine große Anzahl an positiven Sternen und Downloads haben. Wie auch immer: sollte ich da in das Image rein gehen und eine apt-get dist-upgrade machen oder mir im Fall der Fälle doch selbst ein Image bauen?
In das Bauen eigener Images habe ich mich eingelesen und es scheint ja machbar zu sein.
das wird auch noch ein Thema werden, wenn mehrere Container für eine Applikation laufen müssen. Z.B. mysql und owncloud
Ubuntu 14.04 ist noch voll im Support. Außerdem gibt es auch Images, die mit einem minnimalerem Basissystem (alpine?) gebaut werden. Lasse die Images am besten, wie sie sind. Nur wenn Du es wirkoich brauchst, d.h. die Images verbessern mußt, dann ...


Zitat von: bugster_de am 02 August 2018, 17:52:56
Bringt mich aber zu einer weiteren Frage: momentan baue ich die Container von Hand mit dem docker create commando. Bei manchen von den Images ist aber die Konfigzeile endlos lang und ich würde mal vermuten, in einem halben Jahr weiß ich die nicht mehr auswendig. Baut ihr euch da Scripte, so dass man den Update eines Images quasi automatisch machen kann?
Antwort: docker-compose
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

bugster_de

Danke. Ich schaue mir das Docker-compose dann mal an.

Images selber bauen wollte ich eigentlich vermeiden wenns geht aber das Basis Image sollte schon Ubuntu bleiben, denn sonst fang ich bei alpine wieder an die Install und Upgrade Befehle zu lernen.

Thema Zugriff auf Hardware: selstsam: es gab bereits eine Regel für DVB Hardware, die eine Gruppe zugeordnet hat, aber die greift nicht für den folder /dev/dvb/apater0 sondern nur für alles was da drin liegt. Ich habe mir jetzt also einfach einen cron job beim Boot angelegt, der den Owner und die Gruppe von /dev/dvb/ ändert. Jetzt geht es auch mit einem speziellen user pro container. Keine Ahnung ob das so elegant ist, aber es tut.


Wernieman

Zitatcron job beim Boot angelegt,

Also entweder per udev, per "init-Script" (bzw. systemd) oder ....  aber per cron-job? Alle X-Minuten??
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

bugster_de

Hi,

ZitatAlso entweder per udev
udev besitzt heute schon eine Regel, die die Geräte als root:video anlegt ,aber der Folder /dev/dvb/adapter0 bleibt bei root:root. Keine Ahnung wie ich das in einer udev Regel umstelle. Führt aber beim TVHeadend Contaier dazu, dass ich --device=/dev/dvb nur machen kann, wenn der Container unter root läuft, da alle anderen User gar nicht das Recht haben, die Inhalte des Ordners zu sehen. Deshalb also entweder den Besitzer der Geräte und der Folder auf einen anderen User umhängen oder halt 'others' ebenfalls Lese- und Schreibrechte geben. Zeiteres fand ich aber jetzt nicht so sexy

Zitatper "init-Script" (bzw. systemd)
geht natürlich auch

Zitataber per cron-job? Alle X-Minuten??
ich hab ihn mir jetzt mal beim reboot angelegt, da ich eine PCI Karte ja eher nicht im laufenden Betrieb einstecke. Aber Du hast Recht: sollte in der Zukunft mal eine SUB DVB Karte dazu kommen, dann könnte das bei reboot schief gehen. Ich mach die Regel auch noch mal mit alle X Minuten rein.


Wernieman

ZitatIch mach die Regel auch noch mal mit alle X
Genau das fande ich fraglich .... ich würde nicht per cron etwas so entscheidenes alle X-Minuten durchführen lassen.

Ans reboot-hängen .. das hatte ich übersehen ;o)
Gibt übrigens noch X verschiedene Wege, um es umzusetzen ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html