Mejores practicas para escribir Dockerfiles

Page 1

Docker Colombia Meetup - Segundo Encuentro

Mejores prácticas para escribir Dockerfiles


Hola ● Soy Johan Giraldo (@jsgiraldoh Redes sociales) ● DevOps Engineer ● Grupo Docker Community Leaders ● Me gusta compartir conocimientos ● Autor del Blog: Aprende Docker en Español

2


¿Qué es Docker?

05/04/2022

Mejores prácticas para escribir Dockerfiles

3


¿Qué es Docker?

05/04/2022

Mejores prácticas para escribir Dockerfiles

4


Feliz cumpleaños Docker! 🎂 #9

05/04/2022

Mejores prácticas para escribir Dockerfiles

5


¿Qué es un contenedor? En pocas palabras, un contenedor es un proceso de espacio aislado en su máquina que está aislado de todos los demás procesos en la máquina host. Ese aislamiento aprovecha los espacios de nombres del kernel y cgroups , características que han estado en Linux durante mucho tiempo. Docker ha trabajado para que estas capacidades sean accesibles y fáciles de usar. En resumen, un contenedor: ◼

Es una instancia ejecutable de una imagen. Puede crear, iniciar, detener, mover o eliminar un contenedor mediante DockerAPI o CLI.

Se puede ejecutar en máquinas locales, máquinas virtuales o implementarse en la nube.

Es portátil (se puede ejecutar en cualquier sistema operativo)

Los contenedores están aislados entre sí y ejecutan su propio software, archivos binarios y configuraciones.

05/04/2022

Mejores prácticas para escribir Dockerfiles

6


¿Qué es Docker?

05/04/2022

Mejores prácticas para escribir Dockerfiles

7


¿Qué es Docker?

05/04/2022

Mejores prácticas para escribir Dockerfiles

8


¿Qué es Docker?

05/04/2022

Mejores prácticas para escribir Dockerfiles

9


¿Qué es un contenedor?

05/04/2022

Mejores prácticas para escribir Dockerfiles

10


Guía instalación Docker

1. En el siguiente enlace podrá encontrar la guía para la instalación de docker. https://jsgiraldoh.io/Blog/Instalar-Docker-Engine-en-Ubuntu/

05/04/2022

Mejores prácticas para escribir Dockerfiles

11


Dockerfile Docker puede crear imágenes automáticamente leyendo las instrucciones de un archivo Dockerfile. Dockerfile es un documento de texto que contiene todos los comandos que un usuario podría llamar en la línea de comando para ensamblar una imagen. Con el comando docker build usuarios pueden crear una compilación automatizada que ejecuta varias instrucciones de línea de comandos en sucesión.

05/04/2022

Mejores prácticas para escribir Dockerfiles

12


Dockerfile Oficial Distribución Nginx FROM nginx COPY static-html-directory /usr/share/nginx/html docker build -t some-content-nginx . docker run --name some-nginx -d -p 8080:80 some-content-nginx Luego puede presionar http://localhost:8080o http://host-ip:8080en su navegador.

05/04/2022

Mejores prácticas para escribir Dockerfiles

13


Ejemplo Dockerfile FROM ubuntu:20.04 LABEL maintainer="jsgiraldoh" LABEL version="0.1" LABEL description="This is custom Docker Image for the Apache Services." ENV CONTAINER_TIMEZONE="America/Bogota" ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_RUN_DIR /var/www/html RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone RUN apt update RUN apt install -y apache2

COPY index.html /var/www/html/ CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] EXPOSE 80 05/04/2022

Mejores prácticas para escribir Dockerfiles

14


Dockerfile instrucciones FROM Siempre que sea posible, utilice imágenes oficiales actuales como base para sus imágenes. Recomendamos la imagen de Alpine ya que está estrictamente controlada y es de tamaño pequeño (actualmente menos de 6 MB), sin dejar de ser una distribución completa de Linux. LABEL Puede agregar etiquetas a su imagen para ayudar a organizar imágenes por proyecto, registrar información de licencia, para ayudar en la automatización o por otras razones. RUN Divida RUN declaraciones largas o complejas en varias líneas separadas con barras invertidas para que sea Dockerfilemás legible, comprensible y fácil de mantener. 05/04/2022

Mejores prácticas para escribir Dockerfiles

15


Dockerfile instrucciones CMD La CMD instrucción debe usarse para ejecutar el software contenido en su imagen, junto con cualquier argumento. CMD casi siempre debe usarse en forma de CMD ["executable", "param1", "param2"…]. Por lo tanto, si la imagen es para un servicio, como Apache, ejecutaría algo como CMD ["apache2","DFOREGROUND"]. ENV La ENV instrucción también es útil para proporcionar las variables de entorno requeridas específicas para los servicios que desea incluir en contenedores EXPOSE La EXPOSE instrucción indica los puertos en los que un contenedor escucha las conexiones. En consecuencia, debe utilizar el puerto tradicional común para su aplicación. Por ejemplo, una imagen que contenga el servidor web Apache usaría EXPOSE 80 05/04/2022

Mejores prácticas para escribir Dockerfiles

16


Comprender el contexto de compilación Cuando emite un comando docker build, el directorio de trabajo actual se denomina contexto de compilación. De manera predeterminada, se supone que Dockerfile se encuentra aquí, pero puede especificar una ubicación diferente con el indicador de archivo (-f). Independientemente de dónde Dockerfile viva realmente, todo el contenido recursivo de los archivos y directorios en el directorio actual se envía al daemon de Docker como contexto de compilación. La inclusión accidental de archivos que no son necesarios para crear una imagen da como resultado un contexto de creación más grande y un tamaño de imagen más grande. Esto puede aumentar el tiempo para crear la imagen, el tiempo para extraerla y enviarla, y el tamaño del tiempo de ejecución del contenedor. Para ver qué tan grande es su contexto de construcción, busque un mensaje como este cuando construya su Dockerfile: Sending build context to Docker daemon

05/04/2022

187.8MB

Mejores prácticas para escribir Dockerfiles

17


Canaliza Dockerfile a través de stdin Usa esta sintaxis para construir una imagen usando un Dockerfile desde stdin, sin enviar archivos adicionales como contexto de construcción. El guión (-) toma la posición de PATH e indica a Docker que lea el contexto de compilación (que solo contiene un Dockerfile) en stdin lugar de un directorio. El siguiente ejemplo construye una imagen usando un Dockerfile que se pasa a través de stdin. No se envía ningún archivo como contexto de compilación al daemon.

docker build -t myimage:latest -<<EOF FROM busybox RUN echo "hello world" EOF 05/04/2022

Mejores prácticas para escribir Dockerfiles

18


Excluir con .dockerignore Antes de que la CLI de Docker envíe el contexto al demonio de Docker, busca un archivo con el nombre .dockerignore en el directorio raíz del contexto. Si este archivo existe, la CLI modifica el contexto para excluir archivos y directorios que coincidan con patrones en él. Esto ayuda a evitar enviar innecesariamente archivos y directorios grandes o confidenciales al daemon y potencialmente agregarlos a las imágenes usando ADD o COPY. La CLI interpreta el archivo .dockerignore como una lista de patrones separados por saltos de línea similar a los archivos globales de los shells de Unix. A los efectos de la coincidencia, se considera que la raíz del contexto es tanto el directorio raíz como el de trabajo. 05/04/2022

Mejores prácticas para escribir Dockerfiles

19


Excluir con .dockerignore

05/04/2022

Mejores prácticas para escribir Dockerfiles

20


No instales paquetes innecesarios Continuando con el Dockerfile de ejemplo … RUN apt update RUN apt install -y apache RUN apt install -y bzr RUN apt install -y cvs RUN apt install -y git RUN apt install -y mercurial RUN apt install -y subversion … RUN apt update && apt install -y apache2 --no-install-recommends \ && rm -rf /var/lib/apt/lists/*

05/04/2022

Mejores prácticas para escribir Dockerfiles

21


Minimiza el número de capas FROM ubuntu:20.04 LABEL maintainer="jsgiraldoh" \ version="0.1" \ description="This is custom Docker Image for the Apache Services." ENV CONTAINER_TIMEZONE="America/Bogota" ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_RUN_DIR /var/www/html RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone RUN apt update && apt install -y apache2 --no-install-recommends \ && rm -rf /var/lib/apt/lists/* COPY index.html /var/www/html/ CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] EXPOSE 80 05/04/2022

Mejores prácticas para escribir Dockerfiles

22


Ordenar argumentos de varias líneas RUN apt-get update && apt-get install apache2 -y \ bzr \ cvs \ git \ mercurial \ subversion \ && rm -rf /var/lib/apt/lists/*

05/04/2022

Mejores prácticas para escribir Dockerfiles

23


Que sigue Usa compilaciones de varias etapas # syntax=docker/dockerfile:1 FROM golang:1.16 WORKDIR /go/src/github.com/alexellis/href-counter/ RUN go get -d -v golang.org/x/net/html COPY app.go ./ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=0 /go/src/github.com/alexellis/href-counter/app ./ CMD ["./app"]

05/04/2022

Mejores prácticas para escribir Dockerfiles

24


Puesta en escena... Obten 100 dólares de crédito

Digital Ocean https://m.do.co/c/922854746323

05/04/2022

Mejores prácticas para escribir Dockerfiles

25


Vista a futuro... Orquestación de contenedores con Kubernetes

Disponible en Leanpub y Amazon FTIhHDGp0Jx6

05/04/2022

Mejores prácticas para escribir Dockerfiles

26


🚀 Únete a la comunidad! 🐳 Docker Community Slack

05/04/2022

Mejores prácticas para escribir Dockerfiles

27


¡ GRACIAS !

05/04/2022

Mejores prácticas para escribir Dockerfiles

28


Referencias ◼ Resumen de docker. Disponible en: https://docs.docker.com/get-started/overview/ ◼ https://docs.docker.com/engine/reference/builder/ ◼ https://docs.docker.com/develop/develop-images/dockerfile_best-practices/ ◼ https://docs.docker.com/develop/develop-images/multistage-build/ ◼ https://hub.docker.com/r/docker/whalesay ◼ https://www.slideshare.net/Docker/dcsf19-dockerfile-best-practices ◼ https://www.howtoforge.com/tutorial/how-to-create-docker-images-with-dockerfile/ ◼ https://medium.com/@vi1996ash/steps-to-build-apache-web-server-docker-image-1a2f21 504a8e ◼ https://jsgiraldoh.io/ 05/04/2022

Mejores prácticas para escribir Dockerfiles

29


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.