Forzar compilación limpia de una imagen en Docker
- Crear una imagen en Docker
-
Use la opción
--no-cache
para forzar la construcción limpia de una imagen en Docker
El tutorial discutirá y demostrará cómo forzar una construcción limpia de una imagen en Docker.
Crear una imagen en Docker
Usaremos una aplicación Flask simple para demostrar este concepto. Usando el siguiente comando, cree una aplicación simple llamada app.py
dentro de la carpeta principal my-app
.
touch app.py
Instale Python3 si no ha usado el comando.
sudo apt update && sudo apt install python3-venv
También podemos instalar Flask y Gunicorn usando el comando.
pip install flask gunicorn
Proceda a crear un archivo docker usando el comando touch Dockerfile
. Para facilitarnos la creación de un archivo docker, creamos un archivo requirements.txt
.
Podemos crear un archivo requisitos.txt
ejecutando el comando pip freeze > requisitos.txt
. Una vez hecho esto, la estructura de su archivo debería ser similar a la siguiente.
Podemos proceder al archivo app.py
y crear nuestra aplicación. La aplicación contiene una función simple que imprime un mensaje de consola, como se muestra a continuación.
from flask import Flask
app = Flask(__name__)
def hello():
print("Hello, this is a simple Flask application")
hello()
Este es el resultado esperado cuando ejecutamos el código anterior.
Ahora completaremos nuestro Dockerfile con los comandos que Docker usará para crear una imagen. Estos comandos se ejecutarán cuando ejecutemos el contenedor docker.
Usaremos Python como nuestra imagen base en este caso. El Dockerfile debería verse así.
# 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 python3 app.py
Una vez que tengamos nuestro Dockerfile listo, podemos guardarlo y construir nuestra imagen localmente para probarla. Podemos usar el comando docker build
junto con la etiqueta -t
.
Luego, podemos probar la imagen usando el comando docker run
, como se muestra a continuación.
(myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker run -it myapp
Hello, this is a simple Flask application
Confirmaremos que hemos construido con éxito un nuevo contenedor usando el comando docker ps
.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd10c9a6a8a1 myapp "/bin/sh -c 'python3…" 11 minutes ago Exited (0) 10 minutes ago vigilant_brattain
Use la opción --no-cache
para forzar la construcción limpia de una imagen en Docker
Habiendo construido un contenedor usando esta imagen, supongamos que queremos construir una imagen nuevamente usando la misma imagen. En ese caso, el demonio docker utilizará la memoria caché existente de las capas de la imagen para construir la imagen.
Sin embargo, podemos forzar una creación de imagen limpia en Docker usando la opción --no-cache
. Esto anula el comportamiento predeterminado del demonio docker.
Así es como podemos implementar eso.
myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker build --no-cache -t myapp .
[+] Building 119.0s (10/10) FINISHED
=> [internal] load .dockerignore 1.6s
=> => transferring context: 2B 0.4s
=> [internal] load build definition from Dockerfile 2.1s
=> => transferring dockerfile: 38B 0.4s
=> [internal] load metadata for docker.io/library/python:latest 37.9s
=> [1/5] FROM docker.io/library/python@sha256:ee0b617025e112b6ad7a4c76758e4a02f1c429e1b6c44410d95b024304698ff2 0.1s
=> [internal] load build context 0.4s
=> => transferring context: 63B 0.0s
=> CACHED [2/5] WORKDIR /var/www/ 0.1s
=> [3/5] COPY ./app.py /var/www/app.py 1.3s
=> [4/5] COPY ./requirements.txt /var/www/requirements.txt 2.2s
=> [5/5] RUN pip install -r /var/www/requirements.txt 68.4s
=> exporting to image 4.8s
=> => exporting layers 3.8s
=> => writing image sha256:ee771b73a9ec468308375d139a35580f6c7f62988db9c0bb0b85794716406e92 0.1s
=> => naming to docker.io/library/myapp
Podemos crear un nuevo contenedor usando el comando docker run
.
(myapp) isaac@DESKTOP-HV44HT6:~/my-app$ docker run -it myapp
Hello, this is a simple Flask application
Como se ve a continuación, creamos con éxito un nuevo contenedor y forzamos a Docker a crear una imagen limpia usando la opción --no-cache
.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
826b8de2c92f myapp "/bin/sh -c 'python3…" 47 seconds ago Exited (0) 39 seconds ago kind_pike
dd10c9a6a8a1 ba84c5d3b157 "/bin/sh -c 'python3…" 28 minutes ago Exited (0) 28 minutes ago vigilant_brattain
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