You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 01-contenedores/contenedores-iv/README.md
+18-47Lines changed: 18 additions & 47 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,36 +20,35 @@ Para crear un bind mount, utiliza la opción `--mount` o `-v` al crear un conten
20
20
```bash
21
21
cd 01-contenedores/contenedores-iv
22
22
23
-
docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/ -p 8080:80 nginx
23
+
docker run -d --name halloween-web --mount type=bind,source="$(pwd)"/web-content,target=/usr/share/nginx/html/ -p 8080:80 nginx
24
24
```
25
25
26
26
Si analizamos este comando tenemos:
27
27
28
28
-`docker run`: Crea y arranca un contenedor.
29
29
-`-d`: Lo hace en segundo plano.
30
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/`.
31
+
-`--mount type=bind,source="$(pwd)"/web-content,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 `web-content` y la carpeta de destino es `/usr/share/nginx/html/`.
32
32
33
33
> [!NOTE]
34
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
35
36
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.
37
+
Si cambias el contenido de la carpeta `web-content` en tu máquina local, también cambiará en la carpeta `/usr/share/nginx/html/` en tu contenedor.
38
38
39
39
#### Usar el bind mount como read-only
40
40
41
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:
42
42
43
43
```bash
44
-
docker rm -f devtest
45
-
docker run -d --name devtest --mount type=bind,source="$(pwd)"/dev-folder,target=/usr/share/nginx/html/,readonly -p 8080:80 nginx
46
-
docker inspect devtest
44
+
docker run -d --name halloween-readonly --mount type=bind,source="$(pwd)"/web-content,target=/usr/share/nginx/html/,readonly -p 8080:80 nginx
45
+
docker inspect halloween-readonly
47
46
```
48
47
49
48
Como está en modo lectura, en teoría no podría crear ningún archivo dentro del directorio donde está montada mi carpeta local:
50
49
51
50
```bash
52
-
docker container exec -it devtest sh
51
+
docker container exec -it halloween-readonly sh
53
52
ls /usr/share/nginx/html
54
53
touch /usr/share/nginx/html/index2.html
55
54
exit
@@ -66,7 +65,7 @@ Los volúmenes son una forma de almacenar datos de forma persistente en Docker.
66
65
Para crear un volumen, utiliza el comando `docker volume create` seguido del nombre del volumen. Por ejemplo:
67
66
68
67
```bash
69
-
docker volume create lemoncode-data
68
+
docker volume create halloween-data
70
69
```
71
70
72
71
Para comprobar cuántos volúmenes tienes en tu host puedes utilizar este comando:
@@ -78,25 +77,25 @@ docker volume ls
78
77
Si quisieramos utilizar este volumen en un contenedor, podríamos hacerlo de la siguiente manera:
79
78
80
79
```bash
81
-
docker run -d --name devtest2 --mount source=lemoncode-data,target=/usr/share/nginx/html/ -p 8081:80 nginx
80
+
docker run -d --name halloween-volume --mount source=halloween-data,target=/usr/share/nginx/html/ -p 8081:80 nginx
82
81
```
83
82
84
-
En este caso el volumen `lemoncode-data` se ha montado en la carpeta `/usr/share/nginx/html/` del contenedor `devtest2`.
83
+
En este caso el volumen `halloween-data` se ha montado en la carpeta `/usr/share/nginx/html/` del contenedor `halloween-volume`.
85
84
86
85
### Crear un contenedor que a su vez crea un volumen
87
86
88
87
También es posible crear un contenedor que a su vez cree un volumen.
89
88
90
89
```bash
91
-
docker run -d --name devtest3 -v web-data:/usr/share/nginx/html/ -p 8082:80 nginx
90
+
docker run -d --name halloween-demo -v web-data:/usr/share/nginx/html/ -p 8082:80 nginx
92
91
```
93
92
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.
93
+
En este caso, al ejecutarse el contenedor `halloween-demo` se creará un volumen llamado `web-data` que se montará en la carpeta `/usr/share/nginx/html/` del contenedor.
95
94
96
95
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:
Al inspeccionar cualquiera de los volúmenes podemos ver cuál es la ruta donde se están almacenando:
122
119
123
120
```bash
124
-
docker volume inspect my-data
125
-
```
126
-
127
-
Ahora vamos a añadir algunos datos a nuestro volumen:
128
-
129
-
```bash
130
-
docker cp web-content/. my-container:/vol
131
-
```
132
-
133
-
Ahora voy a eliminar el contenedor:
134
-
135
-
```bash
136
-
docker rm my-container -f
137
-
```
138
-
139
-
Pero el volumen todavía existe
140
-
141
-
```bash
142
-
docker volume ls
143
-
```
144
-
145
-
Por lo que puedo crear un nuevo contenedor y volver a atachar el volumen que tenía con mis datos:
146
-
147
-
```bash
148
-
docker container run -dit --name another-container \
149
-
--mount source=my-data,target=/vol \
150
-
alpine
121
+
docker volume inspect halloween-data
151
122
```
152
123
153
124
### Eliminar un volumen específico
154
125
155
126
Para eliminar un volumen específico, utiliza el comando `docker volume rm` seguido del nombre del volumen. Por ejemplo:
156
127
157
128
```bash
158
-
docker volume rm data
129
+
docker volume rm halloween-data
159
130
```
160
131
161
132
No puedes eliminar un volumen si hay un contenedor que lo tiene atachado. Te dirá que está en uso.
162
133
163
134
```bash
164
-
docker volume rm my-data
135
+
docker volume rm halloween-data
165
136
```
166
137
167
138
### Eliminar todos los volumenes que no esté atachados a un contenedor
@@ -177,7 +148,7 @@ docker volume prune -f
177
148
La última forma de almacenar datos en Docker es utilizando un tmpfs mount. Un tmpfs mount es un sistema de archivos temporal que se almacena en la memoria RAM de tu host. Esto significa que si apagas tu máquina, perderás todos los datos que hayas almacenado en tu contenedor.
178
149
179
150
```bash
180
-
docker run -dit --name tmptest --mount type=tmpfs,destination=/usr/share/nginx/html/ nginx:latest
151
+
docker run -dit --name tmptest --mount type=tmpfs,destination=/usr/share/nginx/html/ nginx
0 commit comments