Maison > base de données > tutoriel mysql > Comment installer et exécuter MySQL sur Docker

Comment installer et exécuter MySQL sur Docker

王林
Libérer: 2023-05-30 11:58:06
avant
2052 Les gens l'ont consulté

ps : L'environnement expérimental est : Ubuntu 14.04, 64 bits

1 Obtenez l'image mysql

Extrayez l'image mysql de l'entrepôt du hub docker

sudo docker pull mysql sudo docker pull mysql

查看镜像

sudo docker images

mysql latest 18f13d72f7f0 2 weeks ago 383.4 mb
Copier après la connexion

2.运行一个mysql容器

运行一个mysql实例的命令如下:

复制代码 代码如下:

sudo docker run --name first-mysql -p 3306:3306 -e mysql_root_password=123456 -d mysql

5b6bf6f629bfe46b4c8786b555d8db1947680138b2de1f268f310a15ced7247a

上述命令各个参数含义:

run 运行一个容器
--name 后面是这个镜像的名称
-p 3306:3306 表示在这个容器中使用3306端口(第二个)映射到本机的端口号也为3306(第一个)
-d 表示使用守护进程运行,即服务挂在后台

查看当前运行的容器状态:

复制代码 代码如下:

sudo docker ps

container id image command created status ports names5b6bf6f629bf

mysql "docker-entrypoint.sh" 32 hours ago up 5 hours 0.0.0.0:3306->3306/tcp first-mysql

想要访问mysql数据库,我的机器上需要装一个mysql-client。

sudo apt-get install mysql-client-core-5.6<br/>

下面我们使用mysql命令访问服务器,密码如刚才所示为123456,192.168.95.4为我这台机器的ip, 3306为刚才所示的占用本物理机的端口(不是在docker内部的端口)

mysql -h192.168.95.4 -p3306 -uroot -p123456

Voir l'image

mysql> show databases;

+--------------------+
| database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

4 rows in set (0.00 sec)
Copier après la connexion

2. Exécutez un conteneur MySQL

La commande pour exécuter une instance MySQL est la suivante :

Copiez le code Le code est le suivant :

sudo docker run --name first-mysql -p 3306:3306 -e mysql_root_password=123456 -d mysql

5b6bf6f629bfe46b4c8786b555d8db1947680138b2de1f268f310a15ced7247a


La signification de chaque paramètre de la commande ci-dessus :

run​​ Exécuter un conteneur

--nom suivi du nom de l'image

-p 3306 : 3306 signifie utiliser le port 3306 dans ce conteneur (deuxième) Le numéro de port mappé à la machine locale est également 3306 (le premier)

-d signifie s'exécuter à l'aide d'un processus démon, c'est-à-dire que le service se bloque dans le background

Afficher l'état du conteneur en cours d'exécution :

Copiez le code Le code est le suivant :

sudo docker ps

commande d'image d'identification de conteneur créée statut ports noms5b6bf6f629bf

mysql "docker-entrypoint.sh" 32 il y a 5 heures 0.0.0.0:3306->3306/tcp first-mysql

Vous souhaitez accéder à la base de données MySQL, je dois installer un client MySQL sur ma machine.

sudo apt-get install mysql-client-core-5.6</strong>

Ensuite, nous utilisons la commande mysql pour accéder au serveur. Le mot de passe est 123456 comme indiqué tout à l'heure, et 192.168.95.4 est le mot de passe. IP de ma machine. , 3306 est le port qui occupe cette machine physique comme indiqué tout à l'heure (pas le port à l'intérieur du docker)

mysql -h192.168.95.4 -p3306 -uroot -p123456

Les résultats d'accès sont les suivants :

sudo docker ps -a

container id    image        command         created       status       ports          names
2de4ddb5bfb9    mysql        "docker-entrypoint.sh"  about a minute ago  created                   second-mysql
5b6bf6f629bf    mysql        "docker-entrypoint.sh"  34 minutes ago    up 34 minutes    0.0.0.0:3306->3306/tcp  first-mysql
Copier après la connexion

3. Exécutez la deuxième instance mysql

La raison pour laquelle Docker est utilisé par rapport à une machine virtuelle est qu'il consomme très peu de ressources et peut "ouvrir" de nombreux éléments isolés. environnements, nous continuons donc à exécuter la deuxième instance mysql. Les deux instances mysql utilisent toujours l'image précédente et sont nommées second-mysql.

Copiez le code Le code est le suivant :

sudo docker run --name second-mysql -p 3306:3307 -e mysql_root_password=123456 -d
mysql2de4ddb5bfb9b9434af8e72368631e7f4c3f83ee3541573 2 8049d7d0

f5523661docker : réponse d'erreur du démon : échec de la programmation du pilote externe connectivité sur le point de terminaison deuxième - mysql (33aa29d891a1cb540de250bcbbbe9a0a41cd98f61a4e9f129a2ad5db69da4984) : la liaison pour 0.0.0.0:3306 a échoué : le port est déjà alloué.


Afin de vérifier que le premier est le numéro de port de cette machine, le port 3306 est toujours utilisé, alors créez-le comme indiqué ci-dessus, une erreur s'est produite, mais un identifiant de conteneur est généré lorsque nous modifions le port, une erreur sera signalée car le nom est en conflit, c'est-à-dire que la création échouée occupera ce nom :

Copier le code Le code. est le suivant :

sudo docker run --name second -mysql -p 3307:3306 -e mysql_root_password=123456 -d

mysqldocker : réponse d'erreur du démon : conflit, le nom "/second-mysql" est déjà utilisé. Par conteneur 2DE4DDB5BFB9B9434AF8E72368631E7F4C3F83EE354157328 049d7d0f5523661.

Vous devez supprimer (ou renommer) ce conteneur pour réutiliser ce nom. Nous pouvons observer que l'état de first-mysql est en hausse depuis 34 minutes, indiquant que je travaille depuis 34 minutes et que second-mysql vient d'être créé.

maintain@maintain-dev1:~$ sudo docker rm second-mysql

maintain@maintain-dev1:~$ sudo docker ps -a

container id image command created status ports names
5b6bf6f629bf mysql "docker-entrypoint.sh" 42 minutes ago up 42 minutes 0.0.0.0:3306->3306/tcp first-mysql
Copier après la connexion
🎜Nous utilisons la commande rm pour supprimer ce conteneur, comme indiqué dans la commande suivante : 🎜
sudo docker run --name second-mysql -p 3307:3306 -e mysql\_root\_password=123456 -d mysql

5404fb11f29cba07b991f34056d6b40ed0888aa905a45e637e396d071bd7f331

sudo docker ps

container id    image        command         created       status       ports          names
5404fb11f29c    mysql        "docker-entrypoint.sh"  12 seconds ago   up 11 seconds    0.0.0.0:3307->3306/tcp  second-mysql
5b6bf6f629bf    mysql        "docker-entrypoint.sh"  43 minutes ago   up 43 minutes    0.0.0.0:3306->3306/tcp  first-mysql
Copier après la connexion
🎜Rétablissez le deuxième conteneur mysql, occupant le port 3307 de la machine physique : 🎜
mysql -h192.168.95.4 -p3307 -uroot -p123456

warning: using a password on the command line interface can be insecure.
welcome to the mysql monitor. commands end with ; or \g.
your mysql connection id is 2
server version: 5.7.15 mysql community server (gpl)
copyright (c) 2000, 2016, oracle and/or its affiliates. all rights reserved.
oracle is a registered trademark of oracle corporation and/or itsaffiliates. other names may be trademarks of their respectiveowners.
type &#39;help;&#39; or &#39;\h&#39; for help. type &#39;\c&#39; to clear the current input statement.
Copier après la connexion
🎜Comme le montre l'image ci-dessus , les deux instances fonctionnent normalement, afin d'accéder au deuxième conteneur, nous spécifions le port 3307 pour nous connecter au client mysql. 🎜
### application.yaml
### mysql config
spring:
 datasource:
  dbcp:
   driver-class-name: com.mysql.jdbc.driver
   url: jdbc:mysql://192.168.18.129:3306/test1
   username: root
   password: 123456
Copier après la connexion
🎜🎜Test 4.jdbc (maven & spring boot)🎜🎜🎜🎜Exemple source :🎜🎜Utiliser Java Spring pour faire fonctionner la base de données, en utilisant l'exemple sur le site officiel de Spring, en utilisant jdbctemplate, la méthode SQL nue, sans utiliser hibernate Ou myibatis.🎜🎜L'exemple sur le site officiel de Spring utilise h2, une base de données mémoire intégrée, sans avoir à générer de fichiers de configuration en tant qu'objets 🎜🎜Afin de pratiquer yaml au lieu de xml, la configuration mysql jdbc suivante est. utilisé, application.yaml.🎜
@bean
@configurationproperties(prefix = "spring.datasource.dbcp")
public datasource mysqlsource() { 
  return datasourcebuilder.create().build();
}
@bean
public jdbctemplate mysqljdbctemplate() { 
  return new jdbctemplate(mysqlsource());
}
Copier après la connexion
🎜 Je cherche depuis longtemps à injecter automatiquement des dépendances dans un objet jdbctemplate, mais je n'arrive toujours pas à le comprendre. Je génère simplement la source de données par moi-même comme suit, puis j'en crée une nouvelle. jdbctemlate, et enfin utiliser jdbctemplate pour faire fonctionner la base de données. Cette écriture est très moche, j'espère que vous pourrez me donner quelques conseils une fois. 🎜
jdbctemplate jdbctemplate = mysqljdbctemplate();
jdbctemplate.execute("drop table if exists customers");
jdbctemplate.execute("create table customers(" + "id serial, first_name varchar(255), last_name varchar(255))");
// split up the array of whole names into an array of first/last names
list<object[]> splitupnames = arrays.aslist("john woo", "jeff dean", "josh bloch", "josh long")
 .stream() .map(name -> name.split(" ")) .collect(collectors.tolist());
// use a java 8 stream to print out each tuple of the list
splitupnames.foreach(name -> log.info(string.format("inserting customer record for %s %s", name[0], name[1])));
// uses jdbctemplate&#39;s batchupdate operation to bulk load data
jdbctemplate.batchupdate("insert into customers(first_name, last_name) values (?,?)", splitupnames);
log.info("querying for customer records where first_name = &#39;josh&#39;:");
jdbctemplate.query( 
  "select id, first_name, last_name from customers where first_name = ?", 
  new object[]{"josh"}, (rs, rownum) -> new customer(rs.getlong("id"), rs.getstring("first_name"), rs.getstring("last_name")))
  .foreach(customer -> log.info(customer.tostring()));
Copier après la connexion
🎜Voici quelques opérations grossières sur la base de données, utilisant la programmation fonctionnelle de jdk8 : 🎜
mysql> select * from customers;
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | john    | woo    |
| 2 | jeff    | dean   |
| 3 | josh    | bloch   |
| 4 | josh    | long   |
+----+------------+-----------+

4 rows in set (0.00 sec)
Copier après la connexion
🎜Ce qui suit est vérifié sur le client mysql : 🎜
<properties> 
<java.version>1.8</java.version>
</properties>
Copier après la connexion
🎜🎜5. L'expression lamda de jdk8, java.version doit être configurée dans maven🎜rrreee🎜docker service restart🎜🎜🎜docker service se bloque, le conteneur se bloque également et ne redémarre pas. Il devrait être en cours d'exécution lorsque le conteneur est en cours d'exécution. Apportez le --restart=. toujours paramètre🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal