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-cache
skip-name-resolve

mysql.cnf

[mysql]
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐