1.版本信息

通过 docker version 命令可以获取当前docker版本信息

Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7f2769b/1.13.1
 Built:           Sun Sep 15 14:06:47 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7f2769b/1.13.1
 Built:           Sun Sep 15 14:06:47 2019
 OS/Arch:         linux/amd64
 Experimental:    false

2.部署mysql镜像

2.1 搜索mysql镜像

通过 docker search mysql 命令搜索mysql相关镜像

docker search mysql

如下是部分搜索结果,OFFICIAL 表示是官方镜像

搜索结果.png

2.2 拉取mysql镜像

通过 docker pull mysql 命令拉取mysql镜像,默认是latest版本

docker pull mysql

拉取成功后,可以通过 docker images 确认镜像

docker images

2.3 创建相关目录

# 创建相关目录
mkdir -p /opt/mysql/data 

2.4 启动mysql容器

使用如下命令启动:

docker run -d -p 3306:3306 --name mysql --restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/mysql/data/:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456  mysql:latest
  • -v 表示挂载文件系统
  • -d 表示后台启动
  • -p 表示端口映射
  • –name 表示指定名称
  • –restart=always 表示自动重启
  • -e 表示指定环境变量 MYSQL_ROOT_PASSWORD 表示默认ROOT密码

检查mysql的启动情况

docker logs -f mysql

2.5 进入mysql容器

docker exec -it mysql /bin/bash

容器内使用mysql

# 使用mysql
mysql -uroot -p

# 出现如下密码验证
# Enter password: 

# 输入密码后进入
mysql>

# 测试命令
select version();

show databases;

3.常见问题

3.1 mysql容器系统时间错误,与宿主机时间相差8小时

产生原因是容器与宿主器采用的时区不一致,解决方法:

# 常见的解决方式可以挂载宿主机系统时间,启动时添加如下参数:
-v /etc/localtime:/etc/localtime

# 完整命令
docker run -d -p 3306:3306 --name mysql --restart=always \
-v /etc/localtime:/etc/localtime \
-v /opt/mysql/data/:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456  mysql:latest

3.2 保存数据内容

mysql容器崩溃或者意外停止,仍保留数据内容,可以使用如下配置:

-v /opt/mysql/data/:/var/lib/mysql

3.3 docker部署mysql8.0 指定大小写不敏感

mysql8.0在不同的环境中大小写默认配置不一样:

参数值 参数说明 默认环境
lower_case_table_names=0 表名存储在磁盘是小写的,但是比较的时候是不区分大小写 Linux 默认值
lower_case_table_names=1 表名存储为给定的大小和比较是区分大小写的 Windows默认值
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的 Mac 默认值

如需修改需要在启动服务是修改

docker run -d -p 3306:3306 --name mysql \
-v /etc/localtime:/etc/localtime \
-v /opt/mysql/data/:/var/lib/mysql \
-v /opt/mysql/my.cnf:/etc/mysql/my.cnf \
-e MYSQL_ROOT_PASSWORD=123456   mysql:8.0.22 --lower_case_table_names=1

如果之前容器已经启动过,新增 --lower_case_table_names=1 会导致启动失败,需要进行重新初始化,或者清除 data 后,重新启动。

其他参考启动脚本

docker run -d -p 3306:3306 --name mysql \
-v /opt/mysql/log:/var/log/mysql \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD \
mysql:8.0.22

作者是一个技术肥宅,还在不断的学习进步中,十分欢迎各位 杠精 读者指出文中不足之处,快来给我留言吧;欢迎转载,烦请注明出处。