Docker build


En este post vamos a aprender a utilizar el docker build, dónde vamos a crear un simple archivo dockerfile el cual utilizaremos para compilar y entender el funcionamiento del build

oscar Escrito por oscar 01 November 2021 2313 0

Acerca del proyecto

En este post vamos a aprender a utilizar el docker build, dónde vamos a crear un simple archivo dockerfile el cual utilizaremos para compilar y entender el funcionamiento del build.

Adicionalmente haremos algunos ejercicios y prácticas de prueba dónde asignaremos nombres y algunos otros datos que serán de utilidad para la nueva imagen.

Conocimiento previo

Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.

Proyecto Descripción
Introducción docker Iniciamos con docker, donde conoceremos los temas que vamos a trabajar en este curso, aprenderemos a usar este gestor de contenedores con todas sus funcionalidades, ademas realizaremos ejercicios prácticos para reforzar el conocimiento aprendido.
¿Qué es docker? ¿Qué es docker?, es una plataforma que permite crear e implementar aplicaciones rápidamente. En este post aprenderás a detalle la definición, sus características y la diferencia con las tecnologías de aplicaciones tradicionales.
¿Qué es un contenedor? ¿Qué es un contenedor de docker?, lo podemos definir como una forma de limitar los recursos para una aplicación, donde solo va a contener sus librerías, configuraciones, entre otros. En este post explicamos a detalle los contenedores.
¿Qué es una imagen en docker? ¿Qué es una imagen en docker?, es un archivo compuesto por múltiples capas, que se utiliza para ejecutar código en un contenedor de docker. En este post aprenderás la definición y como usar las imagenes para crear contenedores.
Docker hub, hacer pull y push de imagenes Para descargar una imagen oficial de docker, podemos usar el repositorio público, este repositorio es docker hub. Adicionalmente usaremos los comandos pull y push para poder gestionar las imágenes de docker.
dockerfile En este post vamos a aprender la definición y el concepto de un dockerfile, donde veremos cuáles son las instrucciones necesarias y básicas que necesitamos para poder construir una imagen a partir de este archivo y trabajaremos un poco con la instrucción docker build, para poder compilar el dockerfile y generar una imagen. .

Imagenes y contenedores

Los contenedores son instancias de las imágenes de docker, su principal diferencia son: los contenedores tiene una capa de escritura, cuando se crea un contenedor lo que se hace es crea una capa de escritura encima de las otras capas, a excepción de las imágenes que solo son de lectura y usadas para crear dichos contenedores.

Ahora para crear contenedores podemos usar imágenes de terceros o crear nuestras propias imagenes, vamos a explicar una de las herramientas o funciones que tiene docker para crear nuestras propias imágenes a partir de una imagen existente.

C:\code\ejemplo-build>dir
El volumen de la unidad C no tiene etiqueta.
El número de serie del volumen es: 6AA0-4F86

Directorio de C:\code\ejemplo-build

16/10/2021  09:36 p. m.    <DIR>          .
16/10/2021  09:36 p. m.    <DIR>          ..
16/10/2021  09:35 p. m.                 0 dockerfile
               1 archivos              0 bytes
               2 dirs  141.250.289.664 bytes libres

Docker build

El comando docker build crea imágenes de Docker a partir de un Dockerfile y un "contexto". El contexto de una compilación es el conjunto de archivos ubicados en el PATH o especificando una URL. El proceso de construcción puede hacer referencia a cualquiera de los archivos del contexto. Por ejemplo, su compilación puede usar una instrucción COPY para hacer referencia a un archivo en el contexto.[1]

docker build .

Crear un docker file

Primero debes crear un dockerfile, esta creación se explica a detalle en el post de dockerfile, para este post nos vamos a guiar con el siguiente archivo, donde usamos la imagen de ubuntu y le instalamos el editor de texto vim.

primero vamos crear el siguiente directorio "ejemplo-build", dento de este creamos el dockerfile donde colocamos las siguientes líneas de código.

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install vim -y

Ahora vamos a buscar este directorio desde el cmd o consola para poder ejecutar el comando de build:

Compilar el dockerfile

Ahora vamos a realizar la compilación del archivo para ello usamos el siguiente comando:

docker build .

Esto genera la imagen, observemos las siguientes líneas de resultado.

C:\code\ejemplo-build>docker build .
[+] Building 10.7s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                             0.1s
 => => transferring dockerfile: 83B                                                              0.0s
 => [internal] load .dockerignore                                                                0.0s
 => => transferring context: 2B                                                                  0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                10.0s
 => CACHED [1/2] FROM docker.io/library/ubuntu:latest@sha256:626ffe58f6e7566e00254b638eb7e0f3b1  0.0s
 => ERROR [2/2] RUN apt-get install vim -y                                                       0.5s
------
 > [2/2] RUN apt-get install vim -y:
#5 0.427 Reading package lists...
#5 0.445 Building dependency tree...
#5 0.446 Reading state information...
#5 0.448 E: Unable to locate package vim
------
executor failed running [/bin/sh -c apt-get install vim -y]: exit code: 100

C:\code\ejemplo-build>docker build .
[+] Building 71.0s (7/7) FINISHED
 => [internal] load build definition from Dockerfile                                             0.0s
 => => transferring dockerfile: 104B                                                             0.0s
 => [internal] load .dockerignore                                                                0.0s
 => => transferring context: 2B                                                                  0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                 9.8s
 => CACHED [1/3] FROM docker.io/library/ubuntu:latest@sha256:626ffe58f6e7566e00254b638eb7e0f3b1  0.0s
 => [2/3] RUN apt-get update                                                                    45.3s
 => [3/3] RUN apt-get install vim -y                                                            14.2s
 => exporting to image                                                                           1.5s
 => => exporting layers                                                                          1.5s
 => => writing image sha256:d27ba53c0139322198c8410d9e2b39c8465f9533d39f311ad5e8804bfeba7919     0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

Observamos la nueva imagen que acabamos de crear, esta aun no tiene nombre definido, pero ya tiene el id de la imagen con la que podemos crear un contenedor.

C:\code\ejemplo-build>docker images
REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
<none>                       <none>    d27ba53c0139   4 minutes ago   172MB

Tag de la imagen

Creamos una imagen con build, pero esta nos quedo sin nombre o registro; el comando build perite asignarle estos datos con la etiqueta tag (-t) y la nomenclatura REPOSITORIO/IMAGEN:VERSION, veamos un ejemplo:

docker build -t codigoelectronica/ubuntu:1 .
=> [1/3] FROM docker.io/library/ubuntu:latest@sha256:626ffe58f6e7566e00254b638eb7e0f3b11d4da9675088f4781a50ae288
=> [2/3] RUN apt-get update                                                                                      38.5s
=> [3/3] RUN apt-get install vim -y                                                                              40.2s
=> exporting to image                                                                                             0.4s
=> => exporting layers                                                                                            0.4s
=> => writing image sha256:25a387ea283320411aefb331a0a2cbd8e02dba8553c02c4cefbdb727de06a865                       0.0s
=> => naming to docker.io/codigoelectronica/ubuntu:1

Al buscar las imagenes creadas en docker observamos el siguiente resultado:

C:\code\ejemplo-build>docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
codigoelectronica/ubuntu   1         25a387ea2833   37 seconds ago   172MB

Referencias

[1] docker build , Consultado Septiembre 2021


Comentario

Debe aceptar antes de enviar