docker commit制作MySQL的docker镜像

基于ubuntu18.04制作MySQL的docker镜像

一、通过docker commit

1. 基础配置

2. 制作步骤

  1. 拉去镜像默认拉去latest
    docker pull ubuntu
  2. 查看docker镜像,期中ubuntu镜像已被拉取
    docker images
  3. 通过ubuntu镜像启动一个容器,里面是新的系统,启动后,返回容器的id
    docker run -it -d --name lyfubuntu ubuntu:latest /bin/bash
    在这里插入图片描述
  4. 国外的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
  1. 进入容器,我起的容器id是a8c7bcf49c91,以实际为准
    docker exec -it a8c7 /bin/bash
  2. 更新apt-get,并安装vim
    apt-get update
    apt-get install -y vim
    可以看到,使用的是阿里镜像源
    在这里插入图片描述
  3. 安装MySQL,Ubuntu18.04默认安装的MySQL-server版本是5.7
    apt-get install -y mysql-server
  4. 查看MySQL服务状态
    service mysql status
    服务处于停止状态
    服务处于停止状态
  5. 启动MySQL
    service mysql start
    在这里插入图片描述
    查看MySQL服务状态,看到具体信息,服务已经启动
    service mysql status
    在这里插入图片描述
  6. 使用MySQL
    输入mysql即可进入
    在这里插入图片描述
    问题来了,为什么没有输入密码就使用root用户登录进去了呢???
    Ubuntu安装MySQL5.7,没有为root用户提供密码,使用的是auth_socket插件,该插件不需要密码。它只检查用户是否使用了Unix套接字进行连接,然后比较用户名,是root用户就直接连接MySQL了。
    Ubuntu在Mysql安装后是有一个默认的用户和密码的,使用cat /etc/mysql/debian.cnf查看,如下所示,可以使用该用户和密码连接MySQL
    用户:debian-sys-maint
    密码:V1vuU0SOhyO4Q3dd
    在这里插入图片描述
  7. 给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;
在这里插入图片描述

  1. 修改配置文件,MySQL的my.cnf 配置文件中的bind-address参数默认是127.0.0.1只能本地连接,修改配置文件
    开始是在这里插入图片描述
    vi /etc/mysql/mysql.conf.d/mysqld.cnf
    修改 bind-address = 0.0.0.0

  2. 退出容器,然后停止容器
    docker stop a8c7

  3. 通过该容器制作镜像
    docker commit [options]
    options说明
    -a :镜像的作者
    -c :使用Dockerfile指令来创建镜像
    -m :说明文字
    -p :在commit时,将容器暂停
    docker commit -a "lyf" -m "this mirror by docker commit" a8c7 myubuntu:v3

如图所示,该镜像已做好
在这里插入图片描述

  1. 通过该镜像启动一个新的容器
    docker run -it -d --name ubuntutest -p 3314:3306 myubuntu:v3 /bin/bash
    在这里插入图片描述
  2. 进入容器,启动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服务,启动成功,本地连接测试
    在这里插入图片描述
  3. 使用Squirrel SQL Client远程连接
    查看宿主机ip地址
    在这里插入图片描述
    Alias连接信息如下,因为宿主机映射容器的端口是3314,所以访问本机的3314端口即可访问到容器中的MySQL
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

到此结束,如有问题,请留言!!!

猜你喜欢

转载自blog.csdn.net/m0_38015372/article/details/96662936