Serie di comandi per l’utilizzo di docker su Ubuntu, dall’installazione all’utilizzo.

Link a Docker HUB: https://hub.docker.com/

Installazione valida su Ubuntu server (LTS) 18.04 – 20.04 – 22.04

apt install ca-certificates curl gnupg lsb-release

mkdir -m 0755 -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt update

apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Comandi utili per iniziare ad utilizzare docker

# list immagini presenti in locale:
docker images

# list containers attivi
docker ps

# list tutti i containers:
docker ps -a

######################################
# negli esempi di seguito le immagini 
# che non sono presenti in locale
# vengono scaricate da docker HUB: 
# https://hub.docker.com/
######################################

# test con immagine busybox:
docker run busybox:latest echo "hello world"

# test con immagine busybox e nome al container:
docker run --name hello_world busybox:latest echo "hello world"

# avvio interattivo (-i) + pseudo tty (-t)
docker run -it busybox:latest 
exit

# test detached mode:
docker run -d -name ciao busybox:latest sleep 1000

docker ps
docker inspect ID or NAME
docker stop ID or NAME
docker rm ID or NAME

# stop and delete
docker rm -f ID or NAME

# stop and delete all the containers
docker rm -f $(docker ps -aq)

# test detached con immagine nginx 
# apro la porta 8080 locale verso la 80 del container:
docker run --name test-nginx -d -p 8080:80 nginx

# accesso alla shell di un container avviato in detached mode:
docker exec -it test-nginx bash

Creare una nuova immagine con un Dockerfile

Nell esempio, partendo da un’immagine ubuntu:jammy, facciamo l’update di apt, installiamo git e vim e generiamo una nuova immagine.

creare un file “Dockerfile” con questo contenuto:

FROM ubuntu:jammy
RUN apt update && apt install -y \
    git \
    vim
# crea l'immagine con il comando (attenzionea al punto finale):
docker build -t sampozzo/ubuntu:jammy .

# avvio del container dalla nuova immagine:
docker run --name sampozzo -it sampozzo/ubuntu:jammy

Altro esempio: partendo dall’immagine ufficiale di nginx, sostituiamo l’index.html del webserver con uno custom:

Crea un file index.html (scegli tu il contenuto) ed un Dockerfile nella directory corrente con questo contenuto:

FROM nginx:latest
COPY index.html /usr/share/nginx/html/

Fai la build e l’avvio come sopra (cambiando nome e tag).

Push delle immagine creata su Docker HUB

docker login --username=username
# viene chiesta la pwd

docker push username/image:1.0

Link tra due container

E’ possibile creare una rete privata tra due o più containers per mezzo del paramentro –link

esempio pratico:

Avviare un primo container in modalità detached, il secondo in modalità interattiva e con il paramentro link:

# avvio un primo container, ad esempio nginx
run --name nginx -dp 8080:80 nginx
# avvio il secondo (busybox) in modalità interattiva e con il parametro link: docker run --name client -it --link nginx busybox:latest

all’interno della shell del secondo container, possiamo verificare che il parametro link ha creato una rete privata tra i due container assegnando ad ognuno un ip privato:

ping nginx
PING nginx (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.117 ms
64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.076 ms
64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.083 ms
vi /etc/hosts
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 nginx ac964eb1fb5e 172.17.0.3 e00c080d4443

 

To be continued…