Saltar al contenido
Curso Docker y Laravel Sail desde cero
02/10 Dockerizar una aplicación PHP a mano Comandos básicos de Docker: docker pull, docker run, docker ps, docker exec y docker logs
Tu lectura Quedan 9 min
Lección 2 de 10 · Dockerizar una aplicación PHP a mano

Comandos básicos de Docker: docker pull, docker run, docker ps, docker exec y docker logs

9 min de lectura Docker Engine 29.8

Hola, bienvenido. Con 5 comandos de Docker puedes hacer casi todo lo que necesitas en tu día a día: docker pull descarga una imagen, docker run crea y arranca un contenedor a partir de ella, docker ps lista los contenedores, docker logs enseña lo que han escrito y docker exec ejecuta un comando dentro de uno que ya está en marcha. Con docker stop y docker rm los paras y los borras.

En esta lección vamos a usarlos con las imágenes del curso, PHP y Nginx, y vamos a ver con un ejemplo real qué pasa con lo que escribes dentro de un contenedor cuando lo borras, que es la base para entender por qué existen los volúmenes.

Imagen y contenedor

Empezamos por la diferencia entre las 2 piezas con las que vamos a trabajar:

Imagen Contenedor
Qué es Una plantilla de solo lectura con un sistema mínimo y un programa instalado Una imagen en marcha, con una capa propia donde puede escribir
Cómo se consigue Con docker pull o construyéndola con docker build Con docker run
Cuántos hay Una por cada versión que descargas Tantos como quieras de la misma imagen
Si la borras Vuelves a descargarla o a construirla Pierdes todo lo que se escribió dentro

Si vienes de la programación orientada a objetos, una imagen es como una clase y un contenedor es como un objeto: de la misma imagen de Nginx puedes arrancar 3 contenedores, cada uno con su configuración y sus archivos.

Vamos a descargar las 3 imágenes que vamos a usar en la primera sección del curso:

Terminal
docker pull php:8.5-fpm-alpine
docker pull nginx:1.30-alpine
docker pull mysql:8.4

Cada una se descarga por capas, y al final Docker te dice qué ha bajado. Esta es la salida de la de Nginx en octubre de 2026; los identificadores de las capas y el Digest cambian cada vez que se publica una versión nueva de la imagen:

Salida
1.30-alpine: Pulling from library/nginx b27cf3f7c39d: Pull complete e3320d02d578: Pull complete 3d85d110b167: Pull complete 22e5a8a110ec: Pull complete 6b4dfb2e8f8a: Pull complete 703c5424632f: Pull complete b335b7ac3a40: Pull complete ee0d72338cd2: Download complete 57e209258aa3: Download complete Digest: sha256:0985e772fb9f729e6fa0980da05fca5d9c468e870eed43071545afa9d2e27d94 Status: Downloaded newer image for nginx:1.30-alpine docker.io/library/nginx:1.30-alpine

¿Cómo se lee un nombre como php:8.5-fpm-alpine? Antes de los 2 puntos va el repositorio, php, la imagen oficial de PHP en Docker Hub. Después va el tag, que en las imágenes oficiales suele juntar 3 cosas: la versión (8.5), la variante (fpm, que es PHP-FPM, frente a cli, que es PHP para la terminal) y el sistema base (alpine, una distribución de Linux muy pequeña). Con nginx:1.30-alpine y mysql:8.4 pasa lo mismo, y tienes todos los tags disponibles en la página de cada imagen en Docker Hub (se abre en una pestaña nueva).

¿Y por qué fijar la versión y no usar latest? Porque latest apunta a la última versión que publique el mantenedor de la imagen, sea cual sea. Si construyes tu proyecto con php:latest y meses después sale una versión mayor de PHP, el mismo Dockerfile te dará otra versión de PHP sin que hayas cambiado nada. Con 8.5 recibes las versiones de parche de la rama 8.5, pero el salto a la siguiente lo decides tú.

Para ver las imágenes que tienes descargadas:

Terminal
docker image ls
Salida
i Info → U In Use IMAGE ID DISK USAGE CONTENT SIZE EXTRA hello-world:latest 5e2309035332 25.9kB 9.49kB U mysql:8.4 6ea90827b110 1.12GB 255MB nginx:1.30-alpine 0985e772fb9f 93.6MB 27MB php:8.5-fpm-alpine fa01fb1645cd 150MB 39.1MB

La primera línea es la leyenda de la columna EXTRA, donde la U marca las imágenes que está usando algún contenedor. En este caso es la de hello-world, porque el contenedor de la lección anterior sigue ahí aunque ya terminó.

Lo que queda de esta lección
  1. 02Un contenedor que se ejecuta y desaparece
  2. 03Un contenedor en segundo plano
  3. 04Ver lo que pasa dentro: logs y exec
  4. 05Parar y borrar: lo que se pierde
Sigue leyendo gratis Este curso es gratuito. Déjanos tu email y te enviamos un enlace para leerlo entero, junto con el resto de cursos gratuitos.

¿Ya lo habías pedido o entras desde otro dispositivo? Escribe el mismo email: recuperas tu acceso y tu avance.