@@ -7,19 +7,28 @@ cd 01-contenedores/contenedores-vi
7
7
8
8
# 1. Creo la red donde ambos contenedores van poder comunicarse
9
9
docker network create wordpress-network
10
+
10
11
# 2. Creo la base de datos MySQL, conectada a la red anterior, con un volumen que guarde la información de /var/lib/mysql.
11
- docker run -it --name mysqldb --network wordpress-network --rm --mount source=mysql_data,target=/var/lib/mysql \
12
- -e MYSQL_ROOT_PASSWORD=somewordpress -e MYSQL_DATABASE=wpdb -e MYSQL_USER=wp_user -e MYSQL_PASSWORD=wp_pwd \
12
+ # Nota: Si estás en Windows cambia las \ por ` en el comando. Solo es para colocar el comando en varias lineas :-)
13
+ docker run -dit --name mysqldb \
14
+ --network wordpress-network \
15
+ --mount source=mysql_data,target=/var/lib/mysql \
16
+ -e MYSQL_ROOT_PASSWORD=somewordpress \
17
+ -e MYSQL_DATABASE=wpdb \
18
+ -e MYSQL_USER=wp_user \
19
+ -e MYSQL_PASSWORD=wp_pwd \
13
20
mysql:5.7
14
21
15
22
# 2.1 Esto habrá hecho que se genere un volumen nuevo llamado mysql_data
16
23
docker volume ls
17
24
18
25
# 3. Ahora que ya tenemos la base de datos, el siguiente paso sería generar el contenedor de Wordpress
19
26
# dentro de la misma red y apuntando al contenedor de MySQL
20
- docker run -it --name wordpress --network wordpress-network --rm \
27
+ docker run -dit --name wordpress \
28
+ --network wordpress-network \
21
29
-v wordpress_data:/var/www/html \
22
- -e WORDPRESS_DB_HOST=mysqldb:3306 -e WORDPRESS_DB_USER=wp_user -e WORDPRESS_DB_PASSWORD=wp_pwd -e WORDPRESS_DB_NAME=wpdb \
30
+ -e WORDPRESS_DB_HOST=mysqldb:3306 \
31
+ -e WORDPRESS_DB_USER=wp_user -e WORDPRESS_DB_PASSWORD=wp_pwd -e WORDPRESS_DB_NAME=wpdb \
23
32
-p 8000:80 wordpress:latest
24
33
25
34
# Este es el contenido en el volumen wordpress_data
@@ -35,20 +44,27 @@ docker volume rm mysql_data wordpress_data
35
44
# Lo mismo pero con Docker Compose
36
45
cat docker-compose.yml
37
46
38
- docker-compose up & # con el & al final te deja utilizar el terminal, además de ver la salida
47
+ # Levantar la aplicación con docker-compose
48
+ docker-compose up
39
49
40
- # Parar y eliminar
41
- docker-compose down
50
+ # Truco:
51
+ docker-compose up & # con el & al final te deja utilizar el terminal, además de ver la salida
42
52
43
53
# Ejecutar en segundo plano tu aplicación con Docker Compose
44
54
docker-compose up -d
45
55
56
+ # Parar la aplicación con docker-compose
57
+ docker-compose stop
58
+
59
+ # Parar y eliminar
60
+ docker-compose down
61
+
46
62
# Otro de los escenarios que te puedes encontrar es que quieras que cada vez que haces un compose up
47
63
# se genere la imagen de tu app
48
64
cd my-app
65
+
66
+ # Ejecutar y genera la imagen de tu aplicación
49
67
docker-compose up --build &
50
- docker-compose ps
51
- # docker-compose stop
52
68
53
69
# Con docker compose puedes ver todas las aplicaciones que se están ejecutando
54
70
docker-compose ps # Pero sólo se ven los contenedores del proyecto que está en la carpeta actual con el nombre actual.
@@ -59,24 +75,12 @@ docker ps -a
59
75
# Listar todos los proyectos que se están ejecutando
60
76
docker ps -a --filter " label=com.docker.compose.project" -q | xargs docker inspect --format=' {{index .Config.Labels "com.docker.compose.project"}}' | sort | uniq
61
77
62
-
63
78
# Añadir un nombre a la aplicación
64
79
docker-compose --project-name my_wordpress up -d
65
80
66
81
# Si quisieramos reiniciar la aplicación
67
82
docker-compose -p my_wordpress restart
68
83
69
- # Parar las aplicaciones sin eliminar los contenedores
70
- docker-compose -p my_wordpress stop
71
- docker-compose -p my_wordpress ps
72
-
73
- # Si quisiera parar y eliminar, todo a la vez
74
- docker-compose -p my_wordpress down
75
- docker-compose -p my_wordpress ps
76
-
77
- # Si solo quisiera eliminar una vez parada
78
- docker-compose -p my_wordpress rm
79
-
80
84
# Docker Swarm #
81
85
82
86
# Antes de trabajar con el orquestador Docker Swarm es necesario crear el cluster a través del siguiente comando:
@@ -91,131 +95,66 @@ https://docs.docker.com/machine/overview/
91
95
# Se trata de una herramienta que te permite instalar Docker Engine en host virtuales y administrarlos
92
96
# con el comando docker-machine.
93
97
# Puedes usarlo con Mac, Windows, en la red de tu empresa, con proveedores cloud, etc.
94
- # Cómo instalarlo en Mac
95
- base=https://github.com/docker/machine/releases/download/v0.16.0 && \
96
- curl -L $base /docker-machine-$( uname -s) -$( uname -m) > /usr/local/bin/docker-machine && \
97
- chmod +x /usr/local/bin/docker-machine
98
-
99
- # Windows (Git bash)
100
- base=https://github.com/docker/machine/releases/download/v0.16.0 &&
101
- mkdir -p " $HOME /bin" &&
102
- curl -L $base /docker-machine-Windows-x86_64.exe > " $HOME /bin/docker-machine.exe" &&
103
- chmod +x " $HOME /bin/docker-machine.exe"
104
-
105
- # Linux
106
- ssh gis@137.135.216.143
107
- wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
108
- wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
109
- sudo apt-get update
110
- sudo apt-get install virtualbox -y
111
-
112
- base=https://github.com/docker/machine/releases/download/v0.16.0 &&
113
- curl -L $base /docker-machine-$( uname -s) -$( uname -m) > /tmp/docker-machine &&
114
- sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
115
- chmod +x /usr/local/bin/docker-machine
116
-
98
+ # Cómo instalarlo: https://docs.docker.com/machine/install-machine/
117
99
118
100
# Comprueba que la instalación se ha hecho correctamente
119
101
docker-machine version
120
102
121
103
# Cómo crear una máquina con Docker Engine con docker-machine
122
- # Linux
123
- sudo docker-machine create master-0
124
- sudo docker-machine create master-0 --virtualbox-no-vtx-check
125
- vboxmanage list vms
126
- # Virtual Box
127
- docker-machine create --driver virtualbox master-0
128
- # Hyper-V
129
- docker-machine create --driver hyperv master-0
130
-
131
- # Crear un cluster con Docker Swarm y Docker Machine
132
- docker-machine create --driver virtualbox master-1
133
- docker-machine create --driver virtualbox master-2
134
- docker-machine create --driver virtualbox worker-0
135
- docker-machine create --driver virtualbox worker-1
104
+ docker-machine create master-0
105
+ docker-machine create master-1
106
+ docker-machine create master-2
107
+ docker-machine create worker-0
108
+ docker-machine create worker-1
136
109
137
110
# Ver el resumen de todas las máquinas creadas
138
111
docker-machine ls
139
112
140
113
# Si abres Virtual Box verás que efectivamente tienes creadas todas esas máquinas.
141
114
142
- # Listar las máquinas que están ejecutándose
143
- docker-machine ls
144
-
145
115
# Para conocer el estado de una máquina
146
116
docker-machine status master-0
147
117
148
- # Conectar tu Docker Client a master-0
118
+ # Para saber cómo conectar tu Docker Client a master-0
149
119
docker-machine env master-0 # Mac
150
120
docker-machine env --shell powershell master-0 # Windows
121
+
151
122
eval $( docker-machine env master-0) # Mac
123
+
152
124
# docker-machine url master-0
153
125
docker info # Comprueba que el nombre de la máquina sea el mismo que elegiste en la creación con docker-machine
154
- docker ps
155
- # Comprueba que las variables de entorno apuntan a la máquina creada
156
- env | grep DOCKER # Mac
157
- Get-ChildItem Env: | Where-Object { $_ .Name -Match " DOCKER" } # PowerShell
158
-
159
- # Ejecuta un contenedor en la máquina que tienes como contexto
160
- docker run busybox echo hello world
161
- docker ps -a
162
-
163
- # Ejecutar un Nginx
164
- docker run -d -p 8000:80 nginx
165
-
166
- # Recuperar la IP de uno de los nodos
167
- docker-machine ip master-0
168
-
169
- # Hacer una petición al servidor web
170
- curl $( docker-machine ip master-0) :8000
171
-
172
- # Parar una máquina
173
- docker-machine stop master-0
174
-
175
- # Iniciar una máquina
176
- docker-machine start master-0
177
-
178
- # Para hacer que el terminal vuelva a apuntar a Docker Desktop
179
- docker-machine env -u --shell poweshell # Windows
180
- docker-machine env -u # Mac
181
- eval $( docker-machine env -u)
182
- env | grep DOCKER # Mac
183
- Get-ChildItem Env: | Where-Object { $_ .Name -Match " DOCKER" } # PowerShell
184
-
185
- docker info # volverás a apuntar a Docker Desktop
186
126
187
127
# Ahora en el master-0 iniciamos el cluster con Docker Swarm
188
128
eval $( docker-machine env master-0)
189
- docker swarm init --advertise-addr 192.168.99.118
129
+ docker swarm init --advertise-addr $( docker-machine ip master-0)
130
+ # Ver los nodos de nuestro clúster
131
+ docker node ls
132
+ # Ver el comando para que otros masters se puedan unir
133
+ docker swarm join-token manager
134
+
190
135
191
136
# En master-1 y master-2 los unimos como master
192
- docker swarm join-token manager
193
137
eval $( docker-machine env master-1)
194
- docker swarm join --token SWMTKN-1-2fzf6vaz6lndlp99njo38dccdxzvnknj8o0p2472g82lc8q83m-cb4kkn43ogrxse9suup2c9b5k 192.168.99.118 :2377
138
+ docker swarm join --token SWMTKN-1-4y3gnmqsen5m00ot2csqh1tcqyiuuwhmkqhp44t3jnqyuihdd3-21msmt276l7gcdmapbc6lpq26 192.168.99.101 :2377
195
139
eval $( docker-machine env master-2)
196
- docker swarm join --token SWMTKN-1-2fzf6vaz6lndlp99njo38dccdxzvnknj8o0p2472g82lc8q83m-cb4kkn43ogrxse9suup2c9b5k 192.168.99.118:2377
140
+ docker swarm join --token SWMTKN-1-4y3gnmqsen5m00ot2csqh1tcqyiuuwhmkqhp44t3jnqyuihdd3-21msmt276l7gcdmapbc6lpq26 192.168.99.101:2377
141
+
197
142
# Chequeamos el estado actual del cluster
198
143
docker node ls
199
144
200
145
# Por ahora solo tenemos masters pero no curris, nos faltan los workers.
201
146
202
147
# En worker-0 y worker-1 los unimos como workers
203
148
eval $( docker-machine env worker-0)
204
- docker swarm join --token SWMTKN-1-2fzf6vaz6lndlp99njo38dccdxzvnknj8o0p2472g82lc8q83m-3zznmj72ed3yb84klclnid9qs 192.168.99.118 :2377
149
+ docker swarm join --token SWMTKN-1-4y3gnmqsen5m00ot2csqh1tcqyiuuwhmkqhp44t3jnqyuihdd3-d548jak66563ovgeg5wlg9czu 192.168.99.101 :2377
205
150
eval $( docker-machine env worker-1)
206
- docker swarm join --token SWMTKN-1-2fzf6vaz6lndlp99njo38dccdxzvnknj8o0p2472g82lc8q83m-3zznmj72ed3yb84klclnid9qs 192.168.99.118 :2377
151
+ docker swarm join --token SWMTKN-1-4y3gnmqsen5m00ot2csqh1tcqyiuuwhmkqhp44t3jnqyuihdd3-d548jak66563ovgeg5wlg9czu 192.168.99.101 :2377
207
152
208
153
# Necesitas estar en un master para lanzar el siguiente comando
209
154
eval $( docker-machine env master-1)
210
155
docker node ls
211
156
# El asterisco te dice desde dónde estás lanzando el comando.
212
157
213
- # En el master podemos lanzar este comando para inspeccionarse a si mismo
214
- docker node inspect self --pretty
215
-
216
- # o bien a otro nodo
217
- docker node inspect worker-0 --pretty
218
-
219
158
# Lo siguiente es desplegar una aplicación en este cluster
220
159
docker service create --name web-nginx \
221
160
-p 8080:8080 \
@@ -254,14 +193,14 @@ https://github.com/dockersamples/docker-swarm-visualizer
254
193
eval $( docker-machine env master-2)
255
194
256
195
docker service create \
257
- --name=viz \
258
- --publish=9090:8080/tcp \
196
+ --name=docker-swarm-visualizer \
197
+ --publish=9090:8080 \
259
198
--constraint=node.role==manager \
260
199
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
261
200
dockersamples/visualizer
262
201
263
202
docker service ls
264
- docker service ps viz
203
+ docker service ps docker-swarm-visualizer
265
204
266
205
# En mi ejemplo se ha desplegado en el master-0 pero puedo acceder desde cualquier nodo
267
206
docker-machine ip master-1 # (192.168.99.109:9090) #Esto es así porque a nivel de networking se configura por defecto el modo Ingress
@@ -286,25 +225,24 @@ curl $(docker-machine ip worker-1):8070 #no funciona
286
225
# probamos lo mismo con una de las máquinas que si que tiene una réplica
287
226
curl $( docker-machine ip worker-0) :8070 # funciona
288
227
289
- # Docker Machine loves Azure
290
- # https://docs.docker.com/machine/drivers/azure/
291
- export AZURE_SUBSCRIPTION_ID=e39a6423-dbba-44c8-aff0-3308926843fc
292
- export AZURE_LOCATION=" northeurope"
293
- export AZURE_RESOURCE_GROUP=" north-docker"
294
-
295
- docker-machine create --driver azure docker-on-azure
296
-
297
228
# Docker Stacks #
298
229
# Con Docker Stacks podemos utilizar archivos de la misma forma que hacíamos con Docker Compose pero en clústers.
299
230
cd 01-contenedores/contenedores-vi/stacks/stackdemo
300
231
eval $( docker-machine env master-2)
301
- docker-compose up -d # si utilizamos docker-compose no lo va a poner en modo clúster sino que va a poner todos los contendores en el nodo actual
302
- docker-compose ps
303
- curl $( docker-machine ip master-2) :8000
232
+ docker-compose up & # si utilizamos docker-compose no lo va a poner en modo clúster sino que va a poner todos los contendores en el nodo actual
233
+ docker-compose ps # vemos que está aquí
234
+ docker service ls # pero aquí no
235
+ curl $( docker-machine ip master-2) :32771
236
+
304
237
# Para que lo despliegue en formato cluster debemos utilizar el siguiente comando:
305
238
docker stack deploy -c docker-compose.yml stackdemo
306
239
# Para ver todos los servicios desplegados con Docker stack
307
240
docker stack ls
308
241
docker stack ps stackdemo
309
242
# Ahora si que podremos verlo como un servicio
310
243
docker stack services stackdemo
244
+
245
+ docker service ls
246
+
247
+ # Intentar acceder a la web
248
+ curl $( docker-machine ip master-2) :30001
0 commit comments