Introducció a Dockers
Creació d'arxius i directoris
Imatges de Docker
Una imatge de Docker conté els detalls del sistema operatiu o programari que executarà el contenidor Docker. La imatge de Docker es crea a partir d'un Dockerfile, el qual conté les instruccions necessàries per construir-la
Dins d’un Dockerfile hem de definir com a mínim una imatge base. Aquesta imatge pot ser un sistema operatiu (Debian, Ubuntu) o un programari en concret (Apache, Nginx, MariaDB, etc)
En aquest cas definim que la imatge és php:7.0-apache, és a dir, un servidor Apache preparat per treballar amb PHP. A més a més, amb la instrucció COPY estem indicant que tot el que hi ha en aquest directori (el fitxer index.php) es copiï al directori /var/www/html del contenidor Docker
# Dockerfile FROM php:7.0-apache COPY . /var/www/html
Un cop definit el Dockerfile, crearem la imatge
docker build -t php-app .
- El "." serveix per indicar que el Dockerfile es troba en el directori actual
Un cop hem creat la imatge, la podrem cercar amb l’ordre docker imatges, la qual mostrarà les imatges tan pròpies creades per un Dockerfile o públiques descarregades de Dockerhub
guseba@phpDebianAzure:/var/www/html/php/exercicis/practica6/6.2/php-docker-app$ docker images
i Info → U In UseIMAGE ID DISK USAGE CONTENT SIZE php-app:latest b5987dd03878 529MB 133MB
Creació de contenidors
Un cop tenim creada (o descarregada) una imatge de Docker podrem crear un nou contenidor a partir d'aquella imatge
docker run php-app & # Fem servir & per executar-ho en segon pla
Amb l'ordre docker ps -a podem comprovar els contenidors creats i el seu estat.
guseba@phpDebianAzure:/var/www/html/php/exercicis/practica6/6.2/php-docker-app$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c91de400d737 php-app "docker-php-entrypoi…" 43 hours ago Up 19 minutes 0.0.0.0:8089->80/tcp, [::]:8089->80/tcp epic_golick
Tot i això si comprovem els ports exportats, veurem que no apareix cap port 80 i per tant l’aplicació no serà accesible. Això és degut que al Dockerfile no hem especificat que el contenidor exportarà aquest port.
sebagu@sebagu-asix:/var/www/html/php/exercicis/practica6/6.2/php-docker-app$ sudo netstat -putan | grep 80tcp 0 0 127.0.0.1:3306 0.0.0.0 :* LISTEN 1080/mariadb
sebagu@sebagu-asix:/var/www/html/php/exercicis/practica6/6.2/php-docker-app$
Exportació de ports
Per exportar ports del Docker hem d’especifcar-ho al Dockerfile, amb la instrucció EXPOSE
FROM php:7.0-apache COPY . /var/www/html EXPOSE 80
Degut a que hem modifcat el Dockerfile, la imatge generada anteriorment ja no és vàlida i n’hem de crear una de nova. En aquest cas especifcarem el mateix nom de la imatge però en versió 1.2
docker build -t php-app:1.2
Per generar el contenidor farem servir la mateixa ordre, afegint la flag -p <portHost>:<portDocker>
docker run -d -p 80:80 php-app:1.2
- Definim que el port 80 de la màquina host exposarà el port 80 del Docker, és a dir, si accedim a la màquina host pel port 80, realment accedirem al port 80 del Docker
Si ara tornem a comprovar els ports, veurem que estem exportant el port 80 amb un servei anomenat “docker-proxy”
sebagu@sebagu-asix:/var/www/html/php/exercicis/practica6/6.2/php-docker-app$ sudo netstat -putan | grep 80 tcp 0 0 127.0.0.1:3306 0.0.0.0 :* LISTEN 1080/mariadb tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 50750/docker-proxy tcp6 0 0 ::80 :::* LISTEN 50750/docker-proxy
sebagu@sebagu-asix:/var/www/html/php/exercicis/practica6/6.2/php-docker-app$