@@ -7,19 +7,28 @@ cd 01-contenedores/contenedores-vi
77
88# 1. Creo la red donde ambos contenedores van poder comunicarse
99docker network create wordpress-network
10+
1011# 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 \
1320 mysql:5.7
1421
1522# 2.1 Esto habrá hecho que se genere un volumen nuevo llamado mysql_data
1623docker volume ls
1724
1825# 3. Ahora que ya tenemos la base de datos, el siguiente paso sería generar el contenedor de Wordpress
1926# 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 \
2129-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 \
2332-p 8000:80 wordpress:latest
2433
2534# Este es el contenido en el volumen wordpress_data
@@ -35,20 +44,27 @@ docker volume rm mysql_data wordpress_data
3544# Lo mismo pero con Docker Compose
3645cat docker-compose.yml
3746
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
3949
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
4252
4353# Ejecutar en segundo plano tu aplicación con Docker Compose
4454docker-compose up -d
4555
56+ # Parar la aplicación con docker-compose
57+ docker-compose stop
58+
59+ # Parar y eliminar
60+ docker-compose down
61+
4662# Otro de los escenarios que te puedes encontrar es que quieras que cada vez que haces un compose up
4763# se genere la imagen de tu app
4864cd my-app
65+
66+ # Ejecutar y genera la imagen de tu aplicación
4967docker-compose up --build &
50- docker-compose ps
51- # docker-compose stop
5268
5369# Con docker compose puedes ver todas las aplicaciones que se están ejecutando
5470docker-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
5975# Listar todos los proyectos que se están ejecutando
6076docker ps -a --filter " label=com.docker.compose.project" -q | xargs docker inspect --format=' {{index .Config.Labels "com.docker.compose.project"}}' | sort | uniq
6177
62-
6378# Añadir un nombre a la aplicación
6479docker-compose --project-name my_wordpress up -d
6580
6681# Si quisieramos reiniciar la aplicación
6782docker-compose -p my_wordpress restart
6883
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-
8084# Docker Swarm #
8185
8286# 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/
9195# Se trata de una herramienta que te permite instalar Docker Engine en host virtuales y administrarlos
9296# con el comando docker-machine.
9397# 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/
11799
118100# Comprueba que la instalación se ha hecho correctamente
119101docker-machine version
120102
121103# 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
136109
137110# Ver el resumen de todas las máquinas creadas
138111docker-machine ls
139112
140113# Si abres Virtual Box verás que efectivamente tienes creadas todas esas máquinas.
141114
142- # Listar las máquinas que están ejecutándose
143- docker-machine ls
144-
145115# Para conocer el estado de una máquina
146116docker-machine status master-0
147117
148- # Conectar tu Docker Client a master-0
118+ # Para saber cómo conectar tu Docker Client a master-0
149119docker-machine env master-0 # Mac
150120docker-machine env --shell powershell master-0 # Windows
121+
151122eval $( docker-machine env master-0) # Mac
123+
152124# docker-machine url master-0
153125docker 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
186126
187127# Ahora en el master-0 iniciamos el cluster con Docker Swarm
188128eval $( 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+
190135
191136# En master-1 y master-2 los unimos como master
192- docker swarm join-token manager
193137eval $( 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
195139eval $( 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+
197142# Chequeamos el estado actual del cluster
198143docker node ls
199144
200145# Por ahora solo tenemos masters pero no curris, nos faltan los workers.
201146
202147# En worker-0 y worker-1 los unimos como workers
203148eval $( 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
205150eval $( 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
207152
208153# Necesitas estar en un master para lanzar el siguiente comando
209154eval $( docker-machine env master-1)
210155docker node ls
211156# El asterisco te dice desde dónde estás lanzando el comando.
212157
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-
219158# Lo siguiente es desplegar una aplicación en este cluster
220159docker service create --name web-nginx \
221160 -p 8080:8080 \
@@ -254,14 +193,14 @@ https://github.com/dockersamples/docker-swarm-visualizer
254193eval $( docker-machine env master-2)
255194
256195docker service create \
257- --name=viz \
258- --publish=9090:8080/tcp \
196+ --name=docker-swarm-visualizer \
197+ --publish=9090:8080 \
259198 --constraint=node.role==manager \
260199 --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
261200 dockersamples/visualizer
262201
263202docker service ls
264- docker service ps viz
203+ docker service ps docker-swarm-visualizer
265204
266205# En mi ejemplo se ha desplegado en el master-0 pero puedo acceder desde cualquier nodo
267206docker-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
286225# probamos lo mismo con una de las máquinas que si que tiene una réplica
287226curl $( docker-machine ip worker-0) :8070 # funciona
288227
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-
297228# Docker Stacks #
298229# Con Docker Stacks podemos utilizar archivos de la misma forma que hacíamos con Docker Compose pero en clústers.
299230cd 01-contenedores/contenedores-vi/stacks/stackdemo
300231eval $( 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+
304237# Para que lo despliegue en formato cluster debemos utilizar el siguiente comando:
305238docker stack deploy -c docker-compose.yml stackdemo
306239# Para ver todos los servicios desplegados con Docker stack
307240docker stack ls
308241docker stack ps stackdemo
309242# Ahora si que podremos verlo como un servicio
310243docker 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