Ejecutar instancia de Docker desde Dockerfile

Isaac Tony 23 agosto 2022
Ejecutar instancia de Docker desde Dockerfile

Sin duda, los contenedores Docker se han convertido en la unidad estándar a la hora de gestionar software y dependencias en diferentes entornos. Cuando trabaje con aplicaciones reales, debe crear un archivo docker antes de crear la imagen del contenedor de su aplicación.

Un Dockerfile es simplemente un documento de texto de solo lectura con instrucciones establecidas al ensamblar una imagen de Docker. Por otro lado, una imagen de Docker es un conjunto de instrucciones, código de aplicación, dependencias, herramientas y bibliotecas que se utilizan para crear un contenedor de Docker.

Por lo tanto, un contenedor es una instancia ejecutable de la imagen de Docker ensamblada a partir de un Dockerfile.

Este artículo lo guiará a través de los pasos para crear un Dockerfile y ejecutar una instancia de Docker desde este archivo.

Pasos para ejecutar la instancia de Docker desde Dockerfile

Necesitamos seguir los pasos a continuación para ejecutar una instancia de Docker desde Dockerfile.

Crear un archivo Docker

Para crear un Dockerfile, debemos comprender sus componentes. Algunos de los comandos más comunes incluyen:

  • FROM: crea una capa de la imagen principal/base utilizada.
  • WORKDIR: nos permite configurar el directorio de trabajo.
  • COPY: nos permite copiar el contenido del directorio actual en un directorio del contenedor.
  • PULL: añade archivos desde tu repositorio Docker.
  • RUN: se ejecuta cuando queremos construir la imagen.
  • CMD: especifica qué comando ejecutar cuando se inicia el contenedor.
  • ENV: define las variables ambientales utilizadas durante la construcción.
  • ENTRYPOINT: determina qué comando ejecutar cuando se inicia el contenedor.
  • MANTENEDOR: especifica el autor de la imagen.

Para crear un Dockerfile, primero comenzaremos creando el directorio principal que albergará, entre otros archivos, el Dockerfile. Haremos una aplicación Flask simple que imprima un mensaje en la consola.

mkdir my-app

Ahora, nos movemos a este directorio y creamos el archivo principal de su aplicación como app.py. Este archivo contiene el código de aplicación del programa.

from flask import Flask

app = Flask(__name__)


def hello():

    print("Hello, this is a simple Flask application")


hello()

Ahora podemos proceder a crear nuestro Dockerfile y completarlo con los comandos necesarios para crear una imagen de Docker.

touch Dockerfile

También creamos un archivo requirements.txt que contiene el archivo necesario para instalar para ejecutar esta aplicación. Los requisitos se muestran a continuación.

click==8.0.4
Flask==2.0.3
gunicorn==20.1.0
itsdangerous==2.1.0
Jinja2==3.0.3
MarkupSafe==2.1.0
Werkzeug==2.0.3

Editaremos el Dockerfile y agregaremos los siguientes comandos para crear imágenes docker usando el comando docker build. En este caso, Python es la imagen base.

También configuramos el directorio de trabajo y copiamos los archivos necesarios del directorio actual al directorio en el contenedor de Docker.

#  base image
FROM python

# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
COPY ./requirements.txt /var/www/requirements.txt

# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
# Run the app
CMD ["echo", "Hello, Developer"]

Crear una imagen Docker

Procedemos a crear una imagen Docker usando el comando docker build. Sin embargo, tenemos que ejecutar este comando en el mismo directorio.

Sintaxis:

$ docker build [OPTIONS] PATH | URL | -

Dentro del directorio my-app, ejecutaremos el siguiente comando. La bandera -t nos permite etiquetar el nombre de la imagen e indicar que el Dockerfile está en el mismo directorio que estamos ejecutando este comando.

~/my-app$ docker build -t new_image .

Producción :

[+] Building 184.4s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                       1.5s
 => => transferring dockerfile: 38B                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                          1.9s
 => => transferring context: 2B                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/python:latest                                                                          50.8s
 => [1/5] FROM docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                           30.4s
 => => resolve docker.io/library/python@sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55                            0.4s
 => => sha256:3204faabc2f0b5e0939bdb8b29079a2a330c38dee92a22482a9ed449c5649a55 2.14kB / 2.14kB                                             0.0s
 => => sha256:17e2d81e5757980ee40742d77dd5d3e1a69ad0d6dacb13064e1b018a6664ec72 2.22kB / 2.22kB                                             0.0s
 => => sha256:178dcaa62b393b539abc8b866c39be81e8ade01786880dc5d17ce3fe02426dbb 8.55kB / 8.55kB                                             0.0s
 => => sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3 2.34MB / 2.34MB                                            10.4s
 => => extracting sha256:38121472aa0128f87b31fde5c07080418cc17b4a8ee224767b59e24c592ff7d3                                                 14.6s
 => [internal] load build context                                                                                                          1.1s
 => => transferring context: 195B                                                                                                          0.0s
 => [2/5] WORKDIR /var/www/                                                                                                                3.2s
 => [3/5] COPY ./app.py /var/www/app.py                                                                                                    1.9s
 => [4/5] COPY ./requirements.txt /var/www/requirements.txt                                                                                2.6s
 => [5/5] RUN pip install -r /var/www/requirements.txt                                                                                    82.3s
 => exporting to image                                                                                                                     8.1s
 => => exporting layers                                                                                                                    6.0s
 => => writing image sha256:5811f24b498ae784af32935318a5fddba536e2be27233b19bf08cad81438d114                                               0.2s
 => => naming to docker.io/library/new_image

Ahora podemos listar las imágenes de la ventana Docker usando el comando docker images que aparece a continuación.

~/my-app$ docker images

Producción :

REPOSITORY           TAG       IMAGE ID       CREATED         SIZE
new_image            latest    5811f24b498a   2 minutes ago   929MB

Ejecutar instancia desde Dockerfile

Para crear una instancia ejecutable a partir de esta imagen Docker, usaremos el comando docker run para crear una capa grabable sobre la imagen que creamos anteriormente.

Sintaxis:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Finalmente, ahora podemos crear una instancia ejecutable usando el comando anterior.

~/my-app$ docker run -it new_image
Hello, Developer
Autor: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn