1、下载 MySQL 镜像


下载最新版本MySQL 镜像(TAG 默认为 latest):

docker pull mysql

下载指定版本MySQL 镜像(以 5.7 版本为例):

docker pull mysql:5.7

更多 MySQL 版本镜像:

1)进入 docker 镜像官网:https://hub.docker.com/,在镜像搜索栏中输入 MySQL,选择 MySQL 官方镜像:
在这里插入图片描述
2)进入 MySQL 详情页面后,点击 Tags 切换到标签页面,可以看到各个版本的 MySQL 镜像:
在这里插入图片描述

2、创建并运行 MySQL 容器


创建并运行命令:

docker run -d -p 3306:3306 \
	-v /mydata/mysql/log:/var/log/mysql \
	-v /mydata/mysql/data:/var/lib/mysql \
	-v /mydata/mysql/conf:/etc/mysql \
	-e MYSQL_ROOT_PASSWORD=123456 \
	--name=mysql \
	mysql:5.7

参数说明:

  • -d:在后台运行 MySQL
  • -p 3306:3306: 将容器的 3306 端口映射到主机的 3306 端口;
  • -v /mydata/mysql/log:/var/log/mysql:把容器中的 MySQL 的日志文件夹 /var/log/mysql 挂载到主机路径 /mydata/mysql/log/ 中;
  • -v /mydata/mysql/data:/var/lib/mysql:把容器中的 MySQL 的数据库文件夹 /var/lib/mysql 挂载到主机路径 /mydata/mysql/data/ 中;
  • -v /mydata/mysql/conf:/etc/mysql:把容器中的 MySQL 的配置文件夹 /etc/mysql 挂载到主机路径 /mydata/mysql/conf/ 中;
  • -e MYSQL_ROOT_PASSWORD=123456:设置 root 用户密码;
  • --name=mysql:将容器命令为 mysql
  • mysql:5.7MySQL 镜像名称;

查看启动结果:

docker ps -l
------------
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
bc4e04860781   mysql:5.7   "docker-entrypoint.s…"   1 minutes ago   Up 5 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

设置 docker 启动时运行自动 MySQL可选):

docker update mysql --restart=always

3、修改 MySQL 配置文件


在主机挂在 MySQL 配置目录中添加配置文件:

vi /mydata/mysql/conf/my.cnf

配置文件内容如下:

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

重启 MySQL 容器:

docker restart mysql

进入 MySQL 容器中也可以看到相应的配置文件:

docker exec -it mysql /bin/bash
---------------------------------
user@7b295c46c99d /: ls /etc/mysql/
my.cnf

4、相关建议


使用 Docker 部署 MySQL 会面临以下几个问题:

  • 数据持久化:使用 Docker 部署 MySQL 需要将数据存储在 Docker 容器中,这意味着在删除容器时可能会导致数据丢失。为了解决这个问题,需要将数据存储在主机上或使用数据卷,这增加了一些复杂性。
  • 性能问题:在 Docker 容器中运行 MySQL 会导致一些性能问题。例如,如果容器内存不足, MySQL 可能会因为内存不足而崩溃。此外,Docker 容器需要额外的虚拟化开销,这可能会导致 MySQL分在容器中运行的速度较慢。
  • 安全问题:使用 Docker 部署 MySQL 可能会导致安全问题。例如,容器中的 MySQL 可能会受到容器逃逸攻击的威胁,因为容器中的其他进程可能会访问 MySQL 容器的文件系统。
  • 复杂性:使用 Docker 部署 MySQL 可能会增加部署和管理的复杂性。需要考虑容器网络配置、数据卷挂载、容器间通信等问题。相比之下,直接在主机上安装和配置 MySQL 可能更加简单和直接。

所以,不建议正式服用 Docker 部署 MySQL。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐