Diferència entre revisions de la pàgina «Docker al mòdul DAM-M02»
| Línia 269: | Línia 269: | ||
Arrenquem el contenidor, tenim vàries possibilitats | Arrenquem el contenidor, tenim vàries possibilitats | ||
==Usage with linked server== | ==Usage with linked server== | ||
| + | Els enllaços (''links'') permeten que els contenidors es descobreixin entre ells i transfereixin de manera segura informació d'un contenidor a un altre contenidor. | ||
| + | |||
Tenim un docker del mysql amb les bases de dades, i un altre docker amb el phpMyAdmin. Per tant, han d'estar els dos contenidors arrencats: | Tenim un docker del mysql amb les bases de dades, i un altre docker amb el phpMyAdmin. Per tant, han d'estar els dos contenidors arrencats: | ||
Revisió del 11:44, 18 nov 2021
Contingut
Instal·lació de Docker
Instal·lació a Linux
- Curs_GDS_(Dani_Arribas)#Instal.C2.B7laci.C3.B3_Docker_per_seguir_el_curs_de_GDS
- https://linuxhint.com/install_docker_linux_mint/
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ lsb_release -cs ulyana
ulyana a Linux Mint és l'equivalent a focal a Debian
Ens descarreguem aquests fitxers: (o els que correspongui segons la teva versió de Linux)
containerd.io_1.4.9-1_amd64.deb docker-ce-cli_19.03.10~3-0~ubuntu-focal_amd64.deb docker-ce_19.03.10~3-0~ubuntu-focal_amd64.deb
i ara instal·lem aquests paquets:
$ sudo dpkg -i *.deb
I ara ja podem arrencar un docker:
$ sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 2db29710123e: Pull complete Digest: sha256:37a0b92b08d4919615c3ee023f7ddb068d12b8387475d64c622ac30f45c29c51 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ...
Per tal de poder utilitzar docker sense sudo:
$ sudo groupadd docker (ja existeix) $ sudo usermod -aG docker $USER
Instal·lació a Windows 10
- https://www.simplilearn.com/tutorials/docker-tutorial/install-docker-on-windows
- https://docs.docker.com/docker-for-windows/install/
Instal·lo el Docker Desktop 3.5.2 o la versió més nova disponible.
Hem de reiniciar l'ordinador. Arrenco el Docker Desktop, i protesta perquè la instal·lació de WSL2 és incompleta. Seguir les instruccions. Senzillament es tracta d'instal·lar el paquet d'actualització wsl_update_x64.msi
The Windows Subsystem for Linux (WSL) is a way to run a full Linux environment on your Windows machine, without having to install a "heavier" virtual machine, such as Virtual Box, VM Ware, or Hyper-V. WSL 2 also provides a mechanism for running Docker (with Linux containers) on your Windows machine. We'll install it as a prerequisite for Docker Desktop for Windows
A Windows normalment farem servir el Windows Desktop. Però també tenim la possibilitat d'utilitzar tota la funcionalitat de Docker a la consola, per exemple, per descarregar un contenidor del núvol, per arrencar i executar un contenidor, etc.
Docker del mòdul: mysql_m02bd v5
Descàrrega de dockerhub
El docker (contenidor) que farem servir a l'assigntura està documentat a:
Concretament és la versió 5:
En aquesta versió 5 es pot entrar directament amb l'usuari alumne (password: keil2Lai), i tenim 10 bases de dades per treballar a classe:
- HR
- municipis
- langtrainer
- empresa
- sakila
- northwind
- mysqlsampledatabase
- categories_bikeshop
- vestuari
englishresources
El docker que farem servir està pujat al núvol (dockerhub), i s'anomena joanillo/mysql_m02bd:5.0.
Així doncs, després d'instal·lar el Docker a la teva màquia (Linux o Windows o Mac), hem de baixar el contenidor del dockerhub:
$ docker pull joanillo/mysql_m02bd:5.0 a21d4bfd3284: Pull complete Digest: sha256:2b48d332cece8ba8d2e256537427c3d26d18c28dc6732913032a57d5df9bde03 Status: Downloaded newer image for joanillo/mysql_m02bd:5.0 docker.io/joanillo/mysql_m02bd:5.0
Engego aquest contenidor i l'executo
$ docker run --name=mysql_m02bd -d joanillo/mysql_m02bd:5.0 267f094d20f3142ab89484a1919e1193fffbd2e53882ded31f80031005336707
El contenidor està funcionant:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e593408e5541 joan/mysql_m02bd:5.0 "/entrypoint_v5.sh m…" 14 seconds ago Up 13 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql_m02bd
Per mirar els logs:
$ docker logs mysql_m02bd ... 2021-11-15T17:05:34.128903Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock 2021-11-15T17:05:34.129065Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
Recordar! No puc entrar amb l'usuari alumne fins que no em surti ready for connections (abans s'estan executant els scripts, i els privilegis de l'usuari alumne no es fan fins al final)
$ docker exec -it mysql_m02bd mysql -u alumne -pkeiL2lai mysql>
I ara ja sóc dins i ja puc iniciar una sessió. Per a Windows el procés és el mateix, però també puc utilitzar la interfície gràfica que se'ns proporciona.
També és interessant mirar els recursos de la màquina local que consumeix el contenidor:
$ docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 71551cd939f6 mysql_m02bd 0.41% 367.3MiB / 7.304GiB 4.91% 12.5kB / 0B 12.1MB / 441MB 39
Sessió a la consola de mysql
$ docker exec -it mysql_m02bd mysql -u alumne -pkeiL2lai mysql> show databases
He de comprovar que tinc les 10 bases de dades.
mysql> use HR; -> per utilitzar la base de dades HR mysql> show tables; -> per veure les taules de la base de dades HR mysql> desc employees; -> per veure els camps de la taula employees; mysql> select * from employees; -> ja podem fer consultes i comandes SQL
Si vull entrar directament a una base de dades podem fer:
$ docker exec -it mysql_m02bd mysql -u alumne -pkeiL2lai municipis o bé $ docker exec -it mysql_m02bd mysql -u alumne -pkeiL2lai -D municipis
NOTA: el que no podem fer és:
$ docker exec -it mysql_m02bd mysql -u alumne -p keiL2lai municipis <- NO és correcte!
No pot haver-hi un espai en blanc entre la p i el password (doncs es pensaria que hi ha la base de dades anomenada keiL2lai)
NOTA: també existeix el paràmetre -P (majúscula): port, que és el port TCP de connexió del mysql, que per defecte és el 3306:
$ docker exec -it mysql_m02bd mysql -h localhost -P 3306 -u alumne -pkeiL2lai municipis
També hem utilitzat -h localhost per indicar que el servidor mysql s'està executant en la màquina local (ja veiem que per defecte és opcional). En resum, hi ha molts paràmetres que els anirem veient poc a poc (i no cal veure'ls tots). Pots provar-ho fent:
Sessió a la consola de Linux, i entrar al mysql com a root
En el nostre docker podem entrar directament a la consola:
$ docker exec -it mysql_m02bd mysql /bin/bash #
Estem en una sessió de Linux.
Recordem que el SGBD MySQL té una arquitectura client-servidor. D'una banda tenim el servidor, el dimoni (mysql-server), i d'altra banda tenim clients que es poden connectar al servidor. Concretament, quan escrivim mysql en la consola, ens estem referint al client de mysql de la consola (és a dir, l'aplicatiu bàsic de consola que fem servir per connectar-nos a un servidor). Per veure totes les opcions:
# man mysql
Aquí podem veure les opcions que ja hem fet servir, i moltes més (en farem servir algunes més quan calgui).
I des de la consola podem entrar al mysql, similar a com hem fet abans:
# mysql -u alumne -pkeiL2lai municipis mysql> select count(*) from municipis; mysql> exit #
Fins ara hem entrat al mysql amb l'usuari alumne, que té permisos sobre les 10 bases de treball que farem servir.
També podem entrar amb l'usuari root, però el primer que s'haurà de fer és saber quin és el password actual, i l'haurem de canviar. (TBD)
Sessió des de la consola de la meva màquina local
Podem saber quina és la IP que exposa el docker en la meva màquina local:
$ docker ps CONTAINER ID IMAGE 242534ba574d joan/mysql_m02bd:5.0 $ docker inspect mysql_m02bd ... "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", ...
I aleshores:
$ mysql -h 172.17.0.2 -u alumne -pkeiL2lai municipis
L'únic requisit és que el docker estigui en funcionament (run), que es pot comprovar amb:
$ docker ps CONTAINER ID IMAGE 242534ba574d joan/mysql_m02bd:5.0
Sessió amb mysql-workbench
Instal·lació mysql-workbench-community a Linux
Provat a Linux Mint (juliol 2021)
(prèviament hem d'instal·lar snap)
Queda ben instal·lat, però no puc connectar-me a la bd. Per solucionar-ho:
$ snap connect mysql-workbench-community:password-manager-service $ snap connect mysql-workbench-community:ssh-keys $ mysql-workbench-community
Ja funciona
Instal·lació mysql-workbench a Windows
Descarrego:
- mysql-workbench-community-8.0.27-winx64.exe
Necessita Visual C++ 2019 Redistributable package Descarrego i instal·lo:
- VC_redist.x64.exe
I llavors ja queda ben instal·lat
Configuració mysql-workbench per connectar-se al docker
Necessitem saber quina és la IP que exposa el docker a la nostra màquina local.
$ docker ps CONTAINER ID IMAGE 242534ba574d joan/mysql_m02bd:5.0 $ docker inspect mysql_m02bd ... "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", ...
Configuració per connectar-se a la base de dades de municipis:
hostname: 172.17.0.2 Port: 3306 username: alumne password: keiL2lai default schema: municipis
Funciona correctament.
Per configurar el TablePlus es fa de forma similar. L'avantatge del TablePlus és que és per connectar-se al PostgeSQL i altres bases de dades (a part del MySQL).
Docker del phpMyAdmin
Official phpMyAdmin Docker image:
$ docker pull phpmyadmin/phpmyadmin:latest 69692152171a: Pull complete 9b4ca5ae9dfa: Extracting 69.07MB/76.68MB ... Status: Downloaded newer image for phpmyadmin/phpmyadmin:latest docker.io/phpmyadmin/phpmyadmin:latest
Arrenquem el contenidor, tenim vàries possibilitats
Usage with linked server
Els enllaços (links) permeten que els contenidors es descobreixin entre ells i transfereixin de manera segura informació d'un contenidor a un altre contenidor.
Tenim un docker del mysql amb les bases de dades, i un altre docker amb el phpMyAdmin. Per tant, han d'estar els dos contenidors arrencats:
First you need to run a MySQL or MariaDB server in Docker, and the phpMyAdmin image needs to be linked to the running database container:
$ docker run --name=mysql_m02bd -d joanillo/mysql_m02bd:5.0 $ docker run --name myadmin -d --link mysql_m02bd:db -p 8080:80 phpmyadmin/phpmyadmin
I ja funciona:
I ara ja puc entrar (alumne/keiL2lai), i puc veure les 10 bases de dades que tinc.
Tenim els dos dockers arrencats:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ba9c1e635708 phpmyadmin/phpmyadmin "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp myadmin a679fe06f4f9 joanillo/mysql_m02bd:5.0 "/entrypoint_v5.sh m…" 3 minutes ago Up 3 minutes (healthy) 3306/tcp, 33060-33061/tcp mysql_m02bd
Consum de memòria i CPU:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS ba9c1e635708 myadmin 0.01% 35.82MiB / 7.304GiB 0.48% 173kB / 240kB 4.44MB / 283kB 11 a679fe06f4f9 mysql_m02bd 0.42% 376MiB / 7.304GiB 5.03% 55.5kB / 64.5kB 20.2MB / 441MB 40
creat per Joan Quintana Compte, novembre 2021
