Instal·lació i Primers Passos amb Docker
Instal·lant Docker al vostre sistema
Ara que entenem què és Docker i per què és útil, anem a instal·lar-lo. Teniu dues opcions principals: Docker Engine (la versió de línia de comandes) o Docker Desktop (que inclou una interfície gràfica i algunes eines addicionals).
Docker Desktop: la manera més senzilla de començar
Per a alumnes i desenvolupadors, Docker Desktop és normalment la millor opció per començar. Inclou tot el que necessiteu: Docker Engine, Docker Compose, una interfície gràfica per gestionar contenidors, i algunes eines útils. A més, si esteu en Windows o Mac, Docker Desktop s'encarrega automàticament de configurar la màquina virtual necessària per executar contenidors Linux.
Per instal·lar Docker Desktop, aneu a https://www.docker.com/products/docker-desktop/ i descarregueu la versió per al vostre sistema operatiu. La instal·lació és senzilla, com qualsevol altra aplicació. A Windows, també podeu instal·lar-lo des de la Microsoft Store, que proporciona actualitzacions automàtiques.
Un cop instal·lat, Docker Desktop us demanarà que configureu alguns detalls. Si esteu en Windows, us preguntarà si voleu utilitzar WSL 2 (Windows Subsystem for Linux 2), que és l'opció recomanada perquè ofereix millor rendiment. A Mac, us preguntarà si voleu utilitzar Apple Virtualization Framework (per a Macs amb Apple Silicon) o Rosetta (per compatibilitat amb arquitectures diferents).
Després d'instal·lar, obriu un terminal i executeu:
Hauríeu de veure alguna cosa com "Docker version 28.0.0, build xxxxxxx" (el número exacte pot variar). Això confirma que Docker està instal·lat i funcionant correctament.
Docker Engine a Linux: instal·lació per a servidors
Si esteu treballant en un servidor Linux o preferiu la versió de línia de comandes, podeu instal·lar Docker Engine directament. Les instruccions específiques varien segons la distribució de Linux, però en general el procés és similar.
Per a Ubuntu o Debian, primer elimineu qualsevol versió antiga que pugui estar instal·lada:
Després afegiu el repositori oficial de Docker:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -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
I finalment, instal·leu Docker:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Per verificar que tot funciona, executeu:
Aquesta comanda descarregarà una petita imatge de prova, crearà un contenidor, i mostrarà un missatge de benvinguda. Si veieu el missatge, vol dir que Docker està funcionant correctament.
Per defecte, necessitareu permisos de superusuari (sudo) per executar comandes Docker. Si voleu poder executar Docker sense sudo, afegiu el vostre usuari al grup docker:
Després haureu de tancar la sessió i tornar a entrar perquè els canvis tinguin efecte.
Podeu trobar instruccions detallades per a altres distribucions Linux a https://docs.docker.com/engine/install/
Verificant la instal·lació
Independentment de com l'hagueu instal·lat, és una bona idea verificar que tot funciona correctament. A més de docker --version, també podeu executar:
Això us mostrarà molta informació sobre la vostra instal·lació de Docker: quants contenidors teniu, quantes imatges, quin sistema d'emmagatzematge està utilitzant, etc. Si veieu aquesta informació sense errors, vol dir que Docker està configurat correctament i llest per utilitzar.
Els vostres primers passos amb Docker: creant i executant contenidors
Ara que teniu Docker instal·lat, anem a fer la nostra primera experiència pràctica. Començarem amb exemples senzills per entendre el workflow bàsic abans de passar a coses més complexes.
El primer contenidor: Hello World
Docker inclou una imatge de prova anomenada "hello-world" que és perfecta per verificar que tot funciona. Executeu aquesta comanda:
Veureu diverses línies de sortida. Anem a analitzar què ha passat exactament quan heu executat aquesta comanda, perquè entendre aquest procés és fonamental:
Primer, Docker ha buscat la imatge "hello-world" al vostre ordinador local. Com que és la primera vegada que l'executeu, no l'ha trobat. Docker us ha dit "Unable to find image 'hello-world:latest' locally", que vol dir que no la teniu descarregada.
Aleshores Docker automàticament s'ha connectat a Docker Hub, que és el registre públic d'imatges Docker (com si fos un GitHub per a imatges Docker). Ha trobat la imatge hello-world i l'ha descarregat. Veureu línies com "Pulling from library/hello-world" i "Status: Downloaded newer image".
Un cop descarregada la imatge, Docker ha creat un contenidor nou basant-se en aquesta imatge i l'ha executat. El contenidor ha mostrat un missatge explicant el que ha passat, i després ha finalitzat. Tot el procés ha durat només uns segons.
Si executeu la mateixa comanda una segona vegada, veureu que ara és molt més ràpid. Això és perquè la imatge ja està descarregada al vostre sistema, així que Docker només ha de crear i executar el contenidor.
Executant un servidor web NGINX
Ara provem alguna cosa més interessant: executar un servidor web complet. NGINX és un servidor web molt popular, i hi ha una imatge oficial a Docker Hub. Executeu:
Aquesta comanda és més complexa que l'anterior, així que anem a analitzar cada part:
El paràmetre -d vol dir "detached", és a dir, executar el contenidor en segon pla. Sense aquest paràmetre, el contenidor ocuparia el terminal i veuríeu tots els logs en directe. Amb -d, Docker executa el contenidor i us retorna el control del terminal.
El paràmetre -p 8080:80 és molt important: està fent un "port mapping" o mapatge de ports. Vol dir "connecta el port 8080 del meu ordinador amb el port 80 del contenidor". Els contenidors tenen la seva pròpia xarxa aïllada, així que per defecte no podeu accedir als serveis que hi ha dins. Amb aquest mapatge, quan accediu a localhost:8080 al vostre ordinador, Docker redirigeix la connexió al port 80 dins del contenidor, on NGINX està escoltant.
El paràmetre --name meu-nginx assigna un nom al contenidor. Si no poseu un nom, Docker en generarà un de forma aleatòria (coses com "hungry_einstein" o "silly_tesla"). És millor posar-li un nom descriptiu perquè després pugueu referir-vos al contenidor fàcilment.
Finalment, nginx:1.27-alpine especifica quina imatge volem utilitzar. La primera part (nginx) és el nom de la imatge, i la part després dels dos punts (1.27-alpine) és l'etiqueta o tag que especifica la versió. L'etiqueta "alpine" indica que aquesta és una versió basada en Alpine Linux, que és una distribució molt lleugera. Si no especifiqueu etiqueta, Docker utilitzarà "latest", però com hem comentat abans, és millor especificar versions concretes.
Després d'executar aquesta comanda, veureu un identificador llarg (el hash del contenidor). Això vol dir que el contenidor s'ha creat i està en execució. Ara podeu obrir el navegador i anar a http://localhost:8080. Hauríeu de veure la pàgina de benvinguda d'NGINX!
Gestionant el cicle de vida dels contenidors
Ara que teniu un contenidor en execució, anem a aprendre les comandes bàsiques per gestionar-lo. Per veure tots els contenidors que estan en execució actualment, executeu:
Això us mostrarà una llista amb informació sobre cada contenidor: el seu ID, la imatge de la qual prové, quant de temps fa que està en execució, i quins ports estan exposats. Hauríeu de veure el vostre contenidor "meu-nginx" a la llista.
Si voleu veure TOTS els contenidors, incloent els que s'han aturat, afegiu el paràmetre -a:
Per aturar un contenidor que està en execució, utilitzeu:
Això envia un senyal SIGTERM al procés principal del contenidor, donant-li temps per tancar-se correctament. Si el contenidor no s'atura després d'uns 10 segons, Docker enviarà un SIGKILL per forçar-lo a tancar.
Si executeu docker ps ara, veureu que el contenidor ja no apareix, perquè s'ha aturat. Però si executeu docker ps -a, encara el veureu a la llista, amb l'estat "Exited".
Per tornar a arrencar un contenidor aturat:
Fixeu-vos que docker start és diferent de docker run. docker run crea un NOUS contenidor a partir d'una imatge. docker start arrenca un contenidor existent que s'havia aturat. Si executeu docker run nginx diverses vegades, creareu múltiples contenidors diferents. Si executeu docker start sobre el mateix contenidor, només esteu arrencant-lo novament.
Per eliminar completament un contenidor:
Això eliminarà el contenidor permanentment. Però atenció: primer heu d'aturar el contenidor amb docker stop, o bé utilitzar el paràmetre -f per forçar l'eliminació: