此篇幅记录如何使用 Docker 快速安装与搭建Mysql环境并对外开放。
安装环境:阿里云ECS服务器 CentOS 7.4 64位
1 下载Mysql镜像
这里以 5.7 为例
docker pull mysql:5.7
下载完成后,通过 docker images
检查一下镜像是否下载成功:
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 7faa3c53e6d6 3 weeks ago 373MB
2 以最简单的方式启动
docker run -d \
--name mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
-d
:以后台的方式运行--name mysql
:指定容器的名称为 mysql-p3306:3306
将容器的 3306 端口挂载到宿主机的 3306 端口上-e MYSQL_ROOT_PASSWORD=root
:指定 root 的密码为 root
命令执行完成后,你也可以通过 docker ps
命令来确认下容器是否启动成功。若成功,我们需要将容器中的目录文件复制到宿主机中,分别包括:
- mysql 配置文件;
- 数据存储目录,以便挂载(PS: 若不挂载到宿主机,每次启动容器数据都会丢失)
# 创建mysql在宿主机上存储目录
mkdir -p /usr/local/software/docker/mysql/config
mkdir -p /usr/local/software/docker/mysql/data
# 将容器中的 mysql 配置文件复制到宿主机中指定路径下,路径你可以根据需要,自行修改
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/software/docker/mysql/config
# 将容器中的 mysql 存储目录复制到宿主机中
docker cp mysql:/var/lib/mysql/ /usr/local/software/docker/mysql/data
完成这一切后,让我们将刚刚运行的容器删除掉
docker rm -f mysql
mysql 是我们运行容器时,指定的名称,当然,你也可以先执行
docker ps
, 通过容器 ID 来删除
3 正式运行 Mysql 容器
正式启用 Mysql 容器
docker run -d \
--name mysql \
-p 3308:3306 \
-v /usr/local/software/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \
-v /usr/local/software/docker/mysql/data/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
其他不变,额外添加了两个挂载子命令:
-v/usr/local/software/docker/mysql/config/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
: 将容器中 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件挂载到宿主机的 /usr/local/software/docker/mysql/config/mysqld.cnf 文件上;-v/usr/local/software/docker/mysql/data:/var/lib/mysql
: 将容器中 /var/lib/mysql 数据目录挂载到宿主机的 /usr/local/software/docker/mysql/data 目录下;
执行命令完成后,查看下容器是否启动:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd6ff1ddf62 mysql:5.7 "docker-entrypoint.s…" 2 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
可以看到,容器运行成功
因为ECS服务器默认3306端口没有开放,请把3306端口开放
4 通过Mysql客户端进行连接测试
通过 MySQL 客户端连接刚刚创建的 mysql, 看看能否连接成功:
至此,就可以使用Docker下的Mysql容器进行开发了
5 那些踩过的坑
如果连接不成功,或者使用的是本地虚拟机进行安装测试的,请检查以下选项
防火墙是否将端口开放
将Mysql对外连接开放
- 执行
docker exec -it mysql /bin/bash
- mysql -u root -p
- grant all privileges on . to 'root'@'%' identified by 'root' with grant option;
- flush privileges;