Cómo personalizar las imágenes de Docker con DockerFiles
- 2120
- 90
- Sra. Lorena Sedillo
Este artículo muestra cómo personalizar las imágenes de Docker utilizando un archivo de descripción llamado Dockfile.
Verá cómo extender las imágenes existentes, personalizarlas a sus necesidades y también cómo publicar la imagen resultante en Docker Hub.
En este tutorial aprenderás:
- Cómo personalizar una imagen con un Dockerfile.
- Cómo publicar la imagen resultante en Docker Hub.
Requisitos y convenciones de software utilizados
Categoría | Requisitos, convenciones o versión de software utilizada |
---|---|
Sistema | Ubuntu 18.04 Beaver Bionic |
Software | Estibador |
Otro | Acceso privilegiado a su sistema Linux como root o a través del sudo dominio. |
Convenciones | # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominiops - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado |
Introducción
Los artículos anteriores presentaron conceptos Docker y algunos comandos básicos de Docker. En este artículo, verá cómo personalizar y extender una imagen de Docker existente, describiendo las modificaciones en un DockerFile y publicar la imagen a un registro.
El Dockerfile
En el artículo anterior, ha realizado modificaciones en un contenedor en ejecución y cometió los cambios en el caché de imagen local. Aunque es un recurso útil para situaciones específicas, se recomienda que las personalizaciones se realicen de una manera más documentada, para que la imagen pueda implementarse en otros hosts. La forma recomendada es escribir un Dockerfile.
DockerFile es un archivo YAML, que es un archivo de texto con alguna sintaxis: las relaciones se expresan utilizando la sangría (espacios) y cada línea se compone de pares de clave y valor.
Comencemos con un DockerFile simple que instala el paquete accesorios
(contiene comandos htop
y PD
) a una imagen de Debian.
Cree un nuevo directorio, ingrese y guarde el archivo a continuación con el nombre Dockfile
(Capital D):
Desde Debian Run Apt-Get Update && \ apt-Get -y Install Procps
Copiar Este dockerfile afirma que la imagen base se llama Debian (DE
cláusula). Si no existe localmente, se descargará desde Docker Hub. El CORRER
comando ejecuta apt-get
dos veces. Observe el uso de una barra insegura (\) para romper una línea y el uso de -Y
para omitir la solicitud de confirmación de instalación de apt-get
.
El siguiente paso es construir la imagen con Docker Build
.
$ Docker Build -t Mydebian . Enviar contexto de compilación a Docker Daemon 2.048kb Paso 1/2: De Debian ---> be2868beba Paso 2/2: Ejecutar apt-get update && apt-get -y install procps ---> Ejecutando en 52A16b346afc ... Eliminación de contenedores intermedios 52A16B346AFC ---> F21A05A5966 SECRETURAD F21A05A59966 Etiquetado con éxito Mydebian: Último
Copiar La bandera -t mydebian
está nombrando la nueva imagen. El punto (.) le dice a Docker que use el directorio actual para buscar un DockerFile. Observe que se crean y eliminan nuevas capas a medida que se interpretan las líneas del Dockerfile.
Debe haber una nueva imagen en el caché local.
$ Docker Images Repositorio de etiqueta ID de imagen de tamaño creado Mydebian Último F21A05A59966 Hace 8 minutos 119MB Debian Último BE2868BEBABA 7 semanas hace 101MB
Copiar Se puede crear un contenedor de esta imagen.
$ Docker Run -it - -Name mydebian_container mydebian root@ef9eb174874a:/# ps -ef uid pid ppid c stime tty tiempo cmd root 1 0 02:43 pts/0 00:00:00 Bash raíz 9 1 0 02:43 PTS/0 00:00:00 PS -EF
Copiar De ahora en adelante puedes crear contenedores que ejecutan Debian con el procps
paquete y los comandos htop
y PD
ya estará instalado.
Ahora creemos un DockerFile para que Apache y PHP estén instalados en la hora de compilación de la imagen, para lograr los mismos objetivos del artículo anterior, cuando los comandos se ejecutaron dentro del contenedor.
Desde debian run apt-get update && \ apt-get -y instalación procps libapache2-mod-php servicio cmd service apache2 iniciar
Copiar Hemos agregado libapache2-mod-php
en la línea 3 y un CMD
Comando en la línea 4 para iniciar Apache. Cuando se inicia el contenedor, el CMD
se ejecuta el comando. Puede existir solo uno CMD
comando por dockerfile. Cuando el CMD
se especifica el comando, reemplaza el CMD
comando de la imagen que está extendiendo. Si el CMD
Se omite el comando, la de la imagen base se ejecutará (si corresponde). Como habrás adivinado, el Dockerfile de la imagen base de Debian tiene una CMD
comandar para ejecutar bash. Puede verificar esto en el Docker Hub.
$ Docker Run -d - -Name mydebian_container2 -d -p 8000: 80 -v "$ pwd":/var/www/html mydebian ad325685b738464c49bff40b65c6824160105ab5c285282efbc4ddeec20ba Nombres de puertos AD325685B738 Mydebian "/bin/sh -c 'Servicio ..." Hace 11 segundos hasta 5 segundos 0.0.0.0: 8000-> 80/tcp mydebian_container2
Copiar Esta vez comenzamos el contenedor usando el -d
cambiar porque queremos que se separe del terminal.
Comandos importantes de Dockerfile
El Dockerfile tiene otros comandos más allá DE
, CORRER
, y CMD
.
Dominio Envidia
se usa para establecer variables de entorno en la imagen, como http_proxy
, Por ejemplo. Muchas imágenes usan variables de entorno para pasar parámetros al nuevo contenedor. Para ejemplos, consulte las imágenes de bases de datos como MySQL y PostgreSQL en Docker Hub.
Dominio COPIAR
Copia archivos y directorios del host a la imagen a la hora de compilación. La ruta fuente (primer argumento) es relativa al directorio actual.
Dominio AGREGAR
es parecido a COPIAR
, Con la diferencia de que, si la fuente es un archivo de alquitrán comprimido, se descomprimirá automáticamente en el directorio de destino dentro de la imagen. Excepto por ese uso, Docker recomienda el uso de COPIAR
comando siempre que sea posible.
Dominio EXPONER
indica qué puertos de la imagen pueden ser expuestos por Docker. Durante la creación de contenedores, esos puertos se pueden asignar a puertos de host, si lo desea.
Dominio Huella de trabajo
Establece el directorio que Docker usará cuando los comandos se ejecutan dentro del contenedor con Docker Exec
.
Creación de una imagen con https habilitado
Ahora ampliaremos la imagen oficial de PHP Apache para activar SSL con un certificado generado automático para exemplyfy cómo usar los comandos mencionados. En un nuevo directorio, cree el siguiente DockerFile.
Desde PHP: 7 -apache Ejecutar OpenSSL Req -x509 -nodes -days 365 -Newkey RSA: 2048 -Keyout/etc/ssl/private/ssl -cert -snakeOil.Key -Out/Etc/SSL/Certs/SSL-Cert-SnakeOil.PEM -SubJ "/C = BR/ST = Rio Grande do Sul/L = Porto Alegre/O = Security/OU = Desarrollo/CN = Ejemplo.com "Ejecutar A2enMod Rewrite Ejecutar A2ensite Default-SSL Ejecutar A2enMod SSL Expose 443 Copy ./html/var/www/html workdir/var/www/html
Copiar En la línea 3 creamos un certificado. Líneas 5 - 7 Habilitar mod_rewrite y SSL. La línea 9 Expone el puerto 443 (el puerto 80 ya está expuesto por la imagen aguas arriba). La línea 11 agrega el directorio de aplicación al contenedor. Finalmente, la línea 13 establece el directorio de trabajo como el directorio de trabajo Apache. Todos los comandos ejecutados por Docker Exec
usará este directorio como base por defecto.
Ahora, cree un directorio llamado html
y un archivo llamado phpinfo.php
con este contenido.
Copiar Ahora construamos y ejecutemos el contenedor.
Docker Build -T App_image . Docker Run -d - -RM -P 80:80 -P 443: 443 - -Name App_Container App_image
Copiar Ahora puedes acceder phpinfo.php
Script a través de ambos, http y https.
http: // localhost/phpinfo.php https: // localhost/phpinfo.php
Copiar HTTPS está habilitado. En https, el navegador se quejará de la seguridad del certificado ya que esto es autofirmado, pero la advertencia puede ignorarse.
Publicar imágenes en el Docker Hub
Las imágenes creadas existen solo localmente, en el caché local de Docker. Es posible que desee compartirlos con otros anfitriones de Docker, o con compañeros de equipo, o incluso hacerlos públicos al mundo. En cualquier caso, desea publicar sus imágenes en un registro de Docker. Se pueden publicar en un registro basado en la nube, como el Docker Hub, que, por cierto, es el valor predeterminado si no especifica explícitamente el registro. Primero cree una ID de Docker gratuita, luego inicie sesión:
$ Docker Iniciar sesión Iniciar sesión con su ID de Docker para empujar y extraer imágenes de Docker Hub. Si no tiene una ID de Docker, diríjase a https: // Hub.estibador.com para crear uno. Nombre de usuario: Contraseña de Infroger: Iniciar sesión
Copiar A continuación, etiquete la imagen con el nombre del repositorio (infroger), el nombre de la imagen y la etiqueta (versión de la imagen).
$ Docker etiqueta app_image infroger/app_image: 1 $ Docker Images Repositorio etiqueta ID de imagen Tamaño creado Infroger/APP_IMAGE 1 C093151FC68F Hace 14 horas 381MB App3_image Último C09315151FC68F 14 horas hace 381MB
Copiar Luego presione la imagen al repositorio.
$ Docker Push Infroger/App_image: 1 El empuje se refiere al repositorio [Docker.io/infroger/app_image] 27f7f2b01c49: Pushed 81b08cd5fe07: Pushed d1c23d198f84: Pushed e66392ad9b85: Pushed a71f63e3a00f: Pushed 9c58778f21dd: Pushed 973719bed9b7: Pushed 8f5090ef2ac0: Pushed fbdafdbe3319: Pushed a5c4801ecf39: Pushed e9ba112d38b9: Pushed 25ba5230dadf: Pushed f2907ce42b47: Pushed e31bf34cfab9: Pushed 9066d03e98e0: Presionado 96db4ce698ad: presionado ABAE6A338E5C: PUSADO 4572A80A7A5E: PUSHADO EF68F6734AA4: PUSADO 1: DIGEST: SHA256: 2E7E53FCDF800AD0C4837CD70014170CC869D36D36DE5
Copiar Ahora ve a Docker Hub y verifique que la imagen esté ahí:
https: // centro.estibador.com/r/infroger/app_image
En Docker Hub con registro gratuito, puede tener un repositorio privado, con repositorios públicos ilimitados. De lo contrario, es posible que desee ejecutar su propio registro de Docker, que se puede hacer con un comando:
Docker Run -D -P 5000: 5000 - -Restart = Always -Nombre Registro Registro: 2
La ventaja de tener un registro privado es la privacidad. Pero tiene la carga de gestionar la seguridad, la alta disponibilidad, los requisitos de almacenamiento, el control de acceso, etc.
Conclusión
En este artículo, hemos cubierto cómo extender las imágenes existentes y personalizarlas a sus necesidades utilizando un DockerFile. También hemos visto cómo publicar las imágenes en un registro de Docker. Puedes hacer mucho hasta ahora, pero estamos rascando el mundo de Docker. En el siguiente artículo, veremos una forma muy simple de orquestación de contenedores locales con Docker Compose.
Más en esta serie de artículos de Docker
- Una introducción práctica a los contenedores de Docker
- Cómo interactuar con los contenedores Docker
Tutoriales de Linux relacionados:
- Cosas para instalar en Ubuntu 20.04
- Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
- Una introducción a la automatización, herramientas y técnicas de Linux
- Cosas que hacer después de instalar Ubuntu 22.04 Jellyfish de Jammy ..
- Archivos de configuración de Linux: los 30 principales más importantes
- Cosas para instalar en Ubuntu 22.04
- Mint 20: Mejor que Ubuntu y Microsoft Windows?
- Cómo montar la imagen ISO en Linux
- Cómo arrancar dual Kali Linux y Windows 10
- Ubuntu 20.04 Guía
- « Cómo instalar el servidor VNC en Rhel 8 / Centos 8
- Cómo instalar Apache Tomcat en Linux RHEL 8 / Centos 8 »