Προς το περιεχόμενο

Περί docker


pmav99

Προτεινόμενες αναρτήσεις

Το docker είναι μία τεχνολογία που στηρίζεται στα Linux Containers. Είναι η τεχνολογία που έφερε την επανάσταση στον τρόπο που γίνεται το deployment. Το θέμα το ανοίγω γιατί παρόλο που υπάρχουν use cases που μπορούν να φανούν χρήσιμα στους desktop users, εκτός του κόσμου των devs, dev-ops παραμένει πρακτικά άγνωστο.

 

Υπάρχουν άπειρα resources στο net που εξηγούν από πολύ συνοπτικά ως πολύ αναλυτικά τι κάνει και πως δουλεύει για αυτό και δε θα μακρηγορήσω.

 

Εν ολίγοις σου επιτρέπει να έχεις μία δεύτερη (ή και τρίτη, τέταρτη, ... Νιοστή) διανομή linux παράλληλα με την δική σου χωρίς να έχεις τα performance issues που έχει το Virtualization. Πρακτικά τo performance είναι σαν να τρέχεις native και αυτό ισχύει για τα πάντα (CPU, GPU, Ι/Ο κτλ). Αυτό γίνεται γιατί όλες οι διανομές που εγκαθιστάς, μοιράζονται τον ίδιο kernel o οποίος και είναι αυτός που τρέχει η βασική σου διανομή (host). 

 

Οι έξτρα διανομές που εγκαθιστάς μπορούν να είναι οτιδήποτε. Δηλαδή μπορείς να έχεις Archlinux host και Ubuntu σαν «guest» (το βάζω σε εισαγωγικά γιατί δεν είναι guest με την έννοια που ειναι πχ στο Virtualbox). Μπορείς να βάλεις gentoo. Μπορείς να βάλεις arch. Μπορείς να βάλεις busybox (τσεκάρετέ το αν δεν το ξέρετε).

 

Μερικά use cases για desktop users. Μέσω docker μπορείς:

  • να εγκαταστήσεις ένα πρόγραμμα που δεν είναι διαθέσιμο στη δική σου διανομή, αλλά έχει πακέτα σε κάποια άλλη (πχ ubuntu). Αντί να μπλέκεις με compile from source και τρέχα γύρευε, το τρέχεις μέσω docker!
  • να εγκαταστήσεις ένα πρόγραμμα το οποίο απλά δες θες να υπάρχει στη βασική σου διανομή. Πχ το skype θέλει pulseaudio και εσένα σε λένε Μπάμπη;* Τρέχεις το skype μέσω docker και τελειώνεις.
  • να δοκιμάσεις/τρέξεις πολλά desktop environments χωρίς να "λερώνεις" τη βασική σου διανομή.
  • https://blog.jessfraz.com/post/docker-containers-on-the-desktop/

Και μερικά ακόμα που ομολογουμένως σπάνια χρειάζονται σε home users αλλά δεν είναι και ανήκουστα

  • να εγκαταστήσεις παράλληλα πολλές versions κάποιου προγράμματος
  • Να κάνεις compile from source κάτι που βρήκες στο νετ και δεν έχει πακέτα και η διανομή σου σπάει αρχ@!#$! για να φτιάξεις δικά σου πακέτα (πχ debian). Το κάνεις compile μέσα σε ένα docker container και ούτε που σε νοιάζει τι σκατά θα κάνει το make install.
  • να έχεις μέσα σε δευτερόλεπτα** ένα throwaway linux environment.

Η διαδικασία εν ολίγοις έχει ως εξής.

  1. Γράφεις ένα Dockerfile, δηλαδή ενα αρχείο που περιέχει τις οδηγίες για την δημιουργία του image. Όταν λέμε οδηγίες εννοούμε ποια πακέτα θα εγκαταστηθούν, ποιοι χρήστες θα δημιουργηθούν κτλ
  2. Χρησιμοποιείς την εντολή docker build για να δημιουργήσεις ένα image της διανομής που περιγράφεται στο Dockerfile
  3. Χρησιμοποιείς την εντολή docker run «για να τρέξεις το image»***

 

Αν έχετε απορίες ρωτήστε και θα προσπαθήσω να απαντήσω.

 

Disclaimer: I am not an expert.

 

* ΑΚΑ βγάζω-σπυριά-στην-ιδέα-και-μόνο

** Την πρώτη φορά δεν θέλει δευτερόλεπτα, αλλά άπαξ και κτίσεις το βασικό image μετά η δημιουργία είναι όντως δευτερόλεπτα.

*** Τεχνικά αυτό δεν είναι ακριβές, αλλά δεν θέλω να το μπλέξω τώρα.

  • Like 6
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ξέχασες να αναφέρεις ότι σπάει σε κάθε update :P Πέρα απο την πλάκα, έχει την χρησιμότητα του. Αλλά δεν θα έλεγα ότι είναι και τόσο απαραίτητο για τους home users.
Στο project που δουλεύω ήμαστε στην φάση που κάνουμε όλα τα applications migrate σε docker. Πάλι καλά δεν το έχω αναλάβει εγώ αυτό, αλλά  θα πρέπει να μάθω αργά η γρήγορα να δουλεύω docker και να γράφω images. Και για να μην λέτε ότι μόνο γκρινιάζω, ορίστε και ένα μικρό και πρόσφατο PDF για docker security

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αλλά δεν θα έλεγα ότι είναι και τόσο απαραίτητο για τους home users.

 

Εγώ δεν είπα ότι είναι απαραίτητο. Είπα ότι υπάρχουν use cases στο οποίο αποτελεί μια πολύ καλή λύση. Πχ απο το να παλεύεις για να κάνεις restrict το skype access το να τρέξεις skype μέσω docker είναι πιο απλό.

 

Το σπάει σε κάθε update είναι σχετικό. Εξαρτάται τι κάνεις. Νομίζω ότι πλέον έχει αρχίσει να μπαίνει σε maturity.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πχ απο το να παλεύεις για να κάνεις restrict το skype access το να τρέξεις skype μέσω docker είναι πιο απλό.

Σίγουρα το skype είναι μια καλή περίπτωση. Αν μπορούσα δεν θα το είχα καν στο windows pc μου. Απλά όπως όλα τα περιβάλλοντα που απευθύνονται περισσότερο σε developers απαιτούν αρκετή υπομονή και καλή γνώση.

 

 

Το σπάει σε κάθε update είναι σχετικό. Εξαρτάται τι κάνεις. Νομίζω ότι πλέον έχει αρχίσει να μπαίνει σε maturity.

Για παράδειγμα εγώ έχω σετάρει μια παλιά version της MySQL (5.5) σε Arch Linux με το official docker image, και όταν την τρέχω, δεν τρέχει. Θέλει να κλείσεις το docker service και να το ξανατρέξεις για να πάρει μπρος. Αυτό ξεκίνησε μετά απο κάποιο update του docker. Μέχρι να καταλάβω ότι έφταιγε αυτό έψαχνα να βρώ τι βλακεία έχω γράψει μέσα στo app που δεν μπορούσε να συνδεθεί.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Θέλει να κλείσεις το docker service και να το ξανατρέξεις για να πάρει μπρος.

 

Bug report άνοιξες; Επίσης από αυτό συμπέρανες ότι σε κάθε update το docker σπάει; Αν ναι, τότε σταμάτα το FUD spreading. To γεγονός ότι όλοι χρησιμοποιούν docker σε production κάτι άλλο λέει για το πόσο robust είναι...

 

Απλά όπως όλα τα περιβάλλοντα που απευθύνονται περισσότερο σε developers απαιτούν αρκετή υπομονή και καλή γνώση

 

Το να γράψεις ένα dockerfile δεν είναι πυρηνική φυσική. Δεν είναι πιο δύσκολο από το να γράψεις ένα πακέτο για AUR. Βασικές γνώσεις linux και κονσόλας θέλει. Για τον χρήστη που βλέπει κονσόλα και παθαίνει αναφυλαξία, ναι δεν κάνει. αλλά στο linux forum του insomnia έχει πολλά άτομα που δεν είναι έτσι.

 

Ασε που αν έχεις ένα έτοιμο dockerfile, είναι κυριολεκτικά 2 εντολές που τις τρέχεις μόνο μία φορά για να δημιουργήσεις το container:

$ docker build -t skype .
$ docker create skype

και άλλες δύο κάθε φορά που τις τρέχεις κάθε φορά που θες να τρέξεις το skype:

$ xhost +local:docker
$ docker start -it skype

Το xhost μπορείς να το βάλεις και στο .{z,ba}shrc οπότε είναι 3 εντολές σύνολο και μία εντολή για να τρέξεις το skype.

 

Δηλαδή η διαδικασία του να χτίσεις πακέτο από το AUR (makepkg κτλ) είναι πιο εύκολη;

edit

 

Και για του λόγου το αληθές, αντιγράφω ένα dockerfile ειδικά για το skype:

https://github.com/jfrazelle/dockerfiles/blob/master/skype/Dockerfile

# Run skype in a container, requires pulseaudio
# (but I have a container for that)
#
# docker run -v /tmp/.X11-unix:/tmp/.X11-unix \
#	-e DISPLAY=unix$DISPLAY \
#	--link pulseaudio:pulseaudio \
#	-e PULSE_SERVER=pulseaudio \
#	--device /dev/video0 \
#	jess/skype
#
FROM debian:jessie

# Tell debconf to run in non-interactive mode
ENV DEBIAN_FRONTEND noninteractive

# Setup multiarch because Skype is 32bit only
# Make sure the repository information is up to date
RUN dpkg --add-architecture i386 && \
	apt-get update && apt-get install -y \
	curl \
	--no-install-recommends


# Install Skype
RUN curl http://download.skype.com/linux/skype-debian_4.3.0.37-1_i386.deb > /usr/src/skype.deb && \ 
	dpkg --force-depends -i /usr/src/skype.deb && \
	apt-get install -fy \
	&& rm -rf /var/lib/apt/lists/*

# Start Skype
ENTRYPOINT ["skype"]

Υπάρχει κάτι στις εντολές αυτές που ένας χρήστης debian δεν καταλαβαίνει;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν καταλαβαίνω γιατί αρπάζεσαι, κουβέντα κάνουμε. Δεν κάνω FUD spread τίποτα, μια πλάκα έκανα (όπως και το ανέφερα άλλωστε), αν και είναι γνωστό ότι σε κάθε update σπάγανε πράγματα σε production και μιλάμε για μεγάλες αλλαγές με το κάθε update. Αυτό δεν σημαίνει ότι δεν θα το χρησιμοποιήσω, ή ότι δεν το χρησιμοποιώ, ούτε είπα πουθενά σε κανέναν να μην το χρησιμοποιήσει.

 

Για μένα και για σένα δεν είναι τίποτα να γράψουμε, ή απλά να διαβάσουμε ένα PKGBUILD, ή ένα dockerfile, αλλά ο χρήστης που δεν γνωρίζει καλά τα τεχνικά, θα πρέπει να κατεβάζει τα έτοιμα. Και όπως πρέπει να προσέχει τι κατεβάζει/τρέχει από το AUR, έτσι θα πρέπει να προσέχει και με τα dockerfiles. Δεν λέω ότι δεν πρέπει να το κάνει, απλά ότι θα πρέπει να προσέχει. Επίσης, εκτός απο το docker υπάρχουν και εναλλακτικά containers. Anywayz, καληνύχτες

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλη φαση.

 

Τι διαφορα εχει απ'το να εχω μια μικρη εγκατασταση σε εναν φακελο η οποια μοιραζεται το ιδιο hardware (bind τα /dev/ /proc /sys) και τον host kernel (μιας και δεν γινεται boot εκει μεσα) και να τρεχω απο εκει οτι θελω με chroot?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλη φαση.

 

Τι διαφορα εχει απ'το να εχω μια μικρη εγκατασταση σε εναν φακελο η οποια μοιραζεται το ιδιο hardware (bind τα /dev/ /proc /sys) και τον host kernel (μιας και δεν γινεται boot εκει μεσα) και να τρεχω απο εκει οτι θελω με chroot?

check και https://wiki.archlinux.org/index.php/Systemd-nspawn

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@tritonas

Καλύτερη ασφάλεια, αν και μπορώ να καταλάβω ότι σε ένα home user αυτο δεν είναι και τόσο σημαντικό + πιο εύκολο setup το οποίο μπορεί να είναι σημαντικό.

 

Για να καταλάβεις, ένα από τα selling points του docker είναι το «Portable deployment across machines». Δηλαδή μπορώ να κτίσω ένα image, να το ανεβάσω στο dockerhub, και μετά μπορείς εσύ να το χρησιμοποιήσεις κατευθείαν χωρίς καθόλου σετάρισμα.

 

Εγώ δεν λέω ότι έχει νοημα να χαλάσεις τα chroot που έχεις στήσει, αλλά αν χρειαστεί να ξανακάνεις κάτι τέτοιο, τότε IMHO αξίζει να τσεκάρεις το docker.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επίσης η διαφορά, και το πλεονέκτημα, είναι ότι με τα docker images το κάθε application μπορεί να έχει το δικό του container / λειτουργικό.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • 2 εβδομάδες αργότερα...
  • 3 χρόνια αργότερα...
Δημοσ. (επεξεργασμένο)

καλησπέρα!

ειμαι άσχετος με docker και θα ήθελα μια μικρή βοήθεια πως μπορώ να τρέξω το Subtitle edit με docker.

σε macbook pro, εχω βάλει το docker desktop for mac 

https://hub.docker.com/editions/community/docker-ce-desktop-mac

με την παρακάτω εντολή, εγκατέστησα μέσω terminal, το Subtitle edit.

Αναφορά σε κείμενο

docker pull fresta/subtitleedit

https://hub.docker.com/r/fresta/subtitleedit/

Στο terminal με την παρακάτω εντολή 

Αναφορά σε κείμενο

docker run --name=subtitleedit -e WIDTH=1280 -e HEIGHT=720 -p 3389:3389 -p 8080:8080 -v /media:/media fresta/subtitleedit

μου έβγαλε το παρακάτω (βάζω μόνο τις τελευταίες γραμμες γιατι ειναι μεγάλο)

Αναφορά σε κείμενο

INFO: Binding org.glyptodon.guacamole.net.basic.rest.activeconnection.ActiveConnectionRESTService to GuiceManagedComponentProvider with the scope "PerRequest"

Jun 03, 2019 12:25:17 PM com.sun.jersey.spi.inject.Errors processErrorMessages

WARNING: The following warnings have been detected with resource and/or provider classes:

  WARNING: A sub-resource method, public void org.glyptodon.guacamole.net.basic.rest.activeconnection.ActiveConnectionRESTService.patchTunnels(java.lang.String,java.util.List) throws org.glyptodon.guacamole.GuacamoleException, with URI template, "/", is treated as a resource method

Jun 03, 2019 12:25:17 PM org.apache.jasper.EmbeddedServletOptions <init>

SEVERE: The scratchDir you specified: /var/lib/tomcat7/work/Catalina/localhost/_ is unusable.

Jun 03, 2019 12:25:17 PM org.apache.coyote.AbstractProtocol start

INFO: Starting ProtocolHandler ["http-bio-8080"]

Jun 03, 2019 12:25:17 PM org.apache.catalina.startup.Catalina start

INFO: Server startup in 7620 ms

 
 
5

Τι πρέπει να κάνω για να εμφανιστεί το interface του Subtitle Edit?

Επεξ/σία από prefuse
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@prefuse

Quote

The container GUI is exposed via RDP and HTTP.

θα συνδεθείς μέσω του browser σου. Θα πρέπει να επισκεφτείς δηλαδή το port που δήλωσες στην εντολή docker run.

http://localhost:8080

ή

http://0.0.0.0:8080

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...