拉取镜像
[root@starseaing9228 ~]# docker pull mysql:5.7.26
5.7.26: Pulling from library/mysql
27833a3ba0a5: Pull complete
864c283b3c4b: Pull complete
cea281b2278b: Pull complete
8f856c14f5af: Pull complete
9c4f38c23b6f: Pull complete
1b810e1751b3: Pull complete
5479aaef3d30: Pull complete
0f1430d39d4f: Pull complete
2bc64c824b3f: Pull complete
b64ec62ca852: Pull complete
42323e351ef3: Pull complete
Digest: sha256:069c2bc62a2b1f84827b96c36870c45be5458f1438c27a41535ba5197aa2e26c
Status: Downloaded newer image for mysql:5.7.26
[root@starseaing9228 ~]#
[root@starseaing9228 ~]#
[root@starseaing9228 ~]#
[root@starseaing9228 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.26 2f52e94d8acb 4 days ago 373MB
hello-world latest fce289e99eb9 3 months ago 1.84kB
[root@starseaing9228 ~]#
创建用于挂载的目录:
[root@starseaing9228 mysql57]# mkdir -p /usr/local/mysql57/logs /usr/local/mysql57/conf /usr/local/mysql57/data
命令包含以下三个部分:
docker run <相关参数> <镜像 ID> <初始命令>
其中,相关参数包括:
-i:表示以“交互模式”运行容器
-t:表示容器启动后会进入其命令行
-v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
添加配置文件
添加my.cnf配置文件,具体内容看cat的输出:
[root@starseaing ~]# vi /usr/local/mysql57/conf/my.cnf
[root@starseaing ~]# cat /usr/local/mysql57/conf/my.cnf
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
# basedir=/var/mysql57
# 设置mysql数据库的数据的存放目录
# datadir=/var/mysql57/data
# 修改mysql5.7版本的验证模式,主要是去掉ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# 允许最大连接数
max_connections=200
# 设置服务端使用的字符集
character-set-server=utf8
# 设置默认的排序
collation-server = utf8_unicode_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
docker版本,应该可以去掉basedir和datadir。
*注意:[client]、[mysql]、[mysqld]这三个标记,是有具体顺序和作用的。
docker运行mysql5.7.26:
–privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
挂载路径:
配置文件路径:/usr/local/mysql57/conf/my.cnf:/etc/mysql/my.cnf
数据路径: /usr/local/mysql57/data:/var/lib/mysql
日志文件路径:/usr/local/mysql57/logs:/var/log/mysql(发现日志路径无法映射,暂时不映射该路径,自行去容器内部查看)
实际的容器日志为: /var/log/mysql/error.log
chown -R 999:999 /usr/local/mysql57/logs(宿主的文件夹权限)
所以运行命令为:
docker run --name mysql57 -p 3306:3306 -v /usr/local/mysql57/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql57/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7.26
进入容器和查看具体的目录:
[root@starseaing9228 mysql57]# docker exec -it 6fd1e0a540da /bin/bash
root@6fd1e0a540da:/#
root@6fd1e0a540da:/# ls
bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 logs media mnt opt proc root run sbin srv sys tmp usr var
root@6fd1e0a540da:/# cd lib
root@6fd1e0a540da:/lib# ls
init lsb systemd terminfo udev x86_64-linux-gnu
root@6fd1e0a540da:/lib# cd ..
root@6fd1e0a540da:/# cd var
root@6fd1e0a540da:/var# ls
backups cache lib local lock log mail opt run spool tmp
root@6fd1e0a540da:/var# cd log
root@6fd1e0a540da:/var/log# ls
alternatives.log apt btmp dpkg.log faillog lastlog mysql wtmp
root@6fd1e0a540da:/var/log#
root@6fd1e0a540da:/var/log# cd mysql
root@6fd1e0a540da:/var/log/mysql# ls
error.log
root@6fd1e0a540da:/var/log/mysql# cat error.log