Skip to content

Commit 0c0863c

Browse files
committed
Update Dockerfile to copy the contents of the "web" folder instead of "content"
1 parent 018fcb2 commit 0c0863c

2 files changed

Lines changed: 59 additions & 18 deletions

File tree

01-contenedores/contenedores-iv/README.md

Lines changed: 59 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
![Docker](imagenes/Cómo%20gestionar%20el%20almacenamiento%20en%20Docker.jpeg)
44

55

6-
En algún momento tus contenedores morirán y tendrás que volver a levantarlos. Si no has guardado los datos que tenían, perderás toda la información que tenían. Por eso es importante saber cómo gestionar el almacenamiento en Docker.
6+
En algún momento tus contenedores morirán 😥 y tendrás que volver a crearlos. Si no has guardado los datos que tenían, perderás toda la información que almacenaban o generaron. Por eso es importante saber cómo gestionar el almacenamiento en Docker.
77

88
Existen diferentes formas de almacenar datos en Docker. En este módulo vamos a ver las siguientes:
99

@@ -13,20 +13,32 @@ Existen diferentes formas de almacenar datos en Docker. En este módulo vamos a
1313

1414
## Bind mounts
1515

16-
Un bind mount es un enlace directo entre una carpeta en tu host y una carpeta en tu contenedor. Esto significa que si cambias algo en la carpeta del host, también cambiará en la carpeta del contenedor y viceversa.
16+
Un bind mount es un enlace directo entre una carpeta en tu máquina y una carpeta en tu contenedor. Esto significa que si cambias algo en la carpeta local, también cambiará en la carpeta del contenedor y viceversa.
1717

1818
Para crear un bind mount, utiliza la opción `--mount` o `-v` al crear un contenedor. Por ejemplo:
1919

2020
```bash
2121
cd 01-contenedores/contenedores-iv
22+
2223
docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/ -p 8080:80 nginx
2324
```
2425

25-
Si cambias el contenido de la carpeta `dev-folder` en tu host, también cambiará en la carpeta `/usr/share/nginx/html/` en tu contenedor.
26+
Si analizamos este comando tenemos:
27+
28+
- `docker run`: Crea y arranca un contenedor.
29+
- `-d`: Lo hace en segundo plano.
30+
- `--name devtest`: Le pone nombre al contenedor.
31+
- `--mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/`: Crea un bind mount. El tipo de montaje es bind, la carpeta de origen es la carpeta actual (`$(pwd)`) más `dev-folder` y la carpeta de destino es `/usr/share/nginx/html/`.
32+
33+
> [!NOTE]
34+
> Es comendable utilizar la opción `--mount` en lugar de `-v` o `--volume` porque es más explícito y fácil de leer.
35+
36+
37+
Si cambias el contenido de la carpeta `dev-folder` en tu máquina local, también cambiará en la carpeta `/usr/share/nginx/html/` en tu contenedor.
2638

2739
#### Usar el bind mount como read-only
2840

29-
Tambi´n puedes montar un bind mount como read-only. Esto significa que no podrás escribir en la carpeta del contenedor. Para hacerlo, añade la opción `readonly` al comando `--mount`. Por ejemplo:
41+
También puedes montar un bind mount como read-only. Esto significa que desde tu máquina podrás cambiar el contenido sin problemas pero desde dentro del contenedor no se podrá. Para hacerlo, añade la opción `readonly` al comando `--mount`. Por ejemplo:
3042

3143
```bash
3244
docker rm -f devtest
@@ -39,35 +51,64 @@ Como está en modo lectura, en teoría no podría crear ningún archivo dentro d
3951
```bash
4052
docker container exec -it devtest sh
4153
ls /usr/share/nginx/html
42-
touch /usr/share/nginx/html/index2.html #Dará error porque el montaje está en modo read-only
54+
touch /usr/share/nginx/html/index2.html
4355
exit
4456
```
4557

58+
El problema principal que tienen los montajes de tipo `bind` es que no son portables. Si tienes un contenedor en un host y quieres moverlo a otro, tendrás que mover también la carpeta que estás montando.
59+
4660
## Volúmenes
4761

48-
#Listar los volumenes en el host
49-
docker volume ls
62+
Los volúmenes son una forma de almacenar datos de forma persistente en Docker. Estos volúmenes se almacenan en una carpeta en el host y se pueden compartir entre varios contenedores. El path donde se almacenan los volúmenes en el host es `/var/lib/docker/volumes`y lo gestiona Docker.
5063

51-
#Crear un nuevo volumen con create
52-
docker volume create data
53-
docker volume ls
64+
### Crear un volumen
5465

55-
#Crear un contenedor que a su vez crea un volumen
56-
docker container run -dit --name my-container \
57-
--mount source=my-data,target=/vol \
58-
alpine
66+
Para crear un volumen, utiliza el comando `docker volume create` seguido del nombre del volumen. Por ejemplo:
5967

60-
#Se puede utilizar tanto --mount como -v (o --volume)). Originalmente --mount solo se usaba para el modo clúster. Sin embargo, desde la versión 17.06 (Vamos por la 10.03.13)
61-
# se puede utilizar para contenedores independientes.
68+
```bash
69+
docker volume create lemoncode-data
70+
```
6271

72+
Para comprobar cuántos volúmenes tienes en tu host puedes utilizar este comando:
6373

64-
#Puedes comprobar que el volumen se ha creado correctamente
74+
```bash
6575
docker volume ls
76+
```
77+
78+
Si quisieramos utilizar este volumen en un contenedor, podríamos hacerlo de la siguiente manera:
79+
80+
```bash
81+
docker run -d --name devtest2 --mount source=lemoncode-data,target=/usr/share/nginx/html/ -p 8081:80 nginx
82+
```
83+
84+
En este caso el volumen `lemoncode-data` se ha montado en la carpeta `/usr/share/nginx/html/` del contenedor `devtest2`.
85+
86+
### Crear un contenedor que a su vez crea un volumen
87+
88+
También es posible crear un contenedor que a su vez cree un volumen.
89+
90+
```bash
91+
docker run -d --name devtest3 -v web-data:/usr/share/nginx/html/ -p 8082:80 nginx
92+
```
93+
94+
En este caso, al ejecutarse el contenedor `devtest3` se creará un volumen llamado `web-data` que se montará en la carpeta `/usr/share/nginx/html/` del contenedor.
95+
96+
Estos volumenes de primeras no tienen datos. En el caso de los contenedores que utilizan la imagen `nginx` se creará un fichero `index.html` por defecto. Si queremos añadir datos a nuestro volumen, podemos hacerlo de la siguiente manera:
6697

67-
#Puedo asociar varios contenedores al mismo volumen a la vez
98+
```bash
99+
docker cp web-content/. devtest3:/usr/share/nginx/html/
100+
```
101+
102+
103+
### Asociar el volúmens a varios contenedores
104+
105+
Puedes asociar varios contenedores al mismo volumen a la vez
106+
107+
```bash
68108
docker container run -dit --name my-container2 \
69109
--mount source=my-data,target=/vol2 \
70110
alpine
111+
```
71112

72113
#Para comprobar a qué contenedores está asociado un volumen
73114
docker ps --filter volume=my-data --format "table {{.Names}}\t{{.Mounts}}"

01-contenedores/contenedores-iv/web-content/index.html

Whitespace-only changes.

0 commit comments

Comments
 (0)