Maison >base de données >tutoriel mysql >Comment installer et exécuter MySQL sur Docker
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
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
mysql> show databases; +--------------------+ | database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)
2. Exécutez un conteneur MySQL
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 backgroundAfficher l'état du conteneur en cours d'exécution :
sudo apt-get install mysql-client-core-5.6
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-mysql3. 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
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
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🎜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🎜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 'help;' or '\h' for help. type '\c' to clear the current input statement.🎜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🎜🎜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()); }🎜 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'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 = 'josh':"); 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()));🎜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)🎜Ce qui suit est vérifié sur le client mysql : 🎜
<properties> <java.version>1.8</java.version> </properties>🎜🎜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!