docker使用mysql安全_技术分享 | 使用 Docker 安装 MySQL

在工作中,我经常需要安装特定版本的 MySQL、MariaDB 或 Percona 来运行一些实验,例如:检查版本差异或是提供测试说明。此博客系列将阐述如何使用 Docker 安装 MySQL、MariaDB 或 Percona。这篇文章是第一篇,重点是 MySQL。

Docker 的优点在于它可以非常轻松地安装最新的 MySQL 版本以及任何其他版本,但往往与典型的生产安装不匹配。当您需要简单的单个实例时,Docker 的确很方便。如果您正在研究一些与复制相关的行为,那么则不一定适合。

这些说明皆在快速、轻松地运行测试实例的情况下。不适用于生产部署。以下内容所假定已安装 Docker。

首先,您应该知道只有两个“官方” MySQL Docker 存储库。其中之一由 Docker 团队维护,可通过一个简单的 docker 命令 mysql:latest 运行起来。另一个由 Oracle 的 MySQL 团队维护,语法:

docker run mysql / mysql-server:latest

说明:语法中的 latest 是 tag 值,表示默认安装库中的最新版本

在以下示例中,我们将使用 MySQL 团队的 Docker 映像,尽管 Docker 团队的工作方式与此类似。

使用 Docker 安装最新版本的 MySQL

docker run --name mysql-latest \

-p 3306:3306 -p 33060:33060 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:latest

这将启动最新版本的 MySQL 实例,可以使用指定的 root 密码从任何地方远程访问该实例。这很容易测试,但不是好的安全习惯(这就是为什么它不是默认值)的原因。

连接到 MySQL Server Docker 容器

使用 Docker 安装意味着您无法直接在主机上获得任何工具,实用程序或库,因此您可以单独安装它们,从远程主机访问创建的实例,或使用 Docker 映像附带的命令行。

通过 Docker 启动 MySQL 命令行客户端:

docker exec -it mysql-latest mysql -uroot -pstrongpassword

使用 Docker 启动 MySQL Shell:

docker exec -it mysql-latest mysqlsh -uroot -pstrongpassword

在 Docker 容器中管理 MySQL 服务器

当您要停止 MySQL Server Docker 容器运行时:

docker stop mysql-latest

如果要重新启动已停止的 MySQL Docker 容器,则不应尝试使用 docker run 重新启动它。相反,您应该使用:

docker start mysql-latest

如果出现错误,例如,如果容器未启动,则可以使用以下命令访问其日志:

docker logs mysql-latest

如果要从头开始重新创建一个新的 Docker 容器,可以运行:

docker stop mysql-latest

docker rm mysql-latest

之后再次执行 docker run 命令。

将命令行选项传给 Docker 容器中的 MySQL Server

如果要将某些命令行选项传给 MySQL Server,可以采用以下方式:

docker run --name mysql-latest \

-p 3306:3306 -p 33060:33060 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:latest \

--innodb_buffer_pool_size=256M \

--innodb_flush_method=O_DIRECT \

在 Docker 中运行指定版本的 MySQL 服务器

如果想在 Docker 容器中运行某版本的 MySQL,这很简单。您可以使用 Docker Image Tag 选择想要的版本,并将 Name 更改为其他名称,以避免名称冲突:

docker run --name mysql-8.0.17 \

-p 3306:3306 -p 33060:33060 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:8.0.17

这将在 Docker 容器中启动 MySQL 8.0.17。

docker run --name mysql-5.7 \

-p 3306:3306 -p 33060:33060 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:5.7

这将在 Docker 中启动最新的 MySQL 5.7。

在 Docker 中同时运行多版本的 MySQL 服务器

同时在 Docker 中运行多版本的 MySQL ,潜在问题是 TCP 端口冲突。如果您不从外部访问 Docker 容器,而只运行同一容器中包含的程序,则可以删除端口映射(-p option),然后可以运行多个容器:

docker run --name mysql-latest \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:latest

docker run --name mysql-8.0.17 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:8.0.17

在更常见的情况下,当您需要从外部访问 Docker 容器时,您将需要将其映射为使用不同的外部端口名称。 例如,要在端口 3306/33060 和 MySQL 8.0.17 在 3307/33070 处启动最新的 MySQL 8,我们可以使用:

docker run --name mysql-latest \

-p 3306:3306 -p 33060:33060 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:latest

docker run --name mysql-8.0.17 \

-p 3307:3306 -p 33070:33060 \

-e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD='strongpassword' \

-d mysql/mysql-server:8.0.17

如果要在 Docker 上使用 MySQL 进行更复杂的事请,那还有很多事情要考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一个开放源代码的虚拟化平台,能够以容器的形式打包和分发应用程序。MySQL是一种流行的开源关系型数据库管理系统。使用Docker部署MySQL可以极大简化安装和配置的过程,并且能够实现数据的持久化。 首先,我们需要在Docker上搜索并选择适合的MySQL镜像。可以通过运行`docker search mysql`命令来查找可用的MySQL镜像。选择合适的镜像后,可以通过`docker pull <镜像名称>`来下载镜像,例如`docker pull mysql:latest`。 下载完成后,我们可以运行以下命令来创建一个MySQL容器: ``` docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your_password -d mysql:latest ``` 这个命令将会创建一个名为mysql的容器,并将MySQL服务的默认端口3306映射到宿主机的3306端口。同样,我们可以设置一个root密码,让MySQL服务有一个基本的访问控制。 这样,MySQL容器就成功运行起来了。我们可以通过`docker ps`命令来查看正在运行的容器。接下来,我们可以使用MySQL客户端连接到该容器。可以通过以下命令登录到MySQL容器内部的MySQL服务: ``` docker exec -it mysql mysql -uroot -p ``` 然后,我们可以在MySQL容器内部使用标准的MySQL命令来管理和操作数据库。 要实现数据的持久化,我们可以将MySQL容器内部的数据目录和宿主机的目录进行挂载。可以使用`-v`参数来指定目录的挂载点。例如: ``` docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=your_password -v /path/to/mysql/data:/var/lib/mysql -d mysql:latest ``` 这将会将MySQL容器内部的`/var/lib/mysql`目录与宿主机上的`/path/to/mysql/data`目录进行挂载,从而实现数据的持久化。 通过以上步骤,我们可以使用Docker部署MySQL,并且实现数据的持久化。这样,我们可以方便地在不同的环境之间快速部署和迁移MySQL数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值