Bagaimana untuk memasang dan menjalankan mysql pada docker

王林
Lepaskan: 2023-05-30 11:58:06
ke hadapan
2009 orang telah melayarinya

ps: Persekitaran percubaan ialah: ubuntu 14.04, 64-bit

1 Dapatkan imej mysql

daripada hab docker. gudang Dapatkan imej mysql

sudo docker pull mysql

Lihat imej

sudo docker images

mysql latest 18f13d72f7f0 2 weeks ago 383.4 mb
Salin selepas log masuk

2. Jalankan bekas mysql

Arahan untuk menjalankan instance mysql adalah seperti berikut:

Salin kod Kod tersebut adalah seperti berikut:

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

<6> 5B6BF6F629BFE46B4C8786B555DB1947680138B2DE1F268F310A15CED7247a

maksud di atas

: jalankan bekas

-Nama Nama

-p 3306: 3306 ditunjukkan dalam ini Nombor port yang dipetakan ke mesin tempatan menggunakan port 3306 (yang kedua) dalam bekas juga adalah 3306 (yang pertama)
-d bermaksud berjalan menggunakan proses daemon, iaitu perkhidmatan hang di latar belakang


Lihat status bekas yang sedang dijalankan:

Salin kod Kod adalah seperti berikut:

sudo docker ps

arahan imej id bekas mencipta port status names5b6bf6f629bf

mysql "docker -entrypoint.sh" 32 jam yang lalu sehingga 5 jam 0.0.0.0:3306->3306/tcp first-mysql

<🎜 pangkalan data mysql, saya perlu memasang mysql-client pada mesin saya.

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

Di bawah kami menggunakan arahan mysql untuk mengakses pelayan Kata laluan ialah 123456 sebagai ditunjukkan sebentar tadi. 192.168.95.4 ialah IP mesin saya, 3306 ialah port yang diduduki oleh mesin fizikal ini seperti yang ditunjukkan tadi (bukan port dalam docker) sudo apt-get install mysql-client-core-5.6<br/>

mysql -h192.168.95.4 -p3306 -uroot -p123456 akses Hasilnya adalah seperti berikut:

mysql> show databases;

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

4 rows in set (0.00 sec)
Salin selepas log masuk

3 Jalankan instance mysql kedua


Sebab mengapa docker digunakan berbanding dengan mesin maya ialah. bahawa ia menggunakan sangat sedikit sumber, boleh "membuka" banyak persekitaran terpencil, jadi kami terus menjalankan contoh mysql kedua, menggunakan imej sebelumnya bernama second-mysql.

Salin kod Kodnya adalah seperti berikut:

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

mysql4f7f48b 4c3 f83ee354157328049d7d0

f5523661docker: respons ralat daripada daemon: pemacu gagal memprogramkan kesambungan luaran pada endpoint second-mysql (33aa29d891a1cb540de250bcbbbe9a0a41cd98f61a4e9f129a2ad5db69da49.0.3: bind sudah 684.0.3: sudah gagal cated.

Untuk mengesahkan bahawa yang pertama adalah nombor port tempatan , port 3306 masih digunakan, maka penciptaan adalah seperti yang ditunjukkan di atas Ralat telah berlaku, tetapi id kontena telah dihasilkan Apabila kita mengubah suai port, ralat akan dilaporkan kerana nama bercanggah, iaitu penciptaan yang gagal akan menduduki Nama ini:


Salin kod Kod adalah seperti berikut:

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

mysqldocker: respons ralat daripada daemon: konflik nama "/second-mysql" sudah digunakan oleh bekas 2de4ddb5bfb9b9434af8e72368631e7f4c3f83ee354157328049d7d60f5523d7db5bfb9b9434af8e72368631e7f4c3f83ee354157328049d7d60f5523 (atau boleh keluarkan semula) guna semula nama tu. .

untuk Sahkan bahawa bekas mysql kedua masih dalam proses docker Kami menggunakan perintah ps -a bekerja selama 34 minit, dan mysql kedua baru sahaja dibuat.

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
Salin selepas log masuk

Kami menggunakan arahan rm untuk memadamkan bekas ini, seperti yang ditunjukkan dalam arahan berikut:

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
Salin selepas log masuk

Tetapkan semula bekas mysql kedua, menduduki port 3307 mesin fizikal:

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
Salin selepas log masuk

Seperti yang ditunjukkan dalam rajah di atas, kedua-dua kejadian berjalan seperti biasa Untuk mengakses bekas kedua, kami menentukan port 3307 untuk log masuk ke klien mysql.

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.
Salin selepas log masuk

Ujian 4.jdbc (maven & spring boot)

Contoh sumber: Gunakan java spring untuk mengendalikan pangkalan data, gunakan Contoh pada tapak web rasmi spring menggunakan jdbctemplate, kaedah SQL telanjang, tanpa menggunakan hibernate atau myibatis.

Contoh pada tapak web rasmi spring menggunakan h2, pangkalan data memori terbina dalam, tanpa masalah menjana konfigurasi fail sebagai objek,

Untuk mempraktikkan yaml dan bukannya xml, saya menggunakan konfigurasi jdbc mysql berikut, application.yaml.

### 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
Salin selepas log masuk

Saya menghabiskan masa yang lama mencari suntikan pergantungan automatik sebagai objek jdbctemplate, tetapi saya tidak mendapatnya, ia adalah seperti berikut. Begitu juga, saya mula-mula menjana sumber data sendiri, kemudian mencipta objek jdbctemlate baru, dan akhirnya menggunakan jdbctemplate untuk mengendalikan pangkalan data Ini sangat jelek, saya harap anda boleh memberi saya nasihat.

@bean
@configurationproperties(prefix = "spring.datasource.dbcp")
public datasource mysqlsource() { 
  return datasourcebuilder.create().build();
}
@bean
public jdbctemplate mysqljdbctemplate() { 
  return new jdbctemplate(mysqlsource());
}
Salin selepas log masuk

Berikut adalah beberapa operasi kasar pada pangkalan data, menggunakan pengaturcaraan berfungsi jdk8:

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()));
Salin selepas log masuk

Yang berikut disahkan pada klien mysql:

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)
Salin selepas log masuk

5 . Beberapa perangkap yang dihadapi

konfigurasi maven
menggunakan ungkapan lamda jdk8 dan java.version mesti dikonfigurasikan dalam maven

rreee

Mulakan semula perkhidmatan docker

Apabila perkhidmatan docker hang, bekas itu juga hang dan tidak dimulakan semula Anda harus membawa parameter --restart=always semasa menjalankan bekas

Atas ialah kandungan terperinci Bagaimana untuk memasang dan menjalankan mysql pada docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan