From 8d908f2fb838ec124036c894df27d0550bcfd947 Mon Sep 17 00:00:00 2001 From: putro Date: Sun, 26 Apr 2020 18:53:41 +0200 Subject: [PATCH] initial commit --- .gitmodules | 3 + README.md | 28 +++++ config.toml | 23 ++++ content/_index.md | 290 +++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 18 +++ themes/reveal-hugo | 1 + 6 files changed, 363 insertions(+) create mode 100644 .gitmodules create mode 100644 README.md create mode 100644 config.toml create mode 100644 content/_index.md create mode 100644 docker-compose.yml create mode 160000 themes/reveal-hugo diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d419312 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "themes/reveal-hugo"] + path = themes/reveal-hugo + url = https://github.com/dzello/reveal-hugo.git diff --git a/README.md b/README.md new file mode 100644 index 0000000..ac0b4b4 --- /dev/null +++ b/README.md @@ -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 + + + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..d1f5ff9 --- /dev/null +++ b/config.toml @@ -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 diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..c5db848 --- /dev/null +++ b/content/_index.md @@ -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 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f0b16d1 --- /dev/null +++ b/docker-compose.yml @@ -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 + diff --git a/themes/reveal-hugo b/themes/reveal-hugo new file mode 160000 index 0000000..92bcef7 --- /dev/null +++ b/themes/reveal-hugo @@ -0,0 +1 @@ +Subproject commit 92bcef7bfad85668f42b4f72844a259e00d56a3e