自己制作mysql镜像_制作轻量级的mysql镜像

一、拉取一个mysql5.5镜像

docker pull mysql:5.5

二、通过镜像启动一个容器,并在容器中安装ps命令,安装前需要更新apt-get

docker run ‐di -p 3306:3306 --name mysqldocker -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5

因为原生的mysql:5.5镜像里面很干净,里面的apt-get工具也是老版的,所以进入容器后得先更新apt-get,再安装ps

apt-get update  && apt-get install procps

根据自己的需要修改mysql配置文件/etc/mysql/my.cnf,下面是我的配置

[mysqld]

datadir=/var/lib/mysql

general_log=on

general_log_file=/var/log/mysql/general.log

socket=/var/lib/mysql/mysql.sock

symbolic-links=0

pid-file=/var/run/mysqld/mysqld.pid

!includedir /etc/mysql/conf.d/

查看配置文件中的文件或文件夹是否存在,没有的话记得去创建

创建文件/var/log/mysql/general.log并给予权限chown -R mysql:mysql /var/log/mysql -> cd mysql -> touch general.log -> chmod +x general.log

建立一个软链接 ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock (一定得建立这个软链接,不然后面进入数据库时会报错)

三、退出容器,并使用此容器生成一个镜像

docker commit -m 'mysql5.5' -a 'ha' mysqldocker mysql5.5:part1

四、用上面生成的新的镜像来开启一个新的容器,后面加上/bin/bash

docker run -dit --privileged=true --name=testmysql mysql:part1 /bin/bash

进入testmysql容器中,ps查看mysql进程,没有自动启动,此时使用启动mysql的原始命令mysqld --user root

mysqld --user root

输入该命令后报错:[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it

此时运行命令mysql_install_db --user=mysql

输入该命令后报错:

FATAL ERROR: Could not find ./bin/my_print_defaults

If you compiled from source, you need to run 'make install' to

copy the software into the correct location ready for operation.

If you are using a binary release, you must either be at the top

level of the extracted archive, or pass the --basedir option

pointing to that location.

按照错误提示,去mysql安装目录的bin目录下查找是否有my_print_defaults, 本镜像mysql的安装目录为/usr/local/mysql,进到bin文件夹下查看是否有my_print_defaults,发现是有的;再回过头看报错信息,注意到那个路径是相对路径,是以mysql的安装目录为起始的,而初始化则是进去初始化脚本目录里运行脚本;所以回到安装目录以相对路径去执行初始化脚本

cd /usr/local/mysql

./scripts/mysql_install_db --user=mysql

再重新执行一遍mysqld --user root,发现mysql已经成功启动

但在容器中执行mysql -u root -p123456是发现报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:YES)

这是因为数据库里面user表中的用户密码被置空了,具体什么原因正在了解

此时需要修改my.cnf配置文件,添加skip-grant-tables,重新启动mysql,然后无密码进入数据库中

执行:update mysql.user set password=PASSWORD("123456") where user="root"

如果需要允许外部主机访问本数据库,则还需要在user表中添加一条记录:insert into user(host,user,password) values("%","root",PASSWORD("123456"));

刷新:flush privileges;

退出并重启数据库

五、将testmysql容器制作成最终的镜像

docker commit -m 'mysql5.5' -a 'ha' testmysql mysql5.5:part2

你可能感兴趣的:(自己制作mysql镜像)