# Contenedorizar una aplicación PHP


## Requisitos previos

- Has instalado la última versión de [Docker Desktop](/get-started/get-docker/).
- Tienes un [cliente de git](https://git-scm.com/downloads). Los ejemplos de esta sección utilizan un cliente de git basado en línea de comandos, pero puedes utilizar cualquier cliente.

## Descripción general

Esta sección te guía a través de la contenedorización y ejecución de una aplicación PHP.

## Obtener la aplicación de ejemplo

En esta guía, utilizarás una aplicación PHP preconstruida. La aplicación utiliza Composer para la gestión de dependencias de bibliotecas. Servirás la aplicación a través de un servidor web Apache.

Abre una terminal, cambia de directorio a un directorio en el que quieras trabajar y ejecuta el siguiente comando para clonar el repositorio.

```console
$ git clone https://github.com/docker/docker-php-sample
```

La aplicación de ejemplo es una aplicación básica de "hola mundo" y una aplicación que incrementa un contador en una base de datos. Además, la aplicación utiliza PHPUnit para las pruebas.

## Inicializar los recursos de Docker

Ahora que tienes una aplicación, puedes usar `docker init` para crear los recursos de Docker necesarios para contenedorizar tu aplicación. Dentro del directorio `docker-php-sample`, ejecuta el comando `docker init` en una terminal. `docker init` proporciona cierta configuración predeterminada, pero tendrás que responder algunas preguntas sobre tu aplicación. Por ejemplo, esta aplicación utiliza la versión 8.2 de PHP. Consulta el siguiente ejemplo de `docker init` y utiliza las mismas respuestas para tus indicaciones.

```console
$ docker init
Welcome to the Docker Init CLI!

This utility will walk you through creating the following files with sensible defaults for your project:
  - .dockerignore
  - Dockerfile
  - compose.yaml
  - README.Docker.md

Let's get started!

? What application platform does your project use? PHP with Apache
? What version of PHP do you want to use? 8.2
? What's the relative directory (with a leading .) for your app? ./src
? What local port do you want to use to access your server? 9000
```

Ahora deberías tener el siguiente contenido en tu directorio `docker-php-sample`.

```text
├── docker-php-sample/
│ ├── .git/
│ ├── src/
│ ├── tests/
│ ├── .dockerignore
│ ├── .gitignore
│ ├── compose.yaml
│ ├── composer.json
│ ├── composer.lock
│ ├── Dockerfile
│ ├── README.Docker.md
│ └── README.md
```

Para obtener más información sobre los archivos que agregó `docker init`, consulta lo siguiente:

- [Dockerfile](/reference/dockerfile/)
- [.dockerignore](/reference/dockerfile/#dockerignore-file)
- [compose.yaml](/reference/compose-file/)

## Ejecutar la aplicación

Dentro del directorio `docker-php-sample`, ejecuta el siguiente comando en una terminal.

```console
$ docker compose up --build
```

Abre un navegador y visita la aplicación en [http://localhost:9000/hello.php](http://localhost:9000/hello.php). Deberías ver una aplicación sencilla de "hola mundo".

En la terminal, presiona `ctrl`+`c` para detener la aplicación.

### Ejecutar la aplicación en segundo plano

Puedes ejecutar la aplicación desacoplada (detached) de la terminal agregando la opción `-d`. Dentro del directorio `docker-php-sample`, ejecuta el siguiente comando en una terminal.

```console
$ docker compose up --build -d
```

Abre un navegador y visita la aplicación en [http://localhost:9000/hello.php](http://localhost:9000/hello.php). Deberías ver una aplicación sencilla de "hola mundo".

En la terminal, ejecuta el siguiente comando para detener la aplicación.

```console
$ docker compose down
```

Para obtener más información sobre los comandos de Compose, consulta la [referencia de la CLI de Compose](/reference/cli/docker/compose/).

## Resumen

En esta sección, aprendiste cómo puedes contenedorizar y ejecutar una aplicación PHP sencilla usando Docker.

Información relacionada:

- [Referencia de docker init](/reference/cli/docker/init/)

## Pasos siguientes

En la siguiente sección, aprenderás cómo puedes desarrollar tu aplicación utilizando contenedores de Docker.

