lunes, 13 de abril de 2020

W10 - Accediendo a la docker-machine (¿?)

Según nos habían dicho, en W10 docker era nativo, a la manera de linux.

Pero no, al final la docker-machine de toda la vida en w7 no se llama docker-machine en W10, pero no deja de ser una máquina virtual.

En W10 usa Hyper-V, esa es la diferencia. En W7 se usaba VirtualBox como driver por defecto cuando creábamos dicha docker-machine. En W10 parece que el hipervisor por defecto (y único diría yo) es Hyper-V.

Aquí tenemos nuestro docker "nativo":


Antes, para acceder a la máquina virtual docker simplemente hacíamos
docker-machine ssh nombre (o bien vía VirtualBox)
 En la actual no parece tan sencillo. Veamos un posible procedimiento (puede haber otros)

Lancemos los siguientes comandos:
docker run --privileged -it -v /var/run/docker.sock:/var/run/docker.sock docker
Aquí ya nos encontramos en un contenedor docker, con root (--privileged), con docker instalado ( con solo ver el nombre de la imagen....). No obstante lo dicho, funciona igualmente sin elevación de privilegios (sin el --privileged). Si queremos obtener datos internos podemos lanzar algunos comandos dentro:



Por consiguiente podemos levantar de nuevo un contenedor (dentro del contenedor, la locura, vaya!!!) a partir del siguiente comando:
docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
Estamos incumpliendo varias normas de seguridad, como usar la red "host", que nos da acceso total  a los recursos de la máquina, pero recordad que estamos en un contenedor.

Ahora si que estamos en la máquina virtual visible desde Hyper-V. Esta es nuestra docker-machine oculta tras el supuesto docker nativo de W10.



Y diréis, ¿y esto qué me aporta? Bueno, básicamente información, conocimiento, que ya de por sí mola!!!

Pero veamos, pregunta, cuando en, por ejemplo, un docker-compose.yml creamos un volumen con el formato

volumes:
      - oracle19_data:/opt/oracle/oradata

volumes:
  oracle19_data:
    driver: local


Tal como hicimos en la anterior entrada "Oracle 19 - docker", ¿dónde se están persistiendo los datos del contenedor (/opt/oracle/oradata)?

Ha!!!!

Pues eso, se están guardando en la MV docker. ¿Y dónde podemos encontrarlos?
Veamos. Primero, fuera, en una consola cmd o PowerShell nueva veamos ese volumen:
docker volume ls
DRIVER              VOLUME NAME
...
local                     oracle_oracle19_data
En el nombre del volumen aparece un prefijo "oracle" añadido por ser el nombre del directorio donde tengo el docker-compose.yml. Veamos la ruta del volumen dentro de la MV docker.


Claro, si en nuestro W10 quisiesemos encontrar esa ruta veríamos que nos sería imposible. Esa ruta no es de nuestro W10.

Ahora es cuando se enlaza todo, si volvemos al último contenedor levantado más arriba y cambiamos el directorio root a /host
chroot /host
 y hacemos un ls, bingo!!!

 

que es justo lo que hay en el mismo contenedor Oracle levantado. Para acabar de validarlo (para los que no se fien) entremos al contenedor Oracle
docker ps
CONTAINER ID      IMAGE   ......
c86159e64799        oracle/database:19.3.0-ee     .......
y hagamos un ls el directorio persistido según la configuración del docker-compose.yml:



Por tanto, de alguna forma es interesante/importante poder verificar o conocer estos detalles, para un conocimiento y control más profundo de docker sobre Windows.



No hay comentarios:

Publicar un comentario