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]