Buenas practicas con Dockerfile

Encadenar instrucciones &&

Como cada comando RUN en el Dockerfile genera una nueva capa de nuestra imagen anterior podemos encadenar los "RUN's" para así generar menos capas de nuestra capa editable de las imágenes:

/Dockerfile

FROM debian:stretch

RUN apt-get update && apt-get install -y git vim

si ejecutamos para crear una nueva imagen con el anterior Dockefile solo veremos que se ejecutan dos pasos en lugar de cuatro

Comandos multilínea

Otra buena práctica es ordenar los argumentos multi-línea alfabéticamente , esto ayudará a evadir la duplicación de paquetes y hará el listado mucho mas fácil de actualizar y leer, por ejemplo:

/Dockerfile

FROM debian:stretch

RUN apt-get update \
    && apt-get install -y \
    git \
    nginx \
    vim

CMD

con este comando podemos encadenar acciones que se ejecutan una vez se construye el contenedor (partiendo de la imagen creada con el Dockerfile). Si no se pone ningún CMD se ejecuta el comando por default que viene de la imagen original:

/Dockerfile

FROM debian:stretch

RUN apt-get update \
    && apt-get install -y \
    git \    
    vim

CMD ["echo","Hola desde Docker"]

Ahora construimos la imagen con el anterior Dockerfile

docker build -t git_vim .

en el paso 3 imprime en consola:

Step 3/3 : CMD ["echo","Hola desde Docker"]

luego construimos el primer contenedor con la imagen anteriormente creada

docker run --rm git_vim
> Hola desde Docker

Copy

Este comando copia los archivos contexto del build hacia el fileSystem del contenedor

FROM debian:stretch

RUN apt-get update \
    && apt-get install -y \
    git \    
    vim

COPY abc.txt /src/abc.text

CMD ["echo","Hola desde Docker"]

luego construimos la imagen

docker build -t image_test .

luego el contenedor

docker run --rm -it image_test bash

una vez allí podemos verificar que el folder src y el archivo abc.txt han sido enviados al contenedor

root@2c8118d2fb5c:/# cd src/
root@2c8118d2fb5c:/src# ls
abc.txt

ADD

Es similar a COPY pero además de copiar y enviar archivos también puedo descargar archivos desde internet y agregarlos al contenedor.

También cuenta con la habilidad de descomprimir archivos

la regla es usar COPY a menos que se esté completamente seguro de que se requiere ADD

Last updated

Was this helpful?