在docker上安装运行mysql实例


本文整理自网络,侵删。

希望在自己的机器模拟一下公司中微服务的构建,使用docker部署了mysql实例,使用spring boot进行了CRUD(增删改查)操作进行了一下验证,在后面的学习中也可以尝试更多的框架和组件。

ps:实验环境是:ubuntu 14.04, 64位

1.获取mysql镜像

从docker hub的仓库中拉取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

下面我们使用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)

3.运行第二个mysql实例

使用docker相对于虚拟机而言的原因是耗费很少的资源,可以"开辟"非常多的隔离的环境,所以我们继续运行第二个mysql实例,还用之前的镜像,名字为second-mysql。

代码如下:
sudo docker run --name second-mysql -p 3306:3307 -e MYSQL\_ROOT\_PASSWORD=123456 -d

mysql2de4ddb5bfb9b9434af8e72368631e7f4c3f83ee354157328049d7d0
f5523661docker: Error response from daemon: driver failed programming external connectivity on endpoint second-mysql (33aa29d891a1cb540de250bcbbbe9a0a41cd98f61a4e9f129a2ad5db69da4984): Bind for 0.0.0.0:3306 failed: port is already allocated.

为了验证第一个是本机的端口号,就仍然使用了3306这个端口,那么创建如上所示,发生了错误,但是产生了一个容器id,当我们修改端口后还会报错,因为名字冲突了,也即这次失败的创建会占用这个名字:

代码如下:
sudo docker run --name second-mysql -p 3307:3306 -e MYSQL\_ROOT\_PASSWORD=123456 -d

mysqldocker: Error response from daemon: Conflict. The name "/second-mysql" is already in use by container 2de4ddb5bfb9b9434af8e72368631e7f4c3f83ee354157328049d7d0f5523661.
You have to remove (or rename) that container to be able to reuse that name..

为了验证second-mysql这个容器还在docker的进程中,我们使用ps -a这个命令,我们可以观察到first-mysql的状态为Up 34 minutes,说明已经工作了34分钟,而second-mysql只是刚刚创建的。

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

我们用rm命令删除这个容器,如下面命令所示:

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

重新建立second-mysql这个容器,占用物理机的3307端口:

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

如上图所示,两个实例都正常运行了,为了访问第二个容器,我们指定端口3307登录到这个mysql的client。

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.

4.jdbc测试(maven & Spring boot)

阅读剩余部分

相关阅读 >>

mysqlslap mysql压力测试工具 简单教程

mysql中i/o出现错误问题原因及解决方案(附优化建议)

mysql 语法整理介绍

mysql如何导出某个表?

mysql到底支不支持事务嵌套?

mysql 5.7并发复制隐式bug实例分析

介绍mysql复制表的几种方式

深入了解sql注入

mysql如何捷删除大量数据

mysql修改密码的三种方式介绍(代码示例)

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...