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 (→Introducció) |
||
| 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 | ||
Revisió del 18:52, 29 jul 2021
Contingut
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)
creat per Joan Quintana Compte, juliol 2021