# Preguntas frecuentes sobre Docker Desktop para Mac


### ¿Qué es HyperKit?

HyperKit es un hipervisor construido sobre Hypervisor.framework en macOS. Se ejecuta completamente en el espacio de usuario y no tiene otras dependencias.

Docker utiliza HyperKit para eliminar la necesidad de otros productos de VM, como Oracle VirtualBox o VMware Fusion.

### ¿Cuál es la ventaja de HyperKit?

HyperKit es más ligero que VirtualBox y VMware Fusion, y la versión incluida está personalizada para las cargas de trabajo de Docker en Mac.

### ¿Dónde almacena Docker Desktop los contenedores e imágenes de Linux?

Docker Desktop almacena los contenedores e imágenes de Linux en un único archivo de "imagen de disco" grande en el sistema de archivos de Mac. Esto es diferente de Docker en Linux, que generalmente almacena contenedores e imágenes en el directorio `/var/lib/docker`.

#### ¿Dónde está el archivo de imagen de disco?

Para localizar el archivo de imagen de disco, selecciona **Settings** desde el panel de Docker Desktop y luego **Advanced** en la pestaña **Resources**.

La pestaña **Advanced** muestra la ubicación de la imagen de disco. También muestra el tamaño máximo de la imagen de disco y el espacio real que está consumiendo la imagen de disco. Ten en cuenta que otras herramientas podrían mostrar el uso de espacio del archivo en función del tamaño máximo del archivo, y no del tamaño real del archivo.

#### ¿Qué pasa si el archivo es demasiado grande?

Si el archivo de imagen de disco es demasiado grande, puedes:

- Moverlo a una unidad de almacenamiento más grande
- Eliminar contenedores e imágenes innecesarios
- Reducir el tamaño máximo permitido del archivo

##### ¿Cómo muevo el archivo a una unidad de almacenamiento más grande?

Para mover el archivo de imagen de disco a una ubicación diferente:

1. Selecciona **Settings** y luego **Advanced** en la pestaña **Resources**.

2. En la sección **Disk image location**, selecciona **Browse** y elige una nueva ubicación para la imagen de disco.

3. Selecciona **Apply** para que los cambios surtan efecto.

> [!IMPORTANT]
>
> No muevas el archivo directamente en Finder, ya que esto puede hacer que Docker Desktop pierda el rastro del archivo.

##### ¿Cómo elimino contenedores e imágenes innecesarios?

Comprueba si tienes contenedores e imágenes innecesarios. Si tu cliente y la API del demonio ejecutan la versión 1.25 o posterior (usa el comando `docker version` en el cliente para verificar las versiones de tu cliente y de la API del demonio), puedes ver la información detallada del uso de espacio ejecutando:

```console
$ docker system df -v
```

Alternativamente, para listar las imágenes, ejecuta:

```console
$ docker image ls
```

Para listar los contenedores, ejecuta:

```console
$ docker container ls -a
```

Si hay muchos objetos redundantes, ejecuta el comando:

```console
$ docker system prune
```

Este comando elimina todos los contenedores detenidos, las redes no utilizadas, las imágenes huérfanas y la caché de construcción.

Puede tomar unos minutos recuperar el espacio en el host dependiendo del formato del archivo de imagen de disco. Si el archivo se llama:

- `Docker.raw`, el espacio en el host se recupera en unos pocos segundos.
- `Docker.qcow2`, el espacio se liberará mediante un proceso en segundo plano después de unos minutos.

El espacio solo se libera cuando se eliminan las imágenes. El espacio no se libera automáticamente cuando se eliminan archivos dentro de contenedores en ejecución. Para iniciar una recuperación de espacio en cualquier momento, ejecuta el comando:

```console
$ docker run --privileged --pid=host docker/desktop-reclaim-space
```

Ten en cuenta que muchas herramientas informan del tamaño máximo del archivo, no del tamaño real.
Para consultar el tamaño real del archivo en el host desde una terminal, ejecuta:

```console
$ cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
$ ls -klsh Docker.raw
2333548 -rw-r--r--@ 1 username  staff    64G Dec 13 17:42 Docker.raw
```

En este ejemplo, el tamaño real del disco es `2333548` KB, mientras que el tamaño máximo del disco es `64` GB.

##### ¿Cómo reduzco el tamaño máximo del archivo?

Para reducir el tamaño máximo del archivo de imagen de disco:

1. Selecciona **Settings** y luego **Advanced** en la pestaña **Resources**.

2. La sección **Disk image size** contiene un control deslizante que te permite cambiar el tamaño máximo de la imagen de disco. Ajusta el control deslizante para establecer un límite inferior.

3. Selecciona **Apply**.

Cuando reduces el tamaño máximo, el archivo de imagen de disco actual se elimina y, por lo tanto, se pierden todos los contenedores e imágenes.

### ¿Cómo añado certificados TLS?

Puedes añadir Autoridades de Certificación (CA) de confianza (utilizadas para verificar los certificados del servidor de registro) y certificados de cliente (utilizados para autenticarse en los registros) a tu demonio de Docker.

#### Añadir certificados CA personalizados (lado del servidor)

Se admiten todas las CA de confianza (raíz o intermedias). Docker Desktop crea un paquete de certificados de todas las CA de confianza del usuario según el llavero (Keychain) de Mac y lo añade a los certificados de confianza de Moby. Por lo tanto, si un certificado SSL corporativo es de confianza para el usuario en el host, también lo será para Docker Desktop.

Para añadir manualmente un certificado personalizado autofirmado, comienza agregando el certificado al llavero de macOS, que luego será detectado por Docker Desktop. Aquí tienes un ejemplo:

```console
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
```

O, si prefieres añadir el certificado solo a tu propio llavero local (en lugar de para todos los usuarios), ejecuta este comando en su lugar:

```console
$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt
```

Consulta también [Estructuras de directorios para certificados](#estructuras-de-directorios-para-certificados).

> [!NOTE]
>
> Debes reiniciar Docker Desktop después de realizar cualquier cambio en el llavero o en el directorio `~/.docker/certs.d` para que los cambios surtan efecto.

Para obtener una explicación completa de cómo hacer esto, consulta la publicación del blog [Adding Self-signed Registry Certs to Docker & Docker Desktop for Mac](https://blog.container-solutions.com/adding-self-signed-registry-certs-docker-mac).

#### Añadir certificados de cliente

Puedes colocar tus certificados de cliente en `~/.docker/certs.d/<MyRegistry>:<Port>/client.cert` y `~/.docker/certs.d/<MyRegistry>:<Port>/client.key`.

Cuando se inicia la aplicación Docker Desktop, copia la carpeta `~/.docker/certs.d` de tu Mac al directorio `/etc/docker/certs.d` en Moby (la máquina virtual `xhyve` de Docker Desktop).

> [!NOTE]
>
> * Debes reiniciar Docker Desktop después de realizar cualquier cambio en el llavero o en el directorio `~/.docker/certs.d` para que los cambios surtan efecto.
>
> * El registro no puede estar listado como un _registro inseguro_ (insecure registry). Docker Desktop ignora los certificados listados bajo registros inseguros y no envía certificados de cliente. Los comandos como `docker run` que intentan descargar desde el registro producirán mensajes de error tanto en la línea de comandos como en el registro.

#### Estructuras de directorios para certificados

Si tienes esta estructura de directorios, no necesitas añadir manualmente el certificado CA a tu inicio de sesión del sistema Mac OS:

```text
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
   ├── ca.crt
   ├── client.cert
   └── client.key
```

El siguiente ejemplo ilustra y explica con más detalle una configuración con certificados personalizados:

```text
/etc/docker/certs.d/        <-- Directorio de certificados
└── localhost:5000          <-- NombreDeHost:puerto
   ├── client.cert          <-- Certificado de cliente
   ├── client.key           <-- Clave del cliente
   └── ca.crt               <-- Autoridad de certificación que firmó
                                el certificado del registro
```

También puedes tener esta estructura de directorios, siempre y cuando el certificado CA también esté en tu llavero.

```text
/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
    ├── client.cert
    └── client.key
```

Para obtener más información sobre cómo instalar un certificado raíz CA para el registro y cómo configurar el certificado TLS del cliente para la verificación, consulta [Verify repository client with certificates](/engine/security/certificates/) en los temas de Docker Engine.

