Diferència entre revisions de la pàgina «Docker a DAM-M02»
| (Hi ha 14 revisions intermèdies del mateix usuari que no es mostren) | |||
| Línia 1: | Línia 1: | ||
=Introducció= | =Introducció= | ||
| + | [[Fitxer:Docker (container engine) logo.png]] | ||
| + | |||
Es tracta de treballar amb mysql (o Postgres) sense que els alumnes ho hagin d'instal·lar en les seves màquines locals. I sense haver d'utilitzar màquines virtuals. S'ha de buscar la manera més ràpida, flexible i lleugera per tal de què els alumnes puguin començar a treballar i practicar sentències SQL. | Es tracta de treballar amb mysql (o Postgres) sense que els alumnes ho hagin d'instal·lar en les seves màquines locals. I sense haver d'utilitzar màquines virtuals. S'ha de buscar la manera més ràpida, flexible i lleugera per tal de què els alumnes puguin començar a treballar i practicar sentències SQL. | ||
| Línia 8: | Línia 10: | ||
*https://platzi.com/contributions/guia-del-curso-de-docker/ | *https://platzi.com/contributions/guia-del-curso-de-docker/ | ||
*https://www.docker.com/play-with-docker | *https://www.docker.com/play-with-docker | ||
| + | Overview de Docker: | ||
| + | *https://docs.docker.com/get-started/overview/ | ||
*Cas d'us: curs GDS | *Cas d'us: curs GDS | ||
| Línia 19: | Línia 23: | ||
*https://linuxhint.com/install_docker_linux_mint/ | *https://linuxhint.com/install_docker_linux_mint/ | ||
<pre> | <pre> | ||
| − | $ sudo | + | $ sudo apt-get update |
$ sudo apt-get install \ | $ sudo apt-get install \ | ||
| Línia 42: | Línia 46: | ||
docker-ce-cli_19.03.10~3-0~ubuntu-focal_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 | docker-ce_19.03.10~3-0~ubuntu-focal_amd64.deb | ||
| + | </pre> | ||
| + | I els instal·lem: | ||
| + | <pre> | ||
| + | $ sudo dpkg -i *.deb | ||
</pre> | </pre> | ||
I ara ja podem arrencar un docker: | I ara ja podem arrencar un docker: | ||
| Línia 61: | Línia 69: | ||
$ sudo usermod -aG docker $USER | $ sudo usermod -aG docker $USER | ||
</pre> | </pre> | ||
| + | |||
==Instal·lació a Windows 10== | ==Instal·lació a Windows 10== | ||
*https://www.simplilearn.com/tutorials/docker-tutorial/install-docker-on-windows | *https://www.simplilearn.com/tutorials/docker-tutorial/install-docker-on-windows | ||
| Línia 527: | Línia 536: | ||
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) | 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) | ||
<pre> | <pre> | ||
| − | $ docker exec -it mysql_m02bd mysql -alumne -pkeiL2lai | + | $ docker exec -it mysql_m02bd mysql -u alumne -pkeiL2lai |
</pre> | </pre> | ||
i efectivament no cal entrar com a root. | i efectivament no cal entrar com a root. | ||
| Línia 614: | Línia 623: | ||
Ara vull esborrar-la en local i baixar-la del dockerhub per comprovar que funciona: | Ara vull esborrar-la en local i baixar-la del dockerhub per comprovar que funciona: | ||
<pre> | <pre> | ||
| − | $ docker rm -f | + | $ docker rm -f fbb93c6123d0 |
$ docker rmi -f e443b1ee1003 | $ docker rmi -f e443b1ee1003 | ||
</pre> | </pre> | ||
| Línia 647: | Línia 656: | ||
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) | 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) | ||
<pre> | <pre> | ||
| − | $ docker exec -it mysql_m02bd mysql -alumne -pkeiL2lai | + | $ docker exec -it mysql_m02bd mysql -u alumne -pkeiL2lai |
</pre> | </pre> | ||
| + | També és interessant comprovar els recursos de la meva màquina que consumeix el contenidor que està engegat: (ho podem comparar amb la càrrega de tenir funcionant una màquina virtual) | ||
| + | <pre> | ||
| + | $ 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 | ||
| + | </pre> | ||
| + | |||
===mysql-workbench=== | ===mysql-workbench=== | ||
I ara el mysql-workbench | I ara el mysql-workbench | ||
| Línia 659: | Línia 676: | ||
</pre> | </pre> | ||
Funciona correctament. | Funciona correctament. | ||
| + | ===Accents a la consola i dins del mysql=== | ||
| + | *https://www.generacodice.com/en/articolo/2876386/unable-to-use-cyrillic-characters-in-mysql-docker-console | ||
| + | |||
| + | |||
| + | En el dockerfile: | ||
| + | <pre> | ||
| + | #ENV LANG en_US.UTF-8 | ||
| + | ENV LANG C.UTF-8 # millor | ||
| + | </pre> | ||
| + | Una altra possibilitat és dins del docker fer: | ||
| + | <pre> | ||
| + | bash-4.4# LANG=C.UTF-8 | ||
| + | </pre> | ||
| + | o bé quan executo la comanda del docker: | ||
| + | <pre> | ||
| + | $ docker exec -it -e LANG=C.UTF-8 mysql_m02bd /bin/bash | ||
| + | </pre> | ||
| + | El curiós del cas és que amb ''en_US.UTF8'' (' ''ca_ES.UTF8'') encara que es veuen els accents al fer una select, no puc posar els accents quan escrir. En canvi amb '''C.UTF8''' sí que funciona bé. ''C'' significa ''computer''. | ||
=Linux. Descarregar el docker mysql_municipis_empresa:3.0.Consola= | =Linux. Descarregar el docker mysql_municipis_empresa:3.0.Consola= | ||
| Línia 769: | Línia 804: | ||
La creació d'aquest usuari no s'ha de fer manualment, sinó que es fa en els scripts del docker. | La creació d'aquest usuari no s'ha de fer manualment, sinó que es fa en els scripts del docker. | ||
| + | =Docker del phpMyAdmin= | ||
| + | [[Fitxer:PhpMyAdmin docker.png | thumbnail]] | ||
| + | |||
| + | Official phpMyAdmin Docker image: | ||
| + | *https://hub.docker.com/r/phpmyadmin/phpmyadmin/ | ||
| + | <pre> | ||
| + | $ 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 | ||
| + | </pre> | ||
| + | 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: | ||
| + | <pre> | ||
| + | $ 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 | ||
| + | </pre> | ||
| + | I ja funciona: | ||
| + | *http://localhost:8080/ | ||
| + | I ara ja puc entrar (alumne/keiL2lai), i puc veure les 10 bases de dades que tinc. | ||
| + | |||
| + | Tenim els dos dockers arrencats: | ||
| + | <pre> | ||
| + | $ 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 | ||
| + | </pre> | ||
| + | Consum de memòria i CPU: | ||
| + | <pre> | ||
| + | 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 | ||
| + | </pre> | ||
| + | ==Usage with external server and arbitrary server== | ||
| + | Sí sé que la meva adreça IP del contenidor del mysql és: "IPAddress": "172.17.0.2", tinc també aquestes dues maneres de connectar-me: | ||
| + | <pre> | ||
| + | docker run --name myadmin -d -e PMA_HOST=172.17.0.2 -p 8080:80 phpmyadmin/phpmyadmin | ||
| + | docker run --name myadmin -d -e PMA_ARBITRARY=1 -p 8080:80 phpmyadmin/phpmyadmin | ||
| + | </pre> | ||
| + | En aques segon cas, en el phpMyAdmin surt la casella del servidor, i puc posar la IP del contenidor de mysql. | ||
| + | *http://localhost:8080 | ||
| + | |||
| + | ==Connectar al mysql de la màquina local== | ||
| + | Si vull connectar el meu phpMyAdmin (docker) en el meu mysql local (sense contenidor), el que funciona és: | ||
| + | *https://github.com/phpmyadmin/docker/issues/271 | ||
| + | <pre> | ||
| + | $ docker run --rm --name pma-socket -p 8080:80 -e PMA_SOCKET=/run/mysqld/mysqld.sock -v /run/mysqld/mysqld.sock:/run/mysqld/mysqld.sock phpmyadmin/phpmyadmin | ||
| + | </pre> | ||
| + | *http://localhost:8080 | ||
| + | i ara veig les bases de dades locals | ||
| + | |||
| + | =Docker compose= | ||
| + | *https://docs.docker.com/compose/install/ | ||
| + | Ara ja van per la versió 2, però de moment provem la versió 1.29 (que és de fa pocs mesos) | ||
| + | *https://github.com/docker/compose/releases | ||
| + | <pre> | ||
| + | $ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose | ||
| + | $ sudo chmod +x /usr/local/bin/docker-compose | ||
| + | $ docker-compose --version | ||
| + | docker-compose version 1.29.2, build 5becea4c | ||
| + | </pre> | ||
| + | L'avantatge de '''docker-compose''' és que puc tenir fitxers de configuració ''yml'' que em facilitin la feina de configuració dels meus dockers. Per exemple, un cas pràctic, tenim el docker del mysql (amb 10 bases de dades) i el docker del phpMyAdmin. Puc tenir un fitxer de configuració que arrenqui els dos dockers al mateix temps. | ||
| + | *https://josejuansanchez.org/bd/practica-07/index.html | ||
| + | |||
| + | script ''docker-compose-mysql-phpmyadmin_v5.yml'': | ||
| + | <pre> | ||
| + | version: '3' | ||
| + | |||
| + | services: | ||
| + | mysql_m02bd: | ||
| + | image: joanillo/mysql_m02bd:5.0 | ||
| + | environment: | ||
| + | - MYSQL_ROOT_PASSWORD=root | ||
| + | - MYSQL_USER=alumne | ||
| + | - MYSQL_PASSWORD=keiL2lai | ||
| + | volumes: | ||
| + | - mysql_data:/var/lib/mysql | ||
| + | |||
| + | myadmin: | ||
| + | image: phpmyadmin/phpmyadmin | ||
| + | ports: | ||
| + | - 8080:80 | ||
| + | environment: | ||
| + | - PMA_HOST=mysql_m02bd | ||
| + | depends_on: | ||
| + | - mysql_m02bd | ||
| + | |||
| + | volumes: | ||
| + | mysql_data: | ||
| + | </pre> | ||
| + | el renombro a '''docker-compose.yml''' | ||
| + | I ja puc arrencar els dos dockers amb una comanda senzilla: | ||
| + | <pre> | ||
| + | $ docker-compose up | ||
| + | ... | ||
| + | mysql_m02bd_1 | 2021-11-18T12:31:06.706874Z 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. | ||
| + | </pre> | ||
| + | *http://localhost:8080 | ||
| + | i ja puc entrar amb alumne/keiL2lai | ||
| + | |||
| + | La primera vegada triga més, evidentment. Però les properes vegades, fent senzillament ''docker-compose up'' ja tinc els meus dos dockers funcionant amb 2 segons. | ||
{{Autor}}, novembre 2021 | {{Autor}}, novembre 2021 | ||
Revisió de 14:21, 16 maig 2022
Contingut
- 1 Introducció
- 2 Introducció. Què és Docker?
- 3 Instal·lació de Docker
- 4 Docker de DAM-M02
- 5 Linux. Descarregar el docker mysql_municipis_empresa:3.0.Consola
- 6 Windows. Descarregar el docker mysql_municipis_empresa:3.0.Consola
- 7 Linux. mysql-workbench
- 8 Windows. mysql-workbench
- 9 Docker del phpMyAdmin
- 10 Docker compose
Introducció
Es tracta de treballar amb mysql (o Postgres) sense que els alumnes ho hagin d'instal·lar en les seves màquines locals. I sense haver d'utilitzar màquines virtuals. S'ha de buscar la manera més ràpida, flexible i lleugera per tal de què els alumnes puguin començar a treballar i practicar sentències SQL.
Creiem que avui dia una de les maneres d'aconseguir-ho és amb contenidors.
Introducció. Què és Docker?
- https://dev.to/silicosis/que-es-docker-y-para-que-sirve-explicacion-5h2n
- https://platzi.com/contributions/guia-del-curso-de-docker/
- https://www.docker.com/play-with-docker
Overview de Docker:
- Cas d'us: curs GDS
- Cas d'us: M02-Bases de dades
Instal·lació de Docker
Creem la carpeta dockerfiles/
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:
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 els instal·lem:
$ 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
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 de DAM-M02
v0. servidor de mysql
Les imatges oficials de mysql:
$ docker pull mysql/mysql-server Using default tag: latest
L'arrenquem i l'executem:
$ docker run --name=mysql_test -d mysql/mysql-server:latest $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 132c5cefe79f mysql/mysql-server:latest "/entrypoint.sh mysq…" About a minute ago Up About a minute (healthy) 3306/tcp, 33060-33061/tcp mysql1 $ docker exec -t -i 132c5cefe79f /bin/bash bash-4.4 # exit
per saber el password:
$ docker logs mysql1 2>&1 | grep GENERATED [Entrypoint] GENERATED ROOT PASSWORD: zuE#2PK;/5c^1Of94.nIqo6%%CMk_8T8
I ara que ja sabem el password del root, hem d'entrar a dins del mysql i canviar el password:
$ docker exec -it mysql1 mysql -uroot -p mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; mysql> exit bash-4.4 # exit
Tornem a entrar, directament al mysql:
$ docker exec -it mysql1 mysql -uroot -p***** mysql>
Per tenir un docker amb el mysql he fet un pull directament al núvol.
Però també publiquen el Dockerfile:
i per tant el puc construir a partir del script. En comptes de fer un pull, copio el fitxer Dockerfile al local i el renombro a Dockerfile_test, i a partir d'aquest fitxer puc muntar el meu docker:
$ docker build -t joan/mysql_test:1.0 -f ./Dockerfile_test . $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_test 1.0 9f04fb2e652f 5 seconds ago 132MB
El Dockerfile és el fitxer de configuració. Aquí podrem posar totes les instruccions que vulguem per tal de fer uns contenidors a mida.
v1. MySQL i base de dades de municipis
Ara que ja tenim un mysql funcionant, es tracta de configurar mitjançant un fitxer de configuració (Dockerfile) per tal de complir una sèrie de requeriments.
- Dockerfile_v1
Mirar per dins aquest fitxer. Bàsicament el que fa és copiar el fitxer de municipis.sql a dins del docker:
... COPY ./bd/municipis/municipis_v2122.sql /etc/municipis_v2122.sql
Per tal de què funcioni, és necessari descarregar-nos aquests fitxers localment:
$ wget https://raw.githubusercontent.com/mysql/mysql-docker/mysql-server/8.0/docker-entrypoint.sh $ wget https://raw.githubusercontent.com/mysql/mysql-docker/mysql-server/8.0/healthcheck.sh $ sudo chmod a+x *.sh
I ara ja puc fer el build del meu docker a partir del meu fitxer de congiguració:
$ docker build -t joan/mysql_municipis:1.0 -f ./Dockerfile_v1 . $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_municipis 1.0 ea563a3aa7aa 14 seconds ago 406MB oraclelinux 7-slim 078d6e3ae75e 8 days ago 132MB
I ara arrenco el docker:
$ docker run --name=mysql_municipis -d joan/mysql_municipis:1.0 408777e6187f048cdc5c640dfdf7f0c4da0809a04c49acda7fb4374b27a98c31 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 408777e6187f joan/mysql_municipis:1.0 "/entrypoint.sh mysq…" 18 seconds ago Up 18 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql_municipis
(el docker ja està funcionant)
el password: abans de fer el exec, he de posar el password:
$ docker logs mysql_municipis 2>&1 | grep GENERATED [Entrypoint] GENERATED ROOT PASSWORD: -oM5Eb!YkEP#ONagyKr0Kk4cx3f
Ja puc arrencar una instància, i el primer que fem és entrar com a root per a canviar-li el password, i crear la base de dades de municipis i crear l'usuari alumne amb permisos sobre la base de dades de municipis (la creació de l'usuari es fa dins del script sql).
$ docker exec -it mysql_municipis mysql -uroot -p mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '******'; mysql> \! ls /etc/municipis_v2122.sql /etc/municipis_v2122.sql mysql> \. /etc/municipis_v2122.sql mysql> use municipis mysql> select count(*) from provincies; mysql> exit
Ara ja podem entrar amb l'usuari alumne:
$ docker exec -it mysql_municipis mysql -u alumne -pkeiL2lai municipis mysql> show tables; +---------------------+ | Tables_in_municipis | +---------------------+ | comunitats | | municipis | | provincies | +---------------------+ 3 rows in set (0.00 sec) mysql> select count(*) from provincies; +----------+ | count(*) | +----------+ | 52 | +----------+
v2. MySQL i bases de dades municipis
Dockerfile_v2: En aquest fitxer fem referència a una nova versió del entrypoint: docker-entrypoint_v2.sh:
$ sudo chmod a+x docker-entrypoint_v2.sh
En la línia 123:
... source /etc/municipis_v2122.sql; ...
de manera que es carrega la base de dades en el moment del build del docker.
$ docker build -t joan/mysql_municipis:2.0 -f ./Dockerfile_v2 . $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_municipis 2.0 e4ab089a696c 16 seconds ago 406MB joan/mysql_municipis 1.0 ea563a3aa7aa 31 minutes ago 406MB oraclelinux 7-slim 078d6e3ae75e 8 days ago 132MB $ docker run --name=mysql_municipis_v2 -d joan/mysql_municipis:2.0 23fd38e1eb6354663e9b7d65528e1ca78333a81a2e3ef948cece9c619daae4cc $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23fd38e1eb63 joan/mysql_municipis:2.0 "/entrypoint_v2.sh m…" 12 seconds ago Up 11 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql_municipis_v2 408777e6187f joan/mysql_municipis:1.0 "/entrypoint.sh mysq…" 31 minutes ago Up 31 minutes (healthy) 3306/tcp, 33060-33061/tcp mysql_municipis
ara ja podem entrar amb l'usuari alumne:
$ docker exec -it mysql_municipis mysql -u alumne -pkeiL2lai municipis mysql> show tables; +---------------------+ | Tables_in_municipis | +---------------------+ | comunitats | | municipis | | provincies | +---------------------+
v3: bases de dades de municipi i empresa
És la mateixa idea, però ara carrego dues bases de dades en comptes d'una sola. Per tant, podré carregar en el meu docker totes les bases de dades que vulgui. Dockerfile_v3:
... # primer copiem les dades al docker COPY ./bd/municipis/municipis_v2122.sql /etc/municipis_v2122.sql COPY ./bd/empresa/empresa.sql /etc/empresa.sql # modifiquem el entrypoint.sh de manera que fa tota la càrrega de les dades (que inclou crear l'usuari alume amb privilegis sobre la base de dades de municipis) COPY docker-entrypoint_v3.sh /entrypoint_v3.sh ...
entrypoint_v3.sh: (línia 123)
... source /etc/municipis_v2122.sql; source /etc/empresa.sql; ...
$ sudo chmod a+x docker-entrypoint_v3.sh $ docker build -t joan/mysql_municipis_empresa:3.0 -f ./Dockerfile_v3 . $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_municipis_empresa 3.0 6a054a07d3cc 9 seconds ago 406MB joan/mysql_municipis 2.0 e4ab089a696c 16 seconds ago 406MB joan/mysql_municipis 1.0 ea563a3aa7aa 31 minutes ago 406MB oraclelinux 7-slim 078d6e3ae75e 8 days ago 132MB $ docker run --name=mysql_municipis_empresa_v3 -d joan/mysql_municipis_empresa:3.0 15bbfce19f959f0058c3e7cdac93c57176c1fb4eb33ac6ceacac4b1361a658cb $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23459904377c joan/mysql_municipis_empresa:3.0 "/entrypoint_v3.sh m…" 14 seconds ago Up 14 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql_municipis_v3 23fd38e1eb63 joan/mysql_municipis:2.0 "/entrypoint_v2.sh m…" 12 seconds ago Up 11 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql_municipis_v2 408777e6187f joan/mysql_municipis:1.0 "/entrypoint.sh mysq…" 31 minutes ago Up 31 minutes (healthy) 3306/tcp, 33060-33061/tcp mysql_municipis
ara ja podem entrar amb l'usuari alumne a les bases de dades:
$ docker exec -it mysql_municipis_empresa_v3 mysql -ualumne -pkeiL2lai municipis $ docker exec -it mysql_municipis_empresa_v3 mysql -ualumne -pkeiL2lai empresa mysql> show tables;
I ara ja puc posar totes les bases de dades que vulgui
També puc entrar al terminal del meu docker:
$ docker exec -it mysql_municipis_empresa_v3 /bin/bash bash-4.2# bash-4.2# mysql -h localhost -u alumne -pkeiL2lai empresa empresa>
Pujar el docker que acabo de fer a dockerhub
La idea és penjar al dockerhub els meus dockers, per tal de què els alumnes se'ls puguin descarregar.
Step 1: Login to docker hub account
$ docker login username: joanillo password: ******** login succeeded
Step 2: Tag the image to upload
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_municipis_empresa 3.0 16937d3adcad 2 days ago 406M $ docker tag 16937d3adcad joanillo/mysql_municipis_empresa:3.0 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_municipis_empresa 3.0 16937d3adcad 2 days ago 406MB joanillo/mysql_municipis_empresa 3.0 16937d3adcad 2 days ago 406MB
És necessari posar el tag de joanillo, igual que el username de dockerhub.
Step 3: Push the image to docker hub
$ docker push joanillo/mysql_municipis_empresa:3.0 The push refers to repository [docker.io/joanillo/mysql_municipis_empresa] f864a942ede6: Pushed e6cca180e516: Pushed de3b0f6a6916: Pushed 51fee74d9317: Pushed 293c3b00ec06: Pushed 55bee6be610f: Pushed 3.0: digest: sha256:b993da7404da5070380c19034cd3daf6331b87212b6526f1ce52e23eaf401aec size: 1573
ara sí que em deixa perquè joanillo és el nom d'usuari correcte a dockerhub.
v4: bases de dades de HR (usuari alumne@%)
HR (human resources) és la base de dades que es fa servir per al tutorial de SQL.
L'objectiu d'aquesta versió és que la connexió al mysql-workbeng sigui fàcil. Els problemes que havia tingut per configurar el mysql-workbench contra docker eren que bàsicament havia de crear l'usuari alumne@% que permeti connexions fora de localhost. La idea és crear aquest usuari en el procés de preparació del docker. La idea també és separar tots els scripts de creació de les diferents taules, del script privilegis.sql que dóna permisos sobre les taules.
script privilegis_v4.sql:
CREATE USER 'alumne'@'localhost' IDENTIFIED BY 'keiL2lai'; CREATE USER 'alumne'@'%' IDENTIFIED BY 'keiL2lai'; # per tal de poder-nos connectar des de fora el docker (mysql-workbench) GRANT ALL ON HR.* TO 'alumne'@'localhost'; GRANT ALL ON HR.* TO 'alumne'@'%'; FLUSH PRIVILEGES;
Dockerfile_v4:
... # primer copiem les dades al docker COPY ./bd/HR/HR.sql /etc/HR.sql COPY ./bd/privilegis_v4.sql /etc/privilegis.sql # modifiquem el entrypoint.sh de manera que fa tota la càrrega de les dades (que inclou crear l'usuari alume amb privilegis sobre la base de dades de municipis) COPY docker-entrypoint_v4.sh /entrypoint_v4.sh COPY healthcheck.sh /healthcheck.sh ENTRYPOINT ["/entrypoint_v4.sh"] ...
docker-entrypoint_v4.sh (línia 123):
... source /etc/HR.sql; source /etc/privilegis.sql; ...
Així doncs, el procés és:
$ docker build -t joan/mysql_hr:4.0 -f ./Dockerfile_v4 .
(repository name must be lowercase, no podem posar HR)
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_hr 4.0 40d09480598e 4 seconds ago 406MB
NOTA: Quan he fet un run la primera vegada havia tingut un problema. Es poden mirar els logs per veure quin és el problema.
$ docker run --name=mysql_hr_v4 -d joan/mysql_hr:4.0 47f88b52ba73f1edd147fdc0376798efe6f462ead60ec0213668b2c633ab6ecf $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES no es veu el contenidor de HR, crec que hi ha hagut un problema $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 47f88b52ba73 $ docker logs 47f88b52ba73 ... [Entrypoint] GENERATED ROOT PASSWORD: tYdBUDukT0q0q3NNemUvVipSUl0 ERROR at line 6: Failed to open file '/etc/privilegis.sql', error: 2
Esborrem el contenidor i la imatge, i corregim el problema
Ara sí:
$ docker run --name=mysql_hr_v4 -d joan/mysql_hr:4.0 924fea3201ab6a1a5891e9d50b4476216b9fb8a1a1364c0c23d90aa3498574db $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 924fea3201ab joan/mysql_hr:4.0 "/entrypoint_v4.sh m…" 14 seconds ago Up 13 seconds (health: starting) 3306/tcp, 33060-33061/tcp $ docker exec -it mysql_hr_v4 mysql -ualumne -pkeiL2lai HR mysql> show tables; +--------------+ | Tables_in_HR | +--------------+ | countries | | departments ...
Per saber quina és la IP que exposa el docker, i que hauré de fer servir per configurar la meva connexió del mysql-workbench o del tableplus:
$ docker inspect 924fea3201ab ... "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", ...
Dades:
- hostname: 172.17.0.3
- Port: 3306
- username: alumne
- password: keiL2lai
- default schema: HR
En el tableplus la configuració és de la mateixa manera. La interfície gràfica no és la millor, però l'avantatge és que ens podem connectar a diferets bd (PostgreSQL,...)
I em puc connectar amb qualsevol client de mysql, concretament el client CLI:
$ mysql -h 172.17.0.3 -u alumne -pkeiL2lai HR mysql>
v5: bases de dades del mòdul M02-BD
En aquesta versió 5 hi ha 10 bases de dades per treballar a classe. I es pot entrar directament amb l'usuari alumne.
Recordem que fem servir el Dockerfile oficial de:
Els scripts docker-entrypoint.sh, healthcheck.sh, prepare-image.sh han d'estar amb permisos d'execució:
$ sudo chmod a+x docker-entrypoint.sh $ sudo chmod a+x prepare-image.sh $ sudo chmod a+x healthcheck.sh
Aquestes són les bases de dades que implemento:
COPY ./bd/HR/HR_v5.sql /etc/HR.sql COPY ./bd/municipis/municipis_v2122_v5.sql /etc/municipis_v2122.sql COPY ./bd/langtrainer/langtrainer_211018_v5.sql /etc/langtrainer_211018.sql COPY ./bd/empresa/empresa_v5.sql /etc/empresa.sql COPY ./bd/sakila-db/sakila-schema_v5.sql /etc/sakila-schema.sql COPY ./bd/sakila-db/sakila-data_v5.sql /etc/sakila-data.sql COPY ./bd/mywind/northwind-default-current-timestamp_v5.sql /etc/northwind-default-current-timestamp.sql COPY ./bd/mywind/northwind-data_v5.sql /etc/northwind-data.sql COPY ./bd/classicmodels/mysqlsampledatabase_v5.sql /etc/mysqlsampledatabase.sql COPY ./bd/categories_bikeshop/categories_bikeshop_v5.sql /etc/categories_bikeshop.sql COPY ./bd/vestuari/vestuari_v5.sql /etc/vestuari.sql COPY ./bd/englishresources/englishresources_v5.sql /etc/englishresources.sql source /etc/HR.sql; source /etc/municipis_v2122.sql; source /etc/langtrainer_211018.sql; source /etc/empresa.sql; source /etc/sakila-schema.sql; source /etc/sakila-data.sql; source /etc/northwind-default-current-timestamp.sql; source /etc/northwind-data.sql; source /etc/mysqlsampledatabase.sql; source /etc/categories_bikeshop.sql; source /etc/vestuari.sql; source /etc/englishresources.sql; source /etc/privilegis.sql; FLUSH PRIVILEGES ;
$ docker build -t joan/mysql_m02bd:5.0 -f ./Dockerfile_v5 . ... Removing intermediate container eb9ca6d261c8 ---> c708b7dc9ac9 Successfully built c708b7dc9ac9 Successfully tagged joan/mysql_m02bd:5.0
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_m02bd 5.0 c708b7dc9ac9 57 seconds ago 462MB oraclelinux 8-slim 87ea2daf719e 11 days ago 110MB
Arrenquem el contenidor:
$ docker run --name=mysql_m02bd -d joan/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 2>&1 ... 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.
IMPORTANT: s'ha d'esperar que acabi (ready for connections). No és immediat perquè estem executant tots els scripts de creació de les taules de les diferents bases de dades. Compte! perquè si hi hagués algun error en un script petaria tot... (a no ser que faci servir la comanda force per tirar endavant...). Això és el que m'ha passat amb la base de dades englishresources, que hi havia un error de clau forània.
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
i efectivament no cal entrar com a root.
Recordar que per entrar com a root he de regenerar el password:
$ docker logs mysql_m02bd 2>&1 | grep GENERATED [Entrypoint] GENERATED ROOT PASSWORD: qr,D?B40&@;UJ9l@/73iz9D4uPc+Zhx4
$ docker exec -it mysql_m02bd mysql -uroot -p ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; mysql> exit
Però això no és necessari, doncs ja puc entrar amb alumne directament.
Ara ja puc executar el meu contenidor:
$ docker exec -it mysql_m02bd mysql -ualumne -pkeiL2lai mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | HR | | bikeshop | | classicmodels | | empresa | | englishresources | | langtrainer | | municipis | | mysql | | northwind | | performance_schema | | sakila | | sys | | vestuari | +--------------------+ mysql> use HR mysql> show tables;
I també puc entrar directament a la consola:
$ docker exec -it mysql_m02bd /bin/bash bash-4.4#
$ 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", ...
Pugem al dockerhub
I ara la pujo al dockerhub
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_m02bd 5.0 e443b1ee1003 6 minutes ago 462MB $ docker tag e443b1ee1003 joanillo/mysql_m02bd:5.0 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joanillo/mysql_m02bd 5.0 e443b1ee1003 7 minutes ago 462MB joan/mysql_m02bd 5.0 e443b1ee1003 7 minutes ago 462MB
Fixar-se que tenen el mateix IMAGE ID: és la mateixa
$ docker push joanillo/mysql_m02bd:5.0 ... 9aa50f4d6dcc: Pushed 04fcfc435802: Pushed 8178e842e73e: Mounted from library/oraclelinux 5.0: digest: sha256:2b48d332cece8ba8d2e256537427c3d26d18c28dc6732913032a57d5df9bde03 size: 4492
Baixar el contenidor del dockerhub
Ara vull esborrar-la en local i baixar-la del dockerhub per comprovar que funciona:
$ docker rm -f fbb93c6123d0 $ docker rmi -f e443b1ee1003
$ 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. s'ha d'esperar que acabi. Compte! perquè si hi hagués algun error en un script petaria tot...
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
També és interessant comprovar els recursos de la meva màquina que consumeix el contenidor que està engegat: (ho podem comparar amb la càrrega de tenir funcionant una màquina virtual)
$ 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
mysql-workbench
I ara el mysql-workbench
hostname: 172.17.0.2 Port: 3306 username: alumne password: keiL2lai default schema: municipis
Funciona correctament.
Accents a la consola i dins del mysql
En el dockerfile:
#ENV LANG en_US.UTF-8 ENV LANG C.UTF-8 # millor
Una altra possibilitat és dins del docker fer:
bash-4.4# LANG=C.UTF-8
o bé quan executo la comanda del docker:
$ docker exec -it -e LANG=C.UTF-8 mysql_m02bd /bin/bash
El curiós del cas és que amb en_US.UTF8 (' ca_ES.UTF8) encara que es veuen els accents al fer una select, no puc posar els accents quan escrir. En canvi amb C.UTF8 sí que funciona bé. C significa computer.
Linux. Descarregar el docker mysql_municipis_empresa:3.0.Consola
Recordatori per esborrar
Si vull provar un Docker que és meu, primer l'hauré d'esborrar.
Per eliminar el docker:
$ docker ps CONTAINER ID 15bbfce19f95 $ docker rm -f 15bbfce19f95
Per eliminar la imatge:
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_municipis_empresa_v3 3.0 6a054a07d3cc 17 minutes ago 406MB $ docker rmi -f joanillo/mysql_municipis_empresa:3.0 Untagged: joanillo/mysql_municipis_empresa:3.0 Deleted: sha256:6a054a07d3ccbd7c8122cee0d6d04efc0359d465f0c7d344aa82029cecdc1d7f Deleted: sha256:4452f57ec65993c48646c7b4dec8049fa81b7740d3713e4fc674bd9d22e28626 ... $ docker rmi -f joan/mysql_municipis_empresa:3.0 Untagged: joan/mysql_municipis_empresa:3.0 Deleted: sha256:16937d3adcadfaae2ff9756ef94ecf92992d5a9517a30f335151d76e363ba977 Deleted: sha256:313c70d3e2da1c23f9aa3bc162b0a7506fce036c50c89d809957f0d9e5567087 Deleted: sha256:51336e21278a2a593c6931540cde82a17ab23a67fd1dea60f30f738aa5578667 ...
Descàrrega de dockerhub
$ docker pull joanillo/mysql_municipis_empresa:3.0 ... Status: Downloaded newer image for joanillo/mysql_municipis_empresa:3.0
Ja podem arrencar-lo i executar-lo:
$ docker run --name=mysql_municipis_empresa_v3 -d joanillo/mysql_municipis_empresa:3.0 9278b2777d9ce8754f03858bc4f4f2705a8982eebddd9bf4c86daa953646c98c $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9278b2777d9c joanillo/mysql_municipis_empresa:3.0 "/entrypoint_v3.sh m…" 6 seconds ago Up 5 seconds (health: starting) 3306/tcp, 33060-33061/tcp mysql_municipis_empresa_v3
I ara podem executar-lo:
$ docker exec -it mysql_municipis_empresa_v3 mysql -ualumne -pkeiL2lai empresa
Funciona correctament el docker que m'he descarregat de dockerhub.
Windows. Descarregar el docker mysql_municipis_empresa:3.0.Consola
He de tenir el Docker Desktop arrencat (que s'havia instal·lat prèviament):
$ docker pull joanillo/mysql_municipis_empresa:3.0 ... Status: Downloaded newer image for joanillo/mysql_municipis_empresa:3.0
I ara ja m'apareix en el Docker Desktop
Sobre el contenidor, Run, i selecciono CLI (command line interface, que és la consola)
sh-4.2# sh-4.2# mysql -h localhost -u alumne -pkeiL2lai municipis mysql> select count(*) from municipis; 8132 mysql> exit sh-4.2# exit
Funciona correctament en mode consola.
Linux. mysql-workbench
Instal·lació mysql-workbench-community
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
Ja funciona
Execució contra Docker
Veure la versió 4, que està preparada.
La clau està en què necessito l'usuari alumne@%, que és el que em permet connexions fora de localhost:
CREATE USER 'alumne'@'%' IDENTIFIED BY 'keiL2lai';
La creació d'aquest usuari no s'ha de fer manualment, sinó que es fa en els scripts del docker.
Windows. mysql-workbench
Instal·lació mysql-workbench
Descarrego:
- mysql-workbench-community-8.0.27-winx64.exe
Necessita Visual C++ 2019 Redistributable package Descarrego i instal·lo:
- VC_redist.x64.exe
Execució contra Docker
Veure la versió 4, que està preparada.
La clau està en què necessito l'usuari alumne@%, que és el que em permet connexions fora de localhost:
CREATE USER 'alumne'@'%' IDENTIFIED BY 'keiL2lai';
La creació d'aquest usuari no s'ha de fer manualment, sinó que es fa en els scripts del docker.
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
Usage with external server and arbitrary server
Sí sé que la meva adreça IP del contenidor del mysql és: "IPAddress": "172.17.0.2", tinc també aquestes dues maneres de connectar-me:
docker run --name myadmin -d -e PMA_HOST=172.17.0.2 -p 8080:80 phpmyadmin/phpmyadmin docker run --name myadmin -d -e PMA_ARBITRARY=1 -p 8080:80 phpmyadmin/phpmyadmin
En aques segon cas, en el phpMyAdmin surt la casella del servidor, i puc posar la IP del contenidor de mysql.
Connectar al mysql de la màquina local
Si vull connectar el meu phpMyAdmin (docker) en el meu mysql local (sense contenidor), el que funciona és:
$ docker run --rm --name pma-socket -p 8080:80 -e PMA_SOCKET=/run/mysqld/mysqld.sock -v /run/mysqld/mysqld.sock:/run/mysqld/mysqld.sock phpmyadmin/phpmyadmin
i ara veig les bases de dades locals
Docker compose
Ara ja van per la versió 2, però de moment provem la versió 1.29 (que és de fa pocs mesos)
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose $ docker-compose --version docker-compose version 1.29.2, build 5becea4c
L'avantatge de docker-compose és que puc tenir fitxers de configuració yml que em facilitin la feina de configuració dels meus dockers. Per exemple, un cas pràctic, tenim el docker del mysql (amb 10 bases de dades) i el docker del phpMyAdmin. Puc tenir un fitxer de configuració que arrenqui els dos dockers al mateix temps.
script docker-compose-mysql-phpmyadmin_v5.yml:
version: '3'
services:
mysql_m02bd:
image: joanillo/mysql_m02bd:5.0
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=alumne
- MYSQL_PASSWORD=keiL2lai
volumes:
- mysql_data:/var/lib/mysql
myadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8080:80
environment:
- PMA_HOST=mysql_m02bd
depends_on:
- mysql_m02bd
volumes:
mysql_data:
el renombro a docker-compose.yml I ja puc arrencar els dos dockers amb una comanda senzilla:
$ docker-compose up ... mysql_m02bd_1 | 2021-11-18T12:31:06.706874Z 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.
i ja puc entrar amb alumne/keiL2lai
La primera vegada triga més, evidentment. Però les properes vegades, fent senzillament docker-compose up ja tinc els meus dos dockers funcionant amb 2 segons.
creat per Joan Quintana Compte, novembre 2021
