Cómo crear una imagen personalizada de docker con dockerfile
Tabla de contenido:
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 instruccionesARG
. ETIQUETA: se utiliza para agregar metadatos a una imagen, como descripción, versión, autor, etc. Puede especificar más de unaLABEL
, y cada instrucciónLABEL
es un par clave-valor. EJECUTAR: los comandos especificados en esta instrucción se ejecutarán durante el proceso de compilación. Cada instrucciónRUN
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 aADD
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ónCMD
en su Dockerfile. PUNTO DE ENTRADA: similar aCMD
, esta instrucción define qué comando se ejecutará al ejecutar un contenedor. WORKDIR: esta directiva establece el directorio de trabajo actual para las instruccionesRUN
,CMD
,ENTRYPOINT
,COPY
yADD
. USUARIO: establezca el nombre de usuario oUID
que se usará al ejecutar las siguientes instrucciones deENTRYPOINT
,CMD
,ENTRYPOINT
,COPY
yADD
. 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.
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ónRUN
que comienza en la línea3
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ónEXPOSE
define el puerto en el que escucha el servidor redis. En la última línea, estamos usando la instrucciónCMD
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.
¡Crea imágenes amigables para la web con Bzzt! Editor de imágenes para PC con Windows
Para mejorar el tiempo de carga de su sitio web, debe optimizar las imágenes. Utilice el programa gratuito Bzzt! Image Editor para crear imágenes fáciles de usar.
Administrar imágenes e imágenes con Microsoft Picture Manager
Con Picture Manager puede recortar, expandir o copiar y pegar imágenes. Al usar el menú Imagen, puede cambiar el aspecto de las imágenes.
Cómo eliminar contenedores, imágenes, volúmenes y redes de docker
Esta guía sirve como una hoja de trucos para ayudar a los usuarios de Docker a mantener su sistema organizado y a liberar espacio en el disco al eliminar los contenedores, imágenes, volúmenes y redes de Docker no utilizados.