You are on page 1of 32

4.

Creación de imágenes
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
• 4.1 Arquitectura de imágenes
• Imágenes

Fuente :https://docs.docker.com/storage/storagedriver/images/container-layers.jpg
4.1 Arquitectura de imágenes
• Imágenes

Fuente :https://docs.docker.com/storage/storagedriver/images/container-layers.jpg
4.1 Arquitectura de imágenes
• Imágenes

Fuente :https://docs.docker.com/storage/storagedriver/images/container-layers.jpg
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
• 4.2 Crear la primera imagen

>docker image build [–t <tag>] <contexto>

• Directorio_Raiz
➢ Carpetas y ficheros
➢ Dockerfile
➢ .dockerignore
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
4.3 ¿Qué es Dockerfile?
• Fichero de texto

• Instrucciones para crear imágenes


o Imagen base
o Comandos para ejecutar en la imagen
o Archivos para incluir en la imagen de carpeta de proyecto
o Dependencias y/o programas
o Puertos abiertos
o Comando para ejecutar cuando se inicia la imagen
4.1 ¿Qué es Dockerfile?
• Ejemplo 1
• Dockerfile
#Establecemos imagen base
FROM ubuntu:18.04
#Comando para indicar al contenedor que comando
#ejecutar cuando arranque ENTRYPOINT
echo "Hola Mundo desde imagen de Docker"

• >docker image build --tag holamundodocker .


4.1 ¿Qué es Dockerfile?
• Se asignan ids para cada capa y el último será el id de la imagen
4.1 ¿Qué es Dockerfile?
• Comando history de “docker image” nos muestra las
capas de las que esta compuesta una imagen
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
4.4 Instrucciones en Dockerfile
• Instrucciones
o FROM, o LABEL,
o CMD, o STOPSIGNAL,
o ENTRYPOINT, o ARG,
o ADD, o ENV,
o COPY, o RUN,
o VOLUME, o ONBUILD,
o WORKDIR, o EXPOSE
o USER,

https://docs.docker.com/develop/develop-
images/dockerfile_best-practices/#dockerfile-instructions
4.4 Instrucciones en Dockerfile
• Ejemplos
FROM ubuntu:18.04
FROM ubuntu:18.04 RUN apt-get update -y
RUN apt-get update -y COPY . /app
COPY . /app WORKDIR /app
CMD python app/app.py ENTRYPOINT ["python"]
CMD ["app.py"]
4.4 Instrucciones en Dockerfile
• RUN: ejecutará los comandos en una nueva capa en la
parte superior de la imagen actual y confirmará los
resultados

• CMD: especifica el comando a ejecutar cuando se


inicia un contenedor

• ENTRYPOINT
4.4 Instrucciones en Dockerfile
• LABEL
LABEL <key>=<value>

LABEL multi.label1="value1" multi.label2="value2" other="value3"

LABEL multi.label1="value1" \
multi.label2="value2" \
other="value3"
4.4 Instrucciones en Dockerfile
• WORKDIR
WORKDIR /opt/webapp/db
CMD ["mkdir dir1"]
WORKDIR /opt/webapp
CMD ["mkdir dir2"]

Podemos reemplazar el directorio de trabajo en tiempo de


ejecución con el parámetro -w, por ejemplo:
$ docker run –ti –w /var/log ubuntu
>pwd /var/log
4.4 Instrucciones en Dockerfile
• ENV
ENV MY_PATH /home/mypath

ENV MY_PATH=/home/mypath FLAG=”FLAG1”

• ADD
ADD fichero.txt /opt/$MYPATH/fichero.txt

ADD fichero.tar.gz /opt/$MYPATH/


4.4 Instrucciones en Dockerfile
• COPY
COPY desarrollo/ /etc/desa/

• EXPOSE
EXPOSE 8080

EXPOSE 8080/UDP

docker run -p 8080:80/tcp -p 8080:80/udp ...


4.4 Instrucciones en Dockerfile

FROM ubuntu:latest

RUN apt-get -y update; \


apt-get -y upgrade; \
apt-get -y install apt-utils \
vim \
htop;
RUN apt-get -y install dstat

CMD ["bash"]
4.4 Instrucciones en Dockerfile
FROM debian
LABEL version="1.0" author="Jose Luis Llorente"

RUN apt-get update && apt-get install -y apache2 && apt-get


clean && rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER user


ENV APACHE_RUN_GROUP group
ENV APACHE_LOG_DIR /var/logs/

EXPOSE 80
ADD ["index.html","/var/html/"]

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]


4. Creación de imagenes
• Ejercicio 1
o Crear una imagen a partir de la imagen
de Ubuntu en su versión 18.04
o Introducir etiqueta LABEL con tres
etiquetas
o Copiar carpeta1 a carpeta examples del
contenedor pero que no este incluida
carpeta2 ni los ficheros png
o Copiar fichero 1.txt en examples
o Una vez creada la imagen ejecutar
contenedor, verificar que no está la
carpeta2 ni la imagen y ver contenido de
1.txt
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
• 4.5 Subir y descargar imágenes en DockerHub
• Hay un sistema jerárquico para almacenar imágenes.

o Registro

o Repositorio

o Etiqueta
4.6 Caché en Docker
• Crear cuenta en https://hub.docker.com/

4.6 Subir y descargar imágenes en DockerHub

• Desde línea de comandos

• >docker login
• >docker push <id_user>/<imagen>[:TAG]
• >docker pull <id_user>/<imagen>[:TAG]
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
4.6 Caché en Docker
• Afecta al pull, push y al build

Fuente: http://static.tumblr.com/mpxyjs6/U54o87rzd/cache-1.png
4.6 Caché en Docker
• No siempre se quiere usar la caché

o -no-cache
4. Creación de imágenes
• Arquitectura de imágenes
• Crear la primera imagen
• Que es Dockerfile
• Instrucciones en Dockerfile
• Subir y descargar imágenes en DockerHub
• Caché en Docker
• Buenas prácticas
4.7 Buenas Prácticas
• Minimizar el contenido a lo estrictamente indispensable
• Optimizar Instrucciones
RUN apt-get update RUN \
RUN apt-get install -y git apt-get update && \
RUN apt-get install -y wget apt-get install -y git \
RUN wget some.tar.gz wget && \ wget some.tar.gz && \
RUN tar -xvzf some.tar.gz tar -xvzf some.tar.gz

• No instalar paquetes innecesarios


• Ordenar argumentos de varias líneas RUN apt-get update && apt-get install -y \


bzr \
Uso de Dockerignore cvs \
• Un proceso por contenedor git \
mercurial \
subversion

You might also like