⭐ Comandos
Repaso de comandos usados en Dockefiler Docerfile es un fichero de comandos para generar una imagen
Crear la imagen a partir del fichero de especificación Dockerfile
docker build ubicación_fichero_Dockerfile
Crea una imagen a partir del fichero Dockerfile ubicado en el mismo directorio de dónde lanzo el comando
docker build -t web_old:v1 .
Warning
- la opción -t permite especificar el nombere de la imagen
- el punto final ’.’ especifica la ubicación del fichero Dockerfile, el directorio actual
- Para ver más opciones del comando build ver
_docker help build
Especificar la imagen base
FROM
Especifica que la imagen sean ubuntu:latest
FROM ubuntu:latest
Comentarios
- Debe de ser la primera instrucción
- Su aparición es obligatoria
- Solo le pueden preceder comentarios ’#’ y la instrucción ARG
Especificar una instrucción a ejectuar dentro de la imagen
RUN
Que se instale apache2, el editor vim y la herramientas para monitoreo de redes net-tools en la imagen
FROM ubuntu:latest
RUN apt update && apt install -y \
apache2
vim
net-tools
Comentarios
- el && hace que no ejecute la instrucción de la derecha, hasta que no haya ejecutado la de la izquierda
- La barra ’' es una forma de seguir en la línea sigueinte como si fuera la misma
- Se puede ejecutar también un fichero externo que copiemos o cualquier instrucción.
Especificar argumentos
ARG
Establece argumentos para la construcción de la imagen del Dockerfile actual. Establece el tag de la versión como un argumenteo $version
ARG version=latest
FROM ubuntu:$version
RUN echo "Valor de version -$version" version.txt
Comentarios
- El valor de los argumentos especificados con ARG no se mantienen más ayá de la ejecución del fichero Dockerfile
- Se puede modificar el valor de los argumentos a la hora de construir la imagen
docker build -t web - -build-arg=18:01 .
Especificando
ARG
Establece argumentos para la construcción de la imagen del Dockerfile actual. Establece el tag de la versión como un argumenteo $version
ARG version=latest
FROM ubuntu:$version
RUN echo "Valor de version -$version" >> version.txt
Comentarios
<ul>
docker build -t web - -build-arg=18:01 .
Especificar variables de entorno (disponibles en la construcción y en la imagen cuando se construya)
ENV
Establece una variable llamada $user, comprueba que existe en la imagen creada
ARG version=latest
FROM ubuntu:$version
ENV user=manuel
RUN echo "Valor de usuario -$user" >version.txt
- A contunuación creamos el contenedor y vemos el contenido del fichero
docker build -t web:v1 .
docker run web:v1 cat version.txt
Comentarios
📝 En este ejemplo, al contenedor le decimos que muestre el contenido del fichero version.txt con el comando cat
Copiar ficheros del contesto a la imagen
COPY
Copia un fichero llamado index.php a una imagen basada en ubuntu:latest, que tenga apache y php
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
apache2\
php\
libapache2-mod-php
COPY index.php /var/www/html/index.php
- El contenido del fichero index.php
<?php
phpinfo();
?>
- La construcción del contenedor
docker run -d -p 8000:80 --name web_old web_old:v1 sh -c "service apache2 start && tail -f /dev/null"
- Abrimo apache y vemo el index.php

Comentarios
📝 En este ejemplo, el comando que ejecutamos en el contenedor es sh -c" comando_o_lista_comandos_ “__
- El comando para arrancar el servicio service apache2 start
- Y para que no se termine el proceso ejectuamos un comando que deja abierto un fichero tail -f /dev/null
ADD: Copiar ficheros del contesto a la imagen.
CMD ejecuta un comando cuando se inicia el contenedor.
ADD CMD
ADD Copia un fichero llamado https://github.com/MAlejandroR/json_tv/blob/main/tv.json en una imagen
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
apache2\
php\
libapache2-mod-php\
php-json
ADD https://raw.githubusercontent.com/MAlejandroR/json_tv/main/tv.json /var/www/html/tv.json
COPY index.php /var/www/html
RUN chmod 775 /var/www/html/*
CMD sh -c "service apache2 start && tail -f /dev/null"
- El contenido del fichero index.php
<?php
$tv = file_get_contents("tv.json");
$cadenas = json_decode($tv, true);
foreach ($cadenas as $cadena) {
echo "<h1>{$cadena['name']}</h1>";
foreach ($cadena['channels'] as $canal){
echo "
<a href='{$canal['web_old']}'>
<img src = '{$canal['logo']}'>
</a>";
}
echo "<hr style='background-color:green;height:10px' />";
}
?>
- La construcción del contenedor
docker run -d -p 8000:80 --name web_old web_old:v1
- Solicitamos el recurso en un navegador y vemos el resultado

Comentarios
📝 En este ejemplo es un poco complicado, comentamos
- Recupero el fichero que hay en la web tv.json
- Tengo que instalar una extensión de php (phgp-json) para leer su contenido que es un json.
- Tengo que dar permisos para que apache pueda leer su contendio
- Cuidado con las barras si quiero especificar "./tv.js" vs ".\tv.js"
- 😄El código de php ya lo realizaremos cuando empecemos con ese tema 😄
- No tenemos que especificar ningún comando para que se ejecute el contenedor
- El -d es para especificar que se ejecute el contenedor en background.
Especificar el puerto que voy a mapear o realizar el forware
EXPOSE
Establece que vas a realizar un forwar sobre el puerto 80
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
apache2\
php\
libapache2-mod-php\
php-json
ADD https://raw.githubusercontent.com/MAlejandroR/json_tv/main/tv.json /var/www/html/tv.json
COPY index.php /var/www/html
RUN chmod 775 /var/www/html/*
EXPOSE 80
CMD sh -c "service apache2 start && tail -f /dev/null"
Comentarios
- Uso el mismo ejemplo anterior especicando que voy a compartir el puerto 80
- Este comando es informativo, no obliga a nada ni por ponerlo se comparte el puertoç
- Es recomendado en las buenas prácticas
docker build -t web - -build-arg=18:01 .
Crear etiquetas en la imagen
LABEL
Añade 3 etiquetas, tu identificación maintainer description version
FROM ubuntu:latest
ARG DEBIAN_FRONTEND=noninteractive
LABEL maintainer="manuel Romero <manuelromeromiguel@gmail.com>"
LABEL description="Imagen de contenedor con Apache, PHP y un archivo JSON"
LABEL version="1.0"
RUN apt update && apt install -y \
apache2\
php\
libapache2-mod-php\
php-json
ADD https://raw.githubusercontent.com/MAlejandroR/json_tv/main/tv.json /var/www/html/tv.json
COPY index.php /var/www/html
RUN chmod 775 /var/www/html/*
EXPOSE 80
CMD sh -c "service apache2 start && tail -f /dev/null"
Comentarios
- Puedes crear tus propias etiquetas.
- maintainer, description, version se usan de forma estándar.
docker build -t web - -build-arg=18:01 .