Diferència entre revisions de la pàgina «Docker al mòdul DAM-M02»

De wikijoan
Salta a la navegació Salta a la cerca
Línia 181: Línia 181:
 
En el nostre docker podem entrar directament a la consola:
 
En el nostre docker podem entrar directament a la consola:
 
<pre>
 
<pre>
$ docker exec -it mysql_m02bd mysql /bin/bash
+
$ docker exec -it mysql_m02bd /bin/bash
 
#
 
#
 
</pre>
 
</pre>

Revisió del 19:01, 29 nov 2021

Instal·lació de Docker

Docker (container engine) logo.png

Instal·lació a Linux

$ 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 (o bé bionic,...) 

ulyana a Linux Mint és l'equivalent a focal a Debian

o bé:

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 (seguidament hem de tancar i tornar a obrir la sessió de Linux):

$ sudo groupadd docker (ja existeix)
$ sudo usermod -aG docker $USER

Instal·lació a Windows 10

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 (NOTA: és important anar executant aquesta comanda, i en algunes màquines el procés de càrrega dels scripts pot ser lent. Esperar fins que surti el missatge 'Acaba privilegis.sql):

$ docker logs mysql_m02bd

...
[Entrypoint] GENERATED ROOT PASSWORD: V59Sj1R6^?2cd:p?XLH+,RbRm?O5/51O
després del generated root password
comencen els scripts
[BD] Comença HR.sql:
[BD] Acaba HR.sql. Comença municipis_v2122.sql:
[BD] Acaba municipis_v2122.sql. Comença langtrainer_211018.sql:
[BD] Acaba langtrainer_211018.sql. Comença empresa.sql:
[BD] Acaba empresa.sql. Comença sakila-schema.sql:
[BD] Acaba sakila-schema.sql. Comença sakila-data.sql:
[BD] Acaba sakila-data.sql. Comença northwind-default-current-timestamp.sql:
[BD] Acaba northwind-default-current-timestamp.sql. Comença northwind-data.sql:
[BD] Acaba northwind-data.sql. Comença mysqlsampledatabase.sql:
[BD] Acaba mysqlsampledatabase.sql. Comença categories_bikeshop.sql:
[BD] Acaba categories_bikeshop.sql. Comença vestuari.sql:
[BD] Acaba vestuari.sql. Comença englishresources.sql:
[BD] Acaba englishresources.sql. Comença privilegis.sql:
[BD] Acaba privilegis.sql:
acaben els scripts
...
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 /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

Workbench docker HR.png

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

PhpMyAdmin docker.png

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