forked from putro/presentazione-docker
commit
8d908f2fb8
6 changed files with 363 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||
[submodule "themes/reveal-hugo"] |
|||
path = themes/reveal-hugo |
|||
url = https://github.com/dzello/reveal-hugo.git |
@ -0,0 +1,28 @@ |
|||
# presentazione-gnupg |
|||
|
|||
immagine docker di hugo (static site generator) |
|||
|
|||
che usa un sottomodulo per avere un tema che usa reveal.js per gestire la presentazione in markdown |
|||
|
|||
|
|||
|
|||
utilizzo: |
|||
|
|||
# docker-compose up -d |
|||
|
|||
la presentazione e' visibile su |
|||
|
|||
http://localhost:1313 |
|||
|
|||
|
|||
il contenuto della presentazione e' nella cartella content, |
|||
se lo si modifica viene immediatamente modificata la presentazione |
|||
(utile in fase di scrittura per avere una preview live) |
|||
|
|||
|
|||
al termine della presentazione: |
|||
|
|||
# docker stop hugo && docker rm hugo |
|||
|
|||
|
|||
|
@ -0,0 +1,23 @@ |
|||
title = "Docker for dummies" |
|||
baseurl = "http://localhost:1313/" |
|||
languageCode = "en-us" |
|||
theme = "reveal-hugo" |
|||
|
|||
[outputFormats.Reveal] |
|||
baseName = "index" |
|||
mediaType = "text/html" |
|||
isHTML = true |
|||
|
|||
[params.reveal_hugo] |
|||
custom_theme = "reveal-hugo/themes/robot-lung.css" |
|||
#custom_theme = "reveal-hugo/themes/sunblind.css" |
|||
history = true |
|||
slide_number = false |
|||
transition = 'slide' |
|||
transition_speed = 'fast' |
|||
#highlight_theme = "zenburn" |
|||
progress = true |
|||
|
|||
|
|||
[markup.goldmark.renderer] |
|||
unsafe = true |
@ -0,0 +1,290 @@ |
|||
+++ |
|||
title = "Docker per principianti" |
|||
outputs = ["Reveal"] |
|||
|
|||
+++ |
|||
|
|||
|
|||
# Docker |
|||
|
|||
## Cos'e': |
|||
|
|||
* una piattaforma aperta per costruire, distribuire ed eseguire applicazioni all'interno di container |
|||
|
|||
* esiste per linux/mac/windows |
|||
|
|||
* i container non sono macchine virtuali, ad es. condividono la RAM e il kernel col sistema che li ospita |
|||
|
|||
* sono pero' "isolati" dal sistema sottostante grazie a due funzioni del kernel: Control Groups (Cgroups) e Namespaces |
|||
|
|||
--- |
|||
|
|||
# Concetti base |
|||
|
|||
## Immagini |
|||
|
|||
* Un'immagine docker e' un template in sola lettura |
|||
|
|||
* Esiste un Docker Hub, un repository di immagini gia' pronte |
|||
|
|||
* Si possono costruire facilmente immagini basandosi su immagini pre-esistenti (es. debian-mini) a cui posso aggiungere un singolo pacchetto |
|||
|
|||
* le immagini hanno delle tag associate, per cui ad es. possono esistere diverse "versioni" di una certa immagine, ad es. php:5 e php:7 |
|||
o anche debian:stretch e debian:buster |
|||
|
|||
--- |
|||
|
|||
# Concetti base |
|||
|
|||
## Container |
|||
|
|||
* Un container e' una "istanza" di una immagine |
|||
|
|||
* Un container in genere esegue un solo processo (es. apache) |
|||
|
|||
* Quindi ad esempio se si vuole un CMS servono almeno 2 container: uno per il webserver e uno per il database |
|||
|
|||
* I container possono comunicare tra di loro tramite un'interfaccia di rete |
|||
|
|||
* I container possono comunicare allo stesso modo anche con l'host, per cui ad esempio potrei avere il webserver |
|||
in un container e il database sull'host |
|||
|
|||
--- |
|||
|
|||
# Componenti base |
|||
|
|||
## Docker Engine |
|||
|
|||
* Docker e' un'applicazione client/server |
|||
|
|||
* il Docker Engine e' il demone che controlla l'esecuzione dei containers, e gira coi permessi di root. |
|||
|
|||
* esiste un file di configurazione in /etc/docker/daemon.json |
|||
|
|||
--- |
|||
|
|||
# Docker client |
|||
|
|||
il client e' l'interfaccia (testuale) per fare tutto, dalla costruzione delle immagini all'esecuzione dei containers. |
|||
|
|||
esistono intefacce grafiche, ma sono poco utili per imparare a usare docker. |
|||
|
|||
--- |
|||
|
|||
## comandi per le immagini |
|||
|
|||
* docker search - cerca una immagine nel docker hub |
|||
|
|||
* docker pull - scarica un'immagine es. docker pull hello-world |
|||
|
|||
* docker images - lista le immagini presenti nel nostro sistema |
|||
|
|||
* docker rmi nomeimmagine - elimina una immagine dal disco |
|||
|
|||
--- |
|||
|
|||
``` |
|||
(~)# docker search nextcloud |
|||
NAME DESCRIPTION STARS OFFICIAL AUTOMATED |
|||
nextcloud A safe home for all your data 1492 [OK] |
|||
linuxserver/nextcloud A Nextcloud container, brought to you by Lin… 239 |
|||
wonderfall/nextcloud All-in-one alpine-based Nextcloud image. 82 [OK] |
|||
greyltc/nextcloud Nextcloud: a safe home for all your data. De… 39 [OK] |
|||
ownyourbits/nextcloudpi-armhf NextCloudPi ARM docker container 28 |
|||
ownyourbits/nextcloudpi NextCloudPi Docker container (all architectu… 12 |
|||
ownyourbits/nextcloudpi-x86 NextCloudPi x86 docker container 12 |
|||
``` |
|||
|
|||
--- |
|||
|
|||
``` |
|||
(~)$ docker images |
|||
REPOSITORY TAG IMAGE ID CREATED SIZE |
|||
nextcloud 18 30510f8fb18b 24 hours ago 726MB |
|||
nextcloud 17 b158dd64c9a3 2 months ago 724MB |
|||
wallabag/wallabag latest 89208e55d00c 5 months ago 482MB |
|||
putro/web2py latest 65ec2a7db4f2 7 months ago 607MB |
|||
putro/apache-php latest 958bf6f8388e 8 months ago 273MB |
|||
bitnami/minideb buster 0e45c7c725a0 8 months ago 67.5MB |
|||
bitnami/minideb stretch 04c0a4570b8c 13 months ago 53.7MB |
|||
postgres latest 79db2bf18b4a 10 months ago 312MB |
|||
x86dev/docker-ttrss latest dab1dd3dcc68 11 months ago 94.1MB |
|||
putro/taskd 0.1 a7aec0dc9429 13 months ago 78.4MB |
|||
``` |
|||
|
|||
--- |
|||
|
|||
## comandi per i container |
|||
|
|||
* docker ps - mostra i container in esecuzione |
|||
|
|||
* docker ps -a - mostra i container in esecuzione e quelli fermi |
|||
|
|||
* docker rm ID - elimina il container ID (funziona solo per quelli fermi) |
|||
|
|||
* docker start/stop ID avvia un container fermo o ne ferma uno in esecuzione |
|||
|
|||
* docker logs (-f) ID - mostra i log di un container |
|||
|
|||
--- |
|||
|
|||
``` |
|||
(~)$ docker ps -a |
|||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
|||
4d6cce1d9768 b158dd64c9a3 "/entrypoint.sh apac…" 2 months ago Up 2 months 80/tcp nextcloud |
|||
1bcc9ddd624b wallabag/wallabag:latest "/entrypoint.sh wall…" 5 months ago Up 5 months 80/tcp wallabag |
|||
a2627194dc0a a7aec0dc9429 "/run.sh" 7 months ago Up 5 months 0.0.0.0:53589->53589/tcp taskd |
|||
632a922e55f9 putro/apache-php "/usr/bin/apache2-fo…" 8 months ago Up 7 months 80/tcp, 443/tcp, 8080/tcp apache |
|||
cfa463df8e9d x86dev/docker-ttrss "/init" 11 months ago Up 7 months 4443/tcp, 8080/tcp ttrss |
|||
06d25d8acea4 postgres:latest "docker-entrypoint.s…" 13 months ago Up 7 months 5432/tcp postgres |
|||
5ca30876c4b2 jojomi/hugo:latest "/run.sh" 52 minutes ago Exited (137) 39 minutes ago hugo |
|||
``` |
|||
--- |
|||
|
|||
## docker run |
|||
|
|||
fa partire un processo dentro un nuovo container partendo dall'immagine specificata, es. docker run hello-world |
|||
|
|||
se non si specifica un nome il container avra' un nome casuale, altrimenti usare --name nomescelto |
|||
|
|||
ci sono un sacco di opzioni, vedi man docker-run, perche' questo e' il comando con cui si fa partire un container e si specificano tutti i "parametri" |
|||
|
|||
--- |
|||
|
|||
## hello-world |
|||
|
|||
questa e' un'immagine minimale, contiene solo un eseguibile che viene lanciato all'avvio, che stampa un testo e poi esce |
|||
|
|||
quando il processo lanciato all'avvio del container esce, il container si spegne perche' non c'e' piu' nulla in esecuzione. |
|||
|
|||
**Un container esegue un solo processo** |
|||
|
|||
**un'immagine docker e' "programmata" per eseguire un solo comando quando avvia un container** |
|||
|
|||
Se e' necessario eseguire piu' processi dentro un container bisogna usare qualcosa tipo supervisord, cioe' un programma che una volta lanciato puo' fare cose e resta in esecuzione. |
|||
|
|||
--- |
|||
|
|||
## docker exec |
|||
|
|||
esegue un comando dentro un container in esecuzione, es. docker exec -it /bin/sh mysql |
|||
|
|||
in questo modo ci si ritrova in una shell sh **dentro** il container mysql in esecuzione. |
|||
|
|||
--- |
|||
|
|||
## La persistenza dei dati |
|||
|
|||
i container non devono **MAI** contenere dati volatili perche' i dati non sopravvivono alla distruzione o riavvio di un container |
|||
|
|||
#### come gestire i dati dentro i container: |
|||
|
|||
* bind-mount di una cartella sull'host dentro il container |
|||
|
|||
* docker volumes (stanno in /var/lib/docker/volumes) |
|||
|
|||
--- |
|||
|
|||
## docker network |
|||
|
|||
i container possono sempre comunicare tra di loro tramite un'interfaccia bridged docker0 (su linux) |
|||
mentre di default non sono raggiungibili dall'esterno. |
|||
|
|||
per rendere un container visibile pubblicamente si puo': |
|||
|
|||
* mettergli un reverse-proxy davanti (es. nginx, anche dockerizzato a sua volta) |
|||
|
|||
* mappare una porta dell'host su una porta del container |
|||
|
|||
e' comunque possibile creare reti e assegnare indirizzi IP ai container |
|||
|
|||
--- |
|||
|
|||
## Dockerfile |
|||
|
|||
* e' un file "ricetta" per creare una nuova immagine (con docker build) |
|||
|
|||
* definisce come creare l'immagine (da dove partire e cosa aggiungere (files e pacchetti) |
|||
|
|||
* definisce alcune configurazioni dell'immagine (es. che porta di rete aprire all'esterno) |
|||
|
|||
* definisce cosa eseguire all'avvio |
|||
|
|||
* in genere su hub.docker.com sono disponibili i Dockerfile con cui si sono create le immagini |
|||
|
|||
--- |
|||
|
|||
##### esempio di Dockerfile per costruire un'immagine nginx |
|||
|
|||
|
|||
``` |
|||
|
|||
FROM bitnami/minideb:buster |
|||
MAINTAINER Mario Rossi (mario.rossi@diocovid.xxx) |
|||
RUN apt-get update |
|||
RUN apt-get install -y nginx |
|||
COPY index.html /var/www/html/ |
|||
ENTRYPOINT [“/usr/sbin/nginx”,”-g”,”daemon off;”] |
|||
EXPOSE 80 |
|||
|
|||
``` |
|||
|
|||
|
|||
docker run -d -p 80:80 --name webserver myimage |
|||
|
|||
--- |
|||
|
|||
## docker-compose |
|||
|
|||
* e' un software che permette di leggere un file di configurazione per avviare containers |
|||
|
|||
* non fa parte di docker, va scaricato a parte |
|||
|
|||
* la sua sintassi e' variata nel tempo, infatti il docker-compose.yml riporta sempre la versione |
|||
|
|||
* permette di definire variabili, porte, volumi, reti per avviare containers. |
|||
|
|||
* semplifica l'uso di "docker run" |
|||
|
|||
--- |
|||
|
|||
https://hub.docker.com/_/nextcloud/ |
|||
|
|||
``` |
|||
version: '2' |
|||
|
|||
volumes: |
|||
nextcloud: |
|||
db: |
|||
|
|||
services: |
|||
db: |
|||
container_name: database |
|||
image: mariadb |
|||
restart: always |
|||
volumes: |
|||
- db:/var/lib/mysql |
|||
environment: |
|||
- MYSQL_ROOT_PASSWORD=rootpwd |
|||
- MYSQL_PASSWORD=nextcloudpwd |
|||
- MYSQL_DATABASE=nextcloud |
|||
- MYSQL_USER=nextcloud |
|||
|
|||
app: |
|||
image: nextcloud:18 |
|||
container_name: nextcloud |
|||
ports: |
|||
- 8080:80 |
|||
links: |
|||
- db |
|||
volumes: |
|||
- nextcloud:/var/www/html |
|||
restart: always |
|||
``` |
|||
|
|||
docker-compose up -d |
|||
|
|||
--- |
|||
|
|||
|
|||
# FINE |
@ -0,0 +1,18 @@ |
|||
version: '3' |
|||
|
|||
services: |
|||
hugo: |
|||
image: jojomi/hugo:0.54.0 |
|||
container_name: hugo |
|||
volumes: |
|||
- ./:/src |
|||
- /tmp/hugo-output/:/output |
|||
environment: |
|||
- HUGO_WATCH='true' |
|||
#- HUGO_REFRESH_TIME=3600 |
|||
- HUGO_THEME=reveal-hugo |
|||
#- HUGO_BASEURL=mydomain.com |
|||
restart: always |
|||
ports: |
|||
- 1313:1313 |
|||
|
Loading…
Reference in new issue