# Docker

Altri eseguiti per riprodurre un ambiente trigger farm:

I containers attivi:

    docker ps

Tutti I container:

    docker ps -a

Le immagini:

    docker images

I container sono istanze di un'immagine

Lanciare un'immagine:
    docker run --name='pippo' -d -i -t -p 57999:7999 -p 58080:8080 incandenza/triggerfarm2:0.2

Con nome "pippo" esponendo le porte 7999 su 57999 e 8080 su 58080 partendo dall'immagine incandenza/triggerfarm2:0.2

Mi aggancio ad container attivo di nome "pippo":

    docker attach pippo

Faccio in esso modifiche ed esco con exit (lo uccido) oppure CTRL-P CRTL-Q per farne il detach. Per committare le modifiche sull'immagine. Il container è istanza di una precisa immagine, il commit prende il nome del container di cui si vogliono committare le modifiche per cui le modifiche vengono committate su quell'immagine:

    docker commit -m "Pulizia dela tmp" -a "Lalo Cura" pippo triggerfarm2:0.3

Per fermare un container:

    docker stop pippo

Per avviare un container:

    docker start pippo

Poi esistono comandi come pause/unpause/kill/restar applicabili sempre ad un container parimenti ai due precedenti.

Rimozione di un container:

    docker rm pippo

Rimozione di tutti i container:

    docker rm `docker ps --no-trunc -aq`

Rimozine di un'immagine:

    docker rmi triggerfarm2

Build di un'immagine a partire da un Dockerfile utile per iniettare files e comandi ad unimmagine (ATTENZIONE al punto finale). Si da per scontata la presenza del Dockerfile (https://www.digitalocean.com/community/tutorials/docker-explained-using-dockerfiles-to-automate-building-of-images) nella con nome "Dockerfile" nella medesima cartelle da cui si sta eseguendo il comando:

    docker build -t "triggerfarm2:0.5" .

Esportare un'immagine

    docker save

Esportare un container

    docker export

Un file per l'avvio senza passare per systemd o system5 ma eseguendo ad esempio tomcat come primo script:

    FROM triggerfarm2:1
        CMD nohup /usr/local/tomcat/bin/catalina.sh run

Per collegarsi ad un container (di nome "pippo") attivo in un nuovo tty:

    docker exec -it pippo bash

Tecnologia su cui si basa Docker:

<https://en.wikipedia.org/wiki/LXC>

## Cheatsheet

<https://github.com/wsargent/docker-cheat-sheet>

## Networking

<https://www.oreilly.com/learning/what-is-docker-networking#example-bridge-mode-networking>

## Tools
**Runlike**: comando in python per fare il reversing di come sia stato lanciato un container utile, ad esempio:

a) cpire cosa fanno vari altri tool tipo **docker-compose** fanno under-the-hood
b) capire cosa **docker run** stesso aggiunge come parametri al lancio

Per installarlo:
    pip install runlike

