Androide

Cómo construir imágenes de docker con dockerfile

Cómo crear una imagen personalizada de docker con dockerfile

Cómo crear una imagen personalizada de docker con dockerfile

Tabla de contenido:

Anonim

Una imagen de Docker es el plano de los contenedores de Docker que contiene la aplicación y todo lo que necesita para ejecutarla. Un contenedor es una instancia de tiempo de ejecución de una imagen.

En este tutorial, explicaremos qué es Dockerfile, cómo crear uno y cómo construir una imagen de Docker con Dockerfile.

¿Qué es Dockerfile?

Un Dockerfile es un archivo de texto que contiene todos los comandos que un usuario podría ejecutar en la línea de comandos para crear una imagen. Incluye todas las instrucciones que necesita Docker para construir la imagen.

Las imágenes de Docker están formadas por una serie de capas del sistema de archivos que representan instrucciones en el Dockerfile de la imagen que conforma una aplicación de software ejecutable.

El archivo Docker toma la siguiente forma:

# Comment INSTRUCTION arguments

INSTRUCTION no distingue entre mayúsculas y minúsculas, pero la convención es utilizar MAYÚSCULAS para sus nombres.

A continuación se muestra la lista con una breve descripción de algunas de las instrucciones Dockerfile más utilizadas:

  • ARG: esta instrucción le permite definir variables que se pueden pasar en tiempo de compilación. También puede establecer un valor predeterminado. FROM - La imagen base para construir una nueva imagen. Esta instrucción debe ser la primera instrucción sin comentarios en el Dockerfile. La única excepción a esta regla es cuando desea utilizar una variable en el argumento FROM . En este caso, FROM puede estar precedido por una o más instrucciones ARG . ETIQUETA: se utiliza para agregar metadatos a una imagen, como descripción, versión, autor, etc. Puede especificar más de una LABEL , y cada instrucción LABEL es un par clave-valor. EJECUTAR: los comandos especificados en esta instrucción se ejecutarán durante el proceso de compilación. Cada instrucción RUN crea una nueva capa encima de la imagen actual. AGREGAR - Se utiliza para copiar archivos y directorios desde la fuente especificada al destino especificado en la imagen acoplable. La fuente puede ser archivos o directorios locales o una URL. Si la fuente es un archivo tar local, se descomprime automáticamente en la imagen de Docker. COPY: similar a ADD pero el origen solo puede ser un archivo o directorio local. ENV: esta instrucción le permite definir una variable de entorno. CMD: se utiliza para especificar un comando que se ejecutará cuando ejecute un contenedor. Puede usar solo una instrucción CMD en su Dockerfile. PUNTO DE ENTRADA: similar a CMD , esta instrucción define qué comando se ejecutará al ejecutar un contenedor. WORKDIR: esta directiva establece el directorio de trabajo actual para las instrucciones RUN , CMD , ENTRYPOINT , COPY y ADD . USUARIO: establezca el nombre de usuario o UID que se usará al ejecutar las siguientes instrucciones de ENTRYPOINT , CMD , ENTRYPOINT , COPY y ADD . VOLUME: le permite montar un directorio de máquina host en el contenedor. EXPOSE: se utiliza para especificar el puerto en el que escucha el contenedor en tiempo de ejecución.

Para excluir archivos y directorios de ser agregados a la imagen, cree un archivo .dockerignore en el directorio de contexto. La sintaxis de .dockerignore es similar a la del archivo .gitignore de Git.

Para obtener una referencia completa y una explicación detallada de las instrucciones de Dockerfile, consulte la página oficial de referencia de Dockerfile.

Crear un Dockerfile

El escenario más común al crear imágenes de Docker es extraer una imagen existente de un registro (generalmente de Docker Hub) y especificar los cambios que desea realizar en la imagen base. La imagen base más utilizada al crear imágenes de Docker es Alpine porque es pequeña y está optimizada para ejecutarse en RAM.

Docker Hub es un servicio de registro basado en la nube que, entre otras funcionalidades, se utiliza para mantener las imágenes de Docker en un repositorio público o privado.

En este ejemplo, crearemos una imagen Docker para el servidor Redis. Utilizaremos el último ubuntu 18.04 como imagen base.

Primero, cree un directorio que contendrá el Dockerfile y todos los archivos necesarios:

mkdir ~/redis_docker

Navegue hasta el directorio y cree el siguiente Dockerfile:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Expliquemos el significado de cada una de las líneas en el Dockerfile:

  • En la línea 1 estamos definiendo la imagen base. La instrucción RUN que comienza en la línea 3 actualizará el índice de apt, instalará el paquete "redis-server" y limpiará la caché de apt. Los comandos usados ​​en las instrucciones son los mismos que usaría para instalar redis en el servidor Ubuntu. La instrucción EXPOSE define el puerto en el que escucha el servidor redis. En la última línea, estamos usando la instrucción CMD para establecer el comando predeterminado eso se ejecutará cuando se ejecute el contenedor.

Guarde el archivo y cierre el editor.

Construyendo la imagen

El siguiente paso es construir la imagen. Para hacerlo, ejecute el siguiente comando desde el directorio donde se encuentra el Dockerfile:

docker build -t linuxize/redis.

La opción -t especifica el nombre de la imagen y, opcionalmente, un nombre de usuario y una etiqueta en el formato 'nombre de usuario / imagen: etiqueta'.

El resultado del proceso de compilación se verá así:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Cuando se complete el proceso de compilación, la nueva imagen aparecerá en la lista de imágenes:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Ejecutando un contenedor

Ahora que la imagen está creada, ejecuta un contenedor desde ella ejecutando:

docker run -d -p 6379:6379 --name redis linuxize/redis

Las opciones -d dicen a Docker que ejecute el contenedor en modo separado, la opción -p 6379:6379 publicará el puerto 6379 en la máquina host y la opción --name redis especifica el nombre del contenedor. El último argumento linuxize/redis es el nombre de la imagen, que se utiliza para ejecutar el contenedor.

Cuando se inicia el contenedor, use el siguiente comando para enumerar todos los contenedores en ejecución:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Para verificar que todo funcione como debería, use el redis-cli para conectarse al contenedor acoplable:

redis-cli ping

El servidor redis debería responder con PONG .

Conclusión

Este tutorial cubrió solo los conceptos básicos del uso de Dockerfiles para crear imágenes. Para obtener más información sobre cómo escribir Dockerfiles y las mejores prácticas recomendadas, consulte Mejores prácticas para escribir Dockerfiles.

estibador