Heim  >  Artikel  >  Datenbank  >  So installieren und führen Sie MySQL auf Docker aus

So installieren und führen Sie MySQL auf Docker aus

王林
王林nach vorne
2023-05-30 11:58:062010Durchsuche

ps: Die experimentelle Umgebung ist: Ubuntu 14.04, 64-Bit

1. Holen Sie sich das MySQL-Image
#🎜🎜 ##🎜 🎜#Das MySQL-Image aus dem Docker-Hub-Warehouse abrufen

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 -p123456Bild ansehen#🎜 🎜#

mysql> show databases;

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

4 rows in set (0.00 sec)

2. Führen Sie einen MySQL-Container aus

Der Befehl zum Ausführen einer MySQL-Instanz lautet wie folgt:
#🎜 🎜#Code kopieren Der Code lautet wie folgt:

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

5b6bf6f629bfe46b4c 8786b555d8db1947 680138b2de1f268f310a15ced7247a

Der obige Befehl Die Bedeutung jedes Parameters:

run Führen Sie einen Container aus

--name gefolgt vom Namen des Bildes
-p 3306 :3306 bedeutet, dass in diesem Container Port 3306 (der zweite) verwendet wird. Die dem lokalen Computer zugeordnete Portnummer ist ebenfalls 3306 (der erste).

-d bedeutet, dass ein Daemon-Prozess verwendet wird, d. h. der Dienst hängt im Hintergrund

Den aktuell ausgeführten Container anzeigen Status:

Code kopieren Der Code lautet wie folgt:

sudo docker ps# ?? mysql

Um auf die MySQL-Datenbank zuzugreifen, muss ich einen MySQL-Client auf meinem Computer installieren.

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

Nachfolgend verwenden wir den MySQL-Befehl, um auf den Server zuzugreifen. Das Passwort lautet wie gerade angezeigt: 123456, 192.168.95.4 ist die IP meines Computers, 3306 ist der von diesem physischen Computer belegte Port (nicht der Port im Docker)

mysql -h192 .168.95.4 -p3306 -uroot -p123456

Die Ergebnisse des Zugriffs sind wie folgt:

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

#🎜 🎜#3. Führen Sie die zweite MySQL-Instanz aus

Der Grund für die Verwendung von Docker im Vergleich zu einer virtuellen Maschine ist, dass es nur sehr wenige Ressourcen verbraucht und eine „öffnen“ kann Viele isolierte Umgebungen, daher führen wir die Ausführung weiterhin aus. Die zweite MySQL-Instanz verwendet weiterhin das vorherige Image und heißt Second-MySQL.

Code kopieren Der Code lautet wie folgt:

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

#🎜 🎜#mysql2de4ddb5bf b9b9434af8e72368631e7f4c3f83ee354157328049d7d0

f5523661docker: Fehlerantwort vom Daemon: Fehler beim Programmieren der externen Konnektivität des Treibers auf Endpunkt Second-MySQL. (33aa29d891a1cb540de 250bcbbbe9a0a41cd98f61a4e9f129a2ad5db69da4984): Bindung für 0.0.0.0:3306 bereits fehlgeschlagen: Port ist zugewiesen.

#🎜🎜 #Um zu überprüfen, ob die Eins die Portnummer des lokalen Computers ist und weiterhin Port 3306 verwendet wird, ist ein Fehler aufgetreten, aber es wurde eine Container-ID generiert Es wird ein Fehler gemeldet, weil die Namen in Konflikt stehen, das heißt, diese fehlgeschlagene Erstellung wird diesen Namen belegen:

Code kopieren Der Code lautet wie folgt:

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

mysqldocker: Fehlerantwort vom Daemon: Konflikt. Der Name „/second-mysql“ wird bereits vom Container 2de4ddb5bfb9b9434af8e72368631e7f4c3 verwendet f83ee354157328049d7d0f5523661.#🎜 🎜 #Sie müssen diesen Container entfernen (oder umbenennen), um diesen Namen wiederverwenden zu können. Ein Befehl. Wir können beobachten, dass der Status von „first-mysql“ „up 34 seconds“ ist, was darauf hinweist, dass es seit 34 Minuten funktioniert und „second-mysql“ gerade erstellt wurde.

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

Wir verwenden den Befehl rm, um diesen Container zu löschen, wie im folgenden Befehl gezeigt:

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

Stellen Sie den zweiten MySQL-Container neu her und belegen Sie den 3307-Port des physische Maschine: #🎜🎜 #

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.

Wie im Bild oben gezeigt, laufen beide Instanzen normal. Um auf den zweiten Container zuzugreifen, geben wir Port 3307 an, um uns beim MySQL-Client anzumelden.

### 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

4.jdbc-Test (Maven & Spring Boot)


Beispielquelle:

#🎜🎜# Verwenden Sie Java Spring, um die Datenbank zu betreiben. Verwenden Sie dazu das Beispiel auf der offiziellen Spring-Website und verwenden Sie jdbctemplate, eine reine SQL-Methode, ohne Hibernate oder Myibatis zu verwenden. Das Beispiel auf der offiziellen Spring-Website verwendet h2, a Integrierte Speicherdatenbank. Es gibt keine Probleme beim Generieren von Konfigurationsdateien als Objekte.
@bean
@configurationproperties(prefix = "spring.datasource.dbcp")
public datasource mysqlsource() { 
  return datasourcebuilder.create().build();
}
@bean
public jdbctemplate mysqljdbctemplate() { 
  return new jdbctemplate(mysqlsource());
}
#🎜🎜#Es hat lange gedauert, bis ich herausgefunden habe, dass es sich bei der Abhängigkeitsinjektion um ein jdbctemplate-Objekt handelt. Ich habe die Datenquelle einfach wie folgt generiert, dann ein neues jdbctemlate-Objekt erstellt und schließlich jdbctemplate verwendet Die Datenbank zu betreiben ist sehr hässlich. Ich hoffe, Sie können mir einen Rat geben. #🎜🎜#
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()));
#🎜🎜#Das Folgende sind einige grobe Operationen in der Datenbank, die die funktionale Programmierung von jdk8 verwenden: #🎜🎜#
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)
#🎜🎜#Das Folgende wird auf dem MySQL-Client überprüft: #🎜🎜#
<properties> 
<java.version>1.8</java.version>
</properties>
# 🎜 5. Einige Fallstricke sind aufgetreten muss in Maven konfiguriert werden, Sie sollten den Parameter --restart=always mitbringen, wenn Sie den Container ausführen #🎜🎜#

Das obige ist der detaillierte Inhalt vonSo installieren und führen Sie MySQL auf Docker aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen