Diferència entre revisions de la pàgina «Docker: instància de mysql server»
(Es crea la pàgina amb «__TOC__ =Introducció= Les imatges oficials de mysql: *https://hub.docker.com/r/mysql/mysql-server/ <pre> $ sudo docker pull mysql/mysql-server Using default tag: lat...».) |
m |
||
| (Hi ha una revisió intermèdia del mateix usuari que no es mostren) | |||
| Línia 32: | Línia 32: | ||
mysql> show databases; | mysql> show databases; | ||
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. | ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. | ||
| + | |||
| + | mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; | ||
</pre> | </pre> | ||
Aquesta és una manera ràpid i fàcil de connectar-se a mysql amb un docker | Aquesta és una manera ràpid i fàcil de connectar-se a mysql amb un docker | ||
| Línia 152: | Línia 154: | ||
(TBD) | (TBD) | ||
| + | =problema Transaction check error= | ||
| + | Solució: he d'agafar la última versió del Dockerfile | ||
| + | *https://hub.docker.com/r/mysql/mysql-server/ | ||
| + | |||
| + | Source of this image: The Image repository for the mysql/mysql-server container: | ||
| + | *https://github.com/mysql/mysql-docker | ||
| + | |||
| + | mysql-server > 8.0: | ||
| + | *https://github.com/mysql/mysql-docker/tree/main/mysql-server/8.0 | ||
| + | I aquí és on trobo el Dockerfile correcte: | ||
| + | <pre> | ||
| + | Dockerfile (3 days ago) | ||
| + | docker-entrypoint.sh | ||
| + | healthcheck.sh | ||
| + | prepare-image.sh | ||
| + | </pre> | ||
| + | Partint d'aquest Dockerfile no tindré el problema de Transaction check error: | ||
| + | <pre> | ||
| + | Transaction check error: | ||
| + | file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql conflicts between attempted installs | ||
| + | </pre> | ||
| + | Abans agafava el Dockerfile de | ||
| + | *https://github.com/mysql/mysql-docker/tree/mysql-server/8.0 | ||
| + | que té mesos d'antiguitat | ||
| + | |||
| + | M'anava bé, fins que en un moment donat, quan estava fent proves per l'assignatura de DAM-M02, em donava l'error: | ||
| + | <pre> | ||
| + | ... | ||
| + | Total size: 34 k | ||
| + | Installed size: 34 k | ||
| + | Downloading packages: | ||
| + | Running transaction check | ||
| + | Running transaction test | ||
| + | |||
| + | |||
| + | Transaction check error: | ||
| + | file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql conflicts between attempted installs of mysql-community-minimal-release-el7-1.noarch and mysql80-community-release-el7-3.noarch | ||
| + | </pre> | ||
| + | |||
{{Autor}}, juliol 2021 | {{Autor}}, juliol 2021 | ||
Revisió de 10:42, 14 nov 2021
Introducció
Les imatges oficials de mysql:
$ sudo docker pull mysql/mysql-server Using default tag: latest
L'arrenquem i l'executem:
$ sudo docker run --name=mysql1 -d mysql/mysql-server:latest $ sudo docker exec -t -i b24aaf2abddc /bin/bash $ sudo 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 $ sudo docker exec -t -i 132c5cefe79f /bin/bash bash-4.4 # exit
per saber el password:
$ sudo 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:
$ sudo 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';
Aquesta és una manera ràpid i fàcil de connectar-se a mysql amb un docker
Per eliminar-lo:
Primer l'apaguem:
$ sudo docker kill 132c5cefe79f
després l'eliminem
$ sudo docker rmi mysql/mysql-server:latest -f $ sudo docker images -> ja no hi és
Per tenir un docker amb el mysql he fet un pull.
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 de https://github.com/mysql/mysql-docker/blob/mysql-server/8.0/Dockerfile i el copio en local i el renombro a Dockerfile2, i a partir d'aquest fitxer puc muntar el meu docker:
$ sudo docker build -f Dockerfile2 . $ sudo docker run --name=mysql1 -d mysql/mysql-server:latest
Es crea bé, però no té nom (no es crea bé, que no tingui nom vol dir que hi ha hagut un error. Sempre ha d'acabar amb successfully):
$ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 740e3aa2ac62 26 seconds ago 406MB
eliminem:
$ sudo docker rmi 740e3aa2ac62 -f
per posar un nom al meu docker:
-t: tag an image $ sudo docker build -t joan/mysql_prova:1.0 -f ./Dockerfile2 . $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE joan/mysql_prova 1.0 9f04fb2e652f 5 seconds ago 132MB
si no posa un nom i surt un <none>, significa que hi ha hagut un error en el procés.
L'error ve de què s'espera que els fitxers docker-entrypoint.sh i healthcheck.sh estiguin en el directori local, i per tant faig un wget per descarregar-los:
$ wget https://raw.githubusercontent.com/mysql/mysql-docker/mysql-server/8.0/healthcheck.sh
Finalment:
$ sudo docker build -t joan/mysql_prova:1.0 -f ./Dockerfile2 . $ sudo docker exec -t -i 8c7535c45e10 /bin/bash
ara ja ha funcionat, i puc fer un run:
$ sudo docker run --name=mysql1 -d joan/mysql_prova:1.0
Per netejar: https://docs.docker.com/config/pruning/
el password: abans de fer el exec, he de posar el password:
$ sudo docker logs mysql1 2>&1 | grep GENERATED [Entrypoint] GENERATED ROOT PASSWORD: ZuxazYPiw#as@cakKYrZEchoGJY $ sudo docker exec -it mysql1 mysql -uroot -p mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; mysql> \! ls /etc/dades_municipis_mysql.sql /etc/dades_municipis_mysql.sql Finalment: mysql> \. /etc/dades_municipis_mysql.sql
He carregat la base de dades de municipis.
I aquesta és la manera com puc fer més funcional el docker amb mysql
El fitxer Dockerfile_mysql queda de la següent manera:
FROM oraclelinux:7-slim
ARG MYSQL_SERVER_PACKAGE=mysql-community-server-minimal-8.0.23
ARG MYSQL_SHELL_PACKAGE=mysql-shell-8.0.22
# Install server
RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release-el7.rpm \
https://repo.mysql.com/mysql-community-release-el7.rpm \
&& yum-config-manager --enable mysql80-server-minimal \
&& yum install -y \
$MYSQL_SERVER_PACKAGE \
$MYSQL_SHELL_PACKAGE \
libpwquality \
&& yum clean all \
&& mkdir /docker-entrypoint-initdb.d
VOLUME /var/lib/mysql
#s'espera que aquests dos fitxers estiguin presents en el directori local
COPY ./docker-entrypoint.sh /entrypoint.sh
COPY ./healthcheck.sh /healthcheck.sh
RUN chmod 777 /entrypoint.sh
RUN chmod 777 /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh
EXPOSE 3306 33060 33061
CMD ["mysqld"]
COPY ./municipis/dades_municipis_mysql.sql /etc/dades_municipis_mysql.sql
Ara el següent pas seria que en comptes de carregar manualment la bd de municipis, en el procés d'instal·lació ja es carregués aquesta bd i totes les bd que necessito.
(TBD)
problema Transaction check error
Solució: he d'agafar la última versió del Dockerfile
Source of this image: The Image repository for the mysql/mysql-server container:
mysql-server > 8.0:
I aquí és on trobo el Dockerfile correcte:
Dockerfile (3 days ago) docker-entrypoint.sh healthcheck.sh prepare-image.sh
Partint d'aquest Dockerfile no tindré el problema de Transaction check error:
Transaction check error: file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql conflicts between attempted installs
Abans agafava el Dockerfile de
que té mesos d'antiguitat
M'anava bé, fins que en un moment donat, quan estava fent proves per l'assignatura de DAM-M02, em donava l'error:
... Total size: 34 k Installed size: 34 k Downloading packages: Running transaction check Running transaction test Transaction check error: file /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql conflicts between attempted installs of mysql-community-minimal-release-el7-1.noarch and mysql80-community-release-el7-3.noarch
creat per Joan Quintana Compte, juliol 2021