|
|
(Una versione intermedia di uno stesso utente non Γ¨ mostrata) |
Riga 1: |
Riga 1: |
β | Questa pagina descrive l'organizzazione dei microservizi basati su container Docker che usiamo al GOLEM. | + | Questa pagina raccoglie alcuni comandi utili su Docker. |
| | | |
β | {{Note
| + | == Dove mette i volumi Docker? == |
β | |type=attention
| |
β | |text=Se stai usando Docker per realizzare un servizio al GOLEM, allora dovresti considerare di scambiare quattro chiacchiere col sistemista e di entrare a far parte del gruppo del sistema automatico ''argilla'' su git.
| |
β | }}
| |
β | | |
β | == Tassonomia ==
| |
β | L'associazione ha alcuni '''server''', che possono essere sia fisici che virtuali.
| |
β | I server offrono dei '''servizi''', che, in genere, sono composti da piΓΉ '''microservizi''', che vengono installati per mezzo di '''container''' basati su '''immagini''' (nel caso specifico, immagini Docker)
| |
β | | |
β | == Flusso di lavoro ==
| |
β | Ho un programma e voglio farne un container docker per usarlo nell'infrastruttura GOLEM. Che fare?
| |
β | | |
β | * Sono il programmatore:
| |
β | *# Scrivere il Dockerfile per il proprio programma
| |
β | *# Creare l'immagine per il proprio programma
| |
β | | |
β | * Sono il sistemista:
| |
β | *# Scrivere il docker-compose.yml per il servizio
| |
β | *# Avviare il servizio
| |
β | | |
β | Segue un esempio di flusso di lavoro per [https://acme.com/software/thttpd/ thttpd].
| |
β | | |
β | === Creazione dell'immagine ===
| |
β | PoichΓ© manca l''''immagine''' Docker per ''thttpd'', bisogna scrivere un ''Dockerfile'' che descriva come creare questa immagine; poichΓ© non Γ¨ un programma mantenuto dal GOLEM, e si tratta di qualcosa di sufficientemente piccolo, non ha senso che esista in un suo repository dedicato, perciΓ² lo si deve mettere in ''argilla/images''
| |
β | | |
β | * descrivere l'immagine:
| |
β | <syntaxhighlight lang="Dockerfile">
| |
β | FROM alpine:latest
| |
β | RUN apk add thttpd
| |
β | ENTRYPOINT ["thttpd", "-D", "-d", "/html"]
| |
β | </syntaxhighlight>
| |
β | | |
β | * creare l'immagine e taggarla
| |
β | <syntaxhighlight lang="bash">
| |
β | docker build --tag git.golem.linux.it/argilla/thttpd:1 .
| |
β | </syntaxhighlight>
| |
β | | |
β | Note:
| |
β | * ''git.golem.linux.it'' identifica il dominio del ''registry'' che contiene le nostre immagini personalizzate; il registry Γ¨ quello integrato in Gitea, un'interfaccia web per git;
| |
β | * ''argilla'' identifica l'organizzazione relative a strumenti di sistema;
| |
β | * ''thttpd'' identifica il nome dell'immagine specifica
| |
β | * ''1'' identifica il tag dell'immagine
| |
β | | |
β | {{Note
| |
β | |type=info
| |
β | |text=Utilizzare sempre un tag puntuale e mai generico, e specificare sempre il tag puntuale dell'immagine, per evitare spiacevoli sorprese nel caso in cui il tag dovesse essere sovrascritto. Per esempio: ''1'' o ''1.2'' vanno bene, mentre ''latest'' no.
| |
β | }}
| |
β | | |
β | === Creazione di un servizio ===
| |
β | * Scegliere un nome significativo per il servizio, che identifichi bene di cosa si tratta.
| |
β | ** Per esempio, ''archivio'' e ''blog'' vanno bene, mentre ''webserver'' e ''wordpress'' no (tutti sanno che thttpd Γ¨ un webserver, e che wordpress serve per fare i blog: al massimo, questi ultimi potrebbero essere nomi adatti alle ''immagini'', non ai ''servizi'').
| |
β | * I file <code>docker-compose.yaml</code> per i servizi, vanno messi nel repository ''argilla/docker'', rispettando l'albero delle directory.
| |
β | * Scegliere una porta d'ascolto libera e univoca, e annotarla in [[Servizi]]: questo consente di evitare conflitti in caso di spostamenti di container da un server ad un altro.
| |
β | * Montare i volumi sotto <code>/srv/$nome_servizio</code>, per coerenza.
| |
β | | |
β | <syntaxhighlight lang="yaml">
| |
β | version: "3.3"
| |
β | services:
| |
β | archivio:
| |
β | image: git.golem.linux.it/atena/thttpd:1
| |
β | restart: unless-stopped
| |
β | ports:
| |
β | - "8000:80"
| |
β | volumes:
| |
β | - /srv/webserver:/html
| |
β | </syntaxhighlight>
| |
β | | |
β | dove:
| |
β | * ''archivio'' Γ¨ il nome del servizio, usato da docker-compose per nominare i container automaticamente
| |
β | * ''image'' immagine docker, con tanto di dominio del repository
| |
β | * ''ports'' sono espresse nella forma ''host:container''
| |
β | * ''volumes'': usare sempre una cartella nella forma ''/srv/$nome_servizio'', per coerenza
| |
β | | |
β | Un servizio spesso Γ¨ composto da piΓΉ microservizi, anche se non Γ¨ il caso di questo esempio.
| |
β | | |
β | {{Note
| |
β | |type=info
| |
β | |text=Ricordarsi sempre di utilizzare un nome significativo per il servizio, di annotare la porta in ascolto e di montare i volumi sotto /srv
| |
β | }}
| |
β | | |
β | === Avvio di un servizio ===
| |
β | <syntaxhighlight lang="bash">
| |
β | docker-compose up
| |
β | </syntaxhighlight>
| |
β | | |
β | Una volta sicuri che funzioni, utilizzare <code>-d</code> per eseguirlo in background.
| |
β | | |
β | === Pushare immagine ===
| |
β | Sul repository privato:
| |
β | | |
β | <syntaxhighlight lang="bash">
| |
β | docker push git.golem.linux.it/argilla/thttpd:1
| |
β | </syntaxhighlight>
| |
β | | |
β | Se non Γ¨ mai stato fatto, la prima volta il registry richiede di effettuare l'autenticazione:
| |
β | <syntaxhighlight lang="bash">
| |
β | docker login git.golem.linux.it
| |
β | </syntaxhighlight>
| |
β | | |
β | == UtilitΓ ==
| |
β | === Dove mette i volumi Docker? ===
| |
| Se non si impostano i volumi del conatiner Docker li crea automaticamente in un "suo" percorso. | | Se non si impostano i volumi del conatiner Docker li crea automaticamente in un "suo" percorso. |
| Per sapere dove il container mette i nostri dati si possono utilizzare questi comandi: | | Per sapere dove il container mette i nostri dati si possono utilizzare questi comandi: |
Riga 116: |
Riga 16: |
| | | |
| Al posto del parametro ''ID'' e' sepre possibile utilizzare il nome assegnato al container, nome che Γ¨ anch'esso reperibile dall'elenco ottenuto con <code>docker ps</code>. | | Al posto del parametro ''ID'' e' sepre possibile utilizzare il nome assegnato al container, nome che Γ¨ anch'esso reperibile dall'elenco ottenuto con <code>docker ps</code>. |
β |
| |
| | | |
| [[Category:Howto]] | | [[Category:Howto]] |
| + | [[Category:Sysop]] |