Pr. Creació i desplegament d'un contenidor amb Docker

De wikijoan
Salta a la navegació Salta a la cerca

Referència

Concretament:

La creació i el desplegament d'un docker està explicat en l'apartat:

  • 1.1.3: Creació i desplegament d'un contenidor amb Docker

Creació del docker

NOTA: L'explicació que ve a continuació és seguir fil per randa els apunts de la IOC. S'ha provat en una màquina Linux, i també en una màquina Windows.

Dins del directori de treball, creem la carpeta docker/, i a dins la carpeta src/.

<?php
echo "hola món";
?>

Anem a dockeritzar aquest script, en el context d'una aplicació web que funciona dins d'un servidor web Apache.

Cerquem a Google el docker oficial de PHP

Agafem un tag que contingui apache, per exemple: 7.4-apache (podem utilitzar el cercador de tags). Si volguéssim descarregar aquest docker faríem senzillament:

$ docker pull php:7.4-apache

I ja tindríem un Apache amb funcionalitat PHP.

Però anem a configurar el nostre docker. Per fer-ho, creem el fitxer de configuració Dockerfile (compte usuaris de Windows, aquest fitxer no té extensió). És un fitxer de text (sense extensió), que l'obrim amb qualsevol editor bàsic. Conté tan sols 3 línies:

FROM php:7.4-apache
COPY src/ /var/www/html
EXPOSE 80

La comanda COPY és perquè volem copiar el contingut del nostre directori local src/ a dins de la carpeta /var/www/html, que ja saps que és el directori per defecte de l'Apache per publicar pàgines.

Ja podem muntar el docker:

$ docker build -t hola-mon .

$ docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
hola-mon               latest              5b2cebdbd18f        5 minutes ago       469MB
php                    7.4-apache          4d3d9fe4d89c        8 days ago          469MB

Fixem-nos bé que no hem hagut d'instal·lar cap Linux ni Apache ni PHP. Tota aquesta funcionalitat ja ens ve de la imatge de la qual hem partit (php:7.4-apache).

I ara podem arrencar:

docker run -p 8080:80 hola-mon 

http://localhost:8080/
Forbidden
http://localhost:8080/hola_mon.php

sí que funciona

El professor ha fet servir el 8080 perquè el port 80 el té ocupat per un Apache local. Tú també hauràs de tenir present si tens el XAMP funcionant o no, per veure si hi ha algun servei que estigui ocupant el port 80.

Per aturar el docker n'hi ha prou a fer Ctrl-C o Ctrl-D en la consola per tal d'aturar el procés. NOTA: en cas de què vulguis esborrar una imatge docker has de fer:

$ docker rmi -f 5b2cebdbd18f

És molt útil mapejar la teva carpeta local amb la carpeta del docker, amb l'opció -v:

$ docker run -p 8080:80 -v /home/joan/DAW_M08_DESPL/UF3/docker/src/:/var/www/html/ hola-mon

I aleshores podem modificar el script hola_mon.php, i automàticament quan refresquem el navegador veiem els canvis que hem realitzat.

NOTA usuaris Windows. Per mapejar amb Windows la idea és la mateixa (però recorda que és una mala idea utilitzar directoris amb espais en blanc):

$ docker run -p 8080:80 -v C:\users\joan\docker\:/var/www/html/ hola-mon

Pujar el docker a dockerhub

T'has de registrar amb un compte a:

que és l'espai al núvol on es guarden els dockers.

Des de la línia de comandes ens autentiquem:

$ docker login
Authenticating with existing credentials...
...
Login Succeeded

El següent pas és etiquetar la imatge per pujar-la al repositori. (en comptes de joanillo has de posar el teu nom d'usuari, evidentment).

$ docker tag 2f67228e9e34 joanillo/hola-mon:latest

$ docker image ls
o bé
$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED              SIZE
joanillo/hola-mon      latest              2f67228e9e34        About a minute ago   469MB
hola-mon               latest              2f67228e9e34        About a minute ago   469MB

I ara ja podem pujar el nostre docker (etiquetat) al núvol:

$ docker push joanillo/hola-mon:latest

I ara podem anar al dockerhub i veure que el docker publicat i públic.

Descarregar el docker public a local

Abans de descarregar-lo, primer eliminem el nostre docker local. Per fer-ho tenim les opcions rmi (remove image) i l'opció -f significa force, que l'eliminarà encara que en aquell moment estigués arrencat.

docker rmi -f 2f67228e9e34
docker image ls (comprovem que no hi és)

I ara ja el podem descarregar del núvol:

$ docker pull joanillo/hola-mon

$ docker image ls
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
joanillo/hola-mon      latest              2f67228e9e34        21 minutes ago      469MB

I ja el podem arrencar, igual que abans:

$ docker run -p 8080:80 joanillo/hola-mon

o millor:
$docker run -p 8080:80 -v /home/joan/DAW_M08_DESPL/UF3/docker/src/:/var/www/html/ joanillo/hola-mon

Conclusions

Has desplegat una aplicació web contenidoritzada. Qualsevol persona (el professor) pot descarregar-se aquesta aplicació i fer-la funcionar, sense haver d'instal·lar l'Apache, i sense cap problema de versions, amb la certesa de què funcionarà.

Tasques a realitzar

1. Segueix el procés del docker hola-mon. Fes les següents captures de pantalla (amb evidències de què les has fet a la teva màquina):

  • llistat de contenidors creats a la teva màquina (abans d'esborrar-lo)
  • docker pujat al dockerhub (núvol).
  • llistat de contenidors després de descarregar-lo del dockerhub.

2. Crea el docker docker-pepet, on pepet és el teu nom. Contindrà una aplicació PHP, amb la següent funcionalitat:

3. Enllaç del teu docker públic.

4. Feina pel professor: el professor descarregarà el teu docker i certificarà el seu funcionament.

Entrega

Entregaràs en un pdf les captures de pantalla, comentaris i explicacions suficients, amb les evidències de què la pràctica l'has fet tu i en la teva màquina. El pdf contindrà l'enllaç al docker públic, i el professor certificarà de què funciona.


creat per Joan Quintana Compte, febrer 2022