MySQL 的 Docker 镜像在 dockerhub 上的地址:https://hub.docker.com/_/mysqlopen in new window
docker-mysql 的数据存储目录在容器中的:
/var/lib/mysql
docker-mysql 的配置文件在容器中的:
/etc/mysql/my.cnf /etc/mysql/conf.d
关于 MySQL 的配置文件和配置项
MySQL Server 启动时会去加载
/etc/mysql
下的 my.cnf 配置文件,这个配置文件中有一部分配置。一般情况下我们即不会去动这部分内容,也不会在这个配置文件中追加内容。在 my.cnf 配置文件的最后,它又 include 了同一级目录下的conf.d目录,即,让 MySQL Server 再去加载 conf.d 目录下的所有的 .cnf 配置文件。
在 docker 中,默认情况下这个目录下有 2 个配置文件 docker.cnf 和 mysql.cnf(其中,mysql.cnf 中除了注释基本啥都没有)。
第 1 步:下载镜像
如果本地有镜像,则无需下载。是否有,可通过 docker images 命令查看。
docker pull mysql:8.0
第 2 步:docker run 命令运行
环境变量MYSQL_ROOT_PASSWORD是必须的,用于指定 root 账户的登录密码。
示例一:
# 现实中不可能这么用,因为未挂载「数据存储目录」docker run \ -d \ --rm \ --name mysql-test \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0
实例二:
# 这个例子挂载「数据存储目录」# 如果 ~/docker/3306/data 目录不存在,docker 会自动创建它docker run \ -d \ --rm \ --name mysql-3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /docker/mysql/3306/data:/var/lib/mysql \ -p 3306:3306 \ mysql:8.0
实例三:
# 非映射端口,host 网络模式docker run \ -d \ --rm \ --net host \ --name mysql-3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /docker/mysql/3306/data:/var/lib/mysql \ mysql:8.0
第 3 步:验证
# 查看容器的运行信息docker ps# 进入 mysql-3306 容器docker exec -it mysql-3306 /bin/bash# 执行 mysql-cli 的连接命令mysql -h 127.0.0.1 -P 3306 -u root -p
特色功能:初始化数据库
mysql 的 docker 镜像有一个功能:它在「第一次创建并启动容器(注意,重启不算)时」,会到容器内的/docker-entrypoint-initdb.d
目录下查看有没有 sql 脚本( .sql 文件 )。如果有,就执行 sql 脚本。因此,你可以通过这个功能来完成数据库的创建等初始化工作。
因此,你可以在某个目录下创建 .sql 脚本(例如 init.sql),并在其中写上建库、建表等 SQL 语句,未来在 docker run 命令中通过 -v 选项将这个目录映射成/docker-entrypoint-initdb.d
。
-v ~/docker/3306/script:/docker-entrypoint-initdb.d
MySQL 默认配置
这两个配置文件在容器内的/etc/mysql/conf.d
目录下。
docker.cnf
[mysqld]skip-host-cacheskip-name-resolve
mysql.cnf
[mysql]