Construir las imágenes de servicio
En el paso anterior, definiste tus servicios utilizando imágenes Docker existentes en el archivo docker-compose.yaml
. En este paso, aprenderás cómo construir imágenes Docker personalizadas para tus servicios usando Dockerfiles y luego integrarlas en tu archivo docker-compose.yaml
.
Primero, creemos un directorio simple para nuestro servicio web y un Dockerfile dentro de él. Navega al directorio del proyecto si no estás ya allí:
cd ~/project
Crea un directorio llamado web
y accede a él:
mkdir web
cd web
Ahora, crea un Dockerfile llamado Dockerfile
dentro del directorio web
usando el editor nano
:
nano Dockerfile
Pega el siguiente contenido en el Dockerfile
:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y nginx
COPY index.html /var/www/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Este Dockerfile realiza lo siguiente:
FROM ubuntu:latest
: Parte de la imagen base más reciente de Ubuntu.
RUN apt-get update && apt-get install -y nginx
: Actualiza la lista de paquetes e instala Nginx.
COPY index.html /var/www/html/
: Copia un archivo index.html
(que crearemos a continuación) en el directorio raíz web de Nginx.
EXPOSE 80
: Expone el puerto 80 en el contenedor.
CMD ["nginx", "-g", "daemon off;"]
: Especifica el comando a ejecutar cuando el contenedor inicia, que es iniciar Nginx en primer plano.
Guarda el Dockerfile presionando Ctrl + X
, luego Y
, y Enter
.
Ahora, creemos el archivo index.html
que copia el Dockerfile. Permanece en el directorio ~/project/web
y crea el archivo:
nano index.html
Pega el siguiente contenido HTML simple en index.html
:
<!doctype html>
<html>
<head>
<title>Hello from Docker!</title>
</head>
<body>
<h1>Welcome to my Dockerized Nginx!</h1>
<p>This page is served from a custom Docker image.</p>
</body>
</html>
Guarda el archivo index.html
presionando Ctrl + X
, luego Y
, y Enter
.
Ahora, regresa al directorio raíz del proyecto donde se encuentra tu archivo docker-compose.yaml
:
cd ~/project
Necesitamos modificar el archivo docker-compose.yaml
para construir el servicio web
desde el Dockerfile que acabamos de crear, en lugar de usar una imagen preconstruida. Abre el archivo docker-compose.yaml
para editarlo:
nano docker-compose.yaml
Modifica la definición del servicio web
para usar la instrucción build
en lugar de image
:
version: "3.8"
services:
web:
build: ./web
ports:
- "80:80"
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: mysecretpassword
Aquí, build: ./web
le indica a Docker Compose que construya la imagen para el servicio web
usando el Dockerfile ubicado en el directorio ./web
relativo al archivo docker-compose.yaml
.
Guarda el archivo docker-compose.yaml
modificado presionando Ctrl + X
, luego Y
, y Enter
.
Ahora, puedes construir las imágenes definidas en tu archivo docker-compose.yaml
usando el comando docker-compose build
. Como Docker Compose no viene preinstalado, primero debes instalarlo.
sudo apt-get update
sudo apt-get install docker-compose-plugin -y
Después de instalar el plugin de Docker Compose, puedes usar el comando docker compose
(nota el espacio en lugar del guion en versiones más nuevas).
docker compose build
Este comando leerá tu archivo docker-compose.yaml
y construirá la imagen para el servicio web
basada en el Dockerfile
en el directorio ./web
. También descargará la imagen postgres:latest
para el servicio db
si no está presente. Verás una salida que indica el proceso de construcción para la imagen web
.
Una vez completada la construcción, puedes listar las imágenes Docker en tu sistema para ver la imagen recién construida.
docker images
Deberías ver una imagen con un nombre relacionado a tu directorio de proyecto y el nombre del servicio (ej. project-web
) y la imagen postgres
.