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
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