Como ya lo hemos mencionado, las imágenes de los contenedores las podemos encontrar en el repositorio Docker Hub. Sin embargo; en ocasiones querremos usar nuestras propias aplicaciones o simplemente adaptarlo a nuestras necesidades.

Para hacer eso requerimos crear un Dockerfile, el siguiente archivo nos ayudara a crear un contenedor que ejecutara un archivo bash.

FROM ubuntu

LABEL maintainer="Tusysadmin.net"

USER root

COPY ./primer_archivo.bash /

RUN apt -y update
RUN apt -y install curl bash
RUN chmod 755 /primer_archivo.bash

USER nobody

ENTRYPOINT [ "/primer_archivo.bash" ]

La palabra FROM es para indicar que imagen utilizaremos, sino esta descargada la descargara del repositorio. LABEL, es solo la «etiqueta» que usamos como descripción; USER, es el usuario que ejecutará los comandos que le siguen. COPY y RUN serán las comandos que correrá nuestro usuario root.

El archivo primer_archivo.bash sera copiado al contenedor, al encontrarse en la misma ruta de Dockerfile no es necesario especificar una ruta diferente. RUN, actualiza el contenedor, instala curl y bash y otorga permisos al archivo copiado, es importante usar el gestor de paquetes correspondiente de la imagen sino mostrará error.

Construyamos la imagen.

[tusysadmin@local contenedores]$ ls
Dockerfile  primer_archivo.bash

[tusysadmin@local contenedores]$ docker build -t primer_imagen .
[+] Building 0.5s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                      0.0s
 => => transferring dockerfile: 334B                                                                                                      0.0s
 => [internal] load .dockerignore                                                                                                         0.0s
 => => transferring context: 2B                                                                                                           0.0s
 => [internal] load metadata for docker.io/library/ubuntu:latest                                                                          0.4s
 => [internal] load build context                                                                                                         0.0s
 => => transferring context: 99B                                                                                                          0.0s
 => [1/5] FROM docker.io/library/ubuntu@sha256:ec050c32e4a6085b423d36ecd025c0d3ff00c38ab93a3d71a460ff1c44fa6d77                           0.0s
 => => resolve docker.io/library/ubuntu@sha256:ec050c32e4a6085b423d36ecd025c0d3ff00c38ab93a3d71a460ff1c44fa6d77                           0.0s
 => CACHED [2/5] COPY ./primer_archivo.bash /                                                                                             0.0s
 => CACHED [3/5] RUN apt -y update                                                                                                        0.0s
 => CACHED [4/5] RUN apt -y install curl bash                                                                                             0.0s
 => CACHED [5/5] RUN chmod 755 /primer_archivo.bash                                                                                       0.0s
 => exporting to image                                                                                                                    0.0s
 => => exporting layers                                                                                                                   0.0s
 => => writing image sha256:ea88c13fe6d7ac18e8032717deaaf4ed18f049c4b887dcf21312c14874018151                                              0.0s
 => => naming to docker.io/library/primer_imagen

Esta es la forma mas simple de construir una imagen. Si tuvieramos un archivo con un nombre diferente a Dockerfile tendriamos que usar la opción -f seguida del nombre del archivo. Usamos un punto al final para especificar que usaremos el repositorio local.

[tusysadmin@local contenedores]$ docker images
REPOSITORY      TAG       IMAGE ID       CREATED             SIZE
primer_imagen   latest    ea88c13fe6d7   About an hour ago   116MB

[tusysadmin@local contenedores]$ docker run primer_imagen
Este es tu primer contenedor construido con Dockerfile
[tusysadmin@local contenedores]$

Como puede observarse la imagen ha sido creada y cuando se ejecuta hace lo único para lo cual ha sido construida, es decir ejecutar nuestro primer_archivo.bash.