Docker

De Cacauet Wiki
Salta a la navegació Salta a la cerca

Docker és una plataforma de contenidors, una alternativa interessant a la virtualització. Un contenidor comparteix el kernel del sistema operatiu però disposa dels seus propis recursos de sistema de fitxers (similar a un chroot), espai de memòria i temps de microprocessador.

Conceptes bàsics

Referència bàsica: https://docs.docker.com/engine/userguide/

Imatge: sistema base del què partim per crear nous containers. No son més que un seguit d'arxius dels què disposarà el container quan es posi en marxa. Per crear una imatge podem fer-ho de diverses formes:

  • Descarregar-la de Docker Hub (docker.com) amb docker run <img:versio> (si no la tenim la descarregarà automàticament).
  • Generar-la amb un Dockerfile a partir d'una imatge prèvia (automated)
  • Generar-la de forma binària a partir d'un TAR (serà el sistema d'arxius base)

Container: subsistema que corre comandes o serveis. El generem a partir d'una imatge base.

  • El sistema el "bateja" quan l'inicia amb nom i cognom (a l'estil "fervent_aryabhata", "drunk_sammet", etc.).
  • El container només està actiu mentre executa alguna comanda o servei, si no, es para.
  • Es pot reactivar en background amb un start, i podem attachar-nos o desatachar-nos de la shell que hem obert inicialment.

Volum: directori a compartir entre la màquina amfitriona i el container.

  • També pot ser un device (p.ex. /dev/snd o /dev/sda , però es tracta diferent en el settings).


Quick reference

ULL!

  • <img> és una imatge base (p.ex. debian, wordpress, centos, etc.)
  • <nom> és un container prèviament creat (p.ex. "fervent_aryabhata", "drunk_sammet", etc.)

Creació de containers

Per arrencar una shell en un nou container (podem posar qualsevol comanda enlloc de la shell):

$ docker run -ti <img> /bin/bash

"-ti" = (t)erminal (i)nteractive

Per executar una comanda en un container en marxa:

$ docer exec <nom> <cmd>

Per arrencar un container (prèviament creat) en background:

$ docker start <nom>

Parar un container:

$ docker stop <nom>

Gestió de containers

Llistat d'instàncies creades localment (sense -a les que estan en execució):

$ docker ps -a

Per desatachar-nos d'un contenidor sense parar-lo:

CTRL + P + Q

Per attachar-nos a un contenidor en marxa:

$ docker attach <nom>

Per eliminar un container:

$ docker rm <nom>

Per llistar totes les instàncies i eliminar-les:

$ docker ps -aq | xargs docker rm

Info:

$ docker inspect <nom>

Renombrar:

$ docker rename <nom_antic> <nom_nou>

Gestió d'imatges

Llistat d'imatges disponibles en local:

$ docker images

Cerca d'imatges al repositori de Docker.com:

$ docker search <cadena>

Descarregar una imatge (sense arrencar cap container):

$ docker pull <img:versió>

Crear una nova imatge a partir de Dockerfile (l'anomenem amb -t <tag>):

$ docker build -t <img:versió> <path-to-Dockerfile>

Crear una imatge "binària" (ens donarà el hash de la imatge):

$ docker commit <nom> [<repo>:<tag>]

Per nombrar amb un tag la imatge creada (si no ho hem fet abans):

$ docker tag <hash> <tag>


Gestió de volums i devices

Podem muntar a l'arrencada del container al fer "run":

  • Carpetes del filesystem de l'amfitrió amb
    -v <carpeta>:<mount_point>
  • Carpetes persistents per tots els containers amb:
    -v <alias>:<mount_point>
  • Devices amb
    --device <dev>:<mount_point>

Veure volums actuals:

$ docker volumes ls

Exemples:

$ docker run --device /dev/snd:/dev/snd -v ~/Baixades:/downloads -it debian /bin/bash



Instal·lació


Primeres passes


Crear un Dockerfile

S'ha de nombrar exactament així, Dockerfile.

Referència: https://docs.docker.com/engine/reference/builder/

Exemple bàsic:

FROM library/debian
MAINTAINER Enric Mieza <[email protected]>

RUN apt-get update && \
apt-get install -y mplayer && \
apt-get clean && apt-get autoclean && \
rm -rf /var/lib/apt/lists/*

VOLUME ["/tmp:/vol1"]

Dintre de RUN posem les comandes per inicialitzar la màquina (típicament instal·lar paquets).

Amb VOLUME podem muntar devices i volums de la màquina amfitriona.


Primera imatge i comparació amb chroot


Desplegament de Wordpress amb MySQL

Utiltizarem les imatges oficials: