基于ubuntu18.04制作MySQL的docker镜像
- 一、通过docker commit
- 1. 基础配置
- 2. 制作步骤
一、通过docker commit
1. 基础配置
- 镜像源:https://ogec0pyk.mirror.aliyuncs.com(阿里)
- Ubuntu版本信息
- MySQL版本信息
2. 制作步骤
- 拉去镜像默认拉去latest
docker pull ubuntu
- 查看docker镜像,期中ubuntu镜像已被拉取
1. docker images
- 通过ubuntu镜像启动一个容器,里面是新的系统,启动后,返回容器的id
1. docker run -it -d --name lyfubuntu ubuntu:latest /bin/bash
- 国外的Apt源速度过慢,这里记录下如何将Ubuntu默认Apt源为阿里镜像源,在宿主机创建sources.list,内容如下,复制该文件替换掉到容器内部
docker cp sources.list a8c7 :/etc/apt/
sources.list内容:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
- 进入容器,我起的容器id是a8c7bcf49c91,以实际为准
docker exec -it a8c7 /bin/bash
- 更新apt-get,并安装vim
apt-get update
apt-get install -y vim
可以看到,使用的是阿里镜像源 - 安装MySQL,Ubuntu18.04默认安装的MySQL-server版本是5.7
apt-get install -y mysql-server
- 查看MySQL服务状态
service mysql status
服务处于停止状态 - 启动MySQL
service mysql start
- 查看MySQL服务状态,看到具体信息,服务已经启动
service mysql status
- 使用MySQL
输入mysql
即可进入
问题来了,为什么没有输入密码就使用root用户登录进去了呢???
Ubuntu安装MySQL5.7,没有为root用户提供密码,使用的是auth_socket插件,该插件不需要密码。它只检查用户是否使用了Unix套接字进行连接,然后比较用户名,是root用户就直接连接MySQL了。
Ubuntu在Mysql安装后是有一个默认的用户和密码的,使用cat /etc/mysql/debian.cnf
查看,如下所示,可以使用该用户和密码连接MySQL
用户:debian-sys-maint
密码:V1vuU0SOhyO4Q3dd - 给root用户设置密码,使用mysql_native_password连接模式,并授权远程连接权限
本地连接
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'lyf123'; 开启远程连接 grant all privileges on *.* to root@'%' identified by "lyf123";
切换到MySQL数据库并查看用户信息use mysql;
然后select host,user,plugin from user;
- 修改配置文件,MySQL的my.cnf 配置文件中的bind-address参数默认是127.0.0.1只能本地连接,修改配置文件
开始是 vi /etc/mysql/mysql.conf.d/mysqld.cnf
修改 bind-address = 0.0.0.0- 退出容器,然后停止容器
docker stop a8c7
- 通过该容器制作镜像 docker commit [options] options说明
12. -a :镜像的作者-c :使用Dockerfile指令来创建镜像-m :说明文字-p :在commit时,将容器暂停docker commit -a "lyf" -m "this mirror by docker commit" a8c7 myubuntu:v3
如图所示,该镜像已做好
- 通过该镜像启动一个新的容器
docker run -it -d --name ubuntutest -p 3314:3306 myubuntu:v3 /bin/bash
- 进入容器,启动MySQL服务,发现启动失败,查看日志
Fatal error: Can’t open and lock privilege tables: Table storage engine for ‘user’ doesn’t have this option.
百度所得,将/var/lib/mysql和/var/run/mysqld文件的拥有着改成mysql用户或组即可chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
再启动MySQL服务,启动成功,本地连接测试 - 使用Squirrel SQL Client远程连接
查看宿主机ip地址
Alias连接信息如下,因为宿主机映射容器的端口是3314,所以访问本机的3314端口即可访问到容器中的MySQL